首页 > 解决方案 > 如何使用 C# 增加 Selenium webdriver 中的代码执行时间限制

问题描述

网站在向其请求数据时需要时间来加载。

如果网站在 60 秒内加载,则一切正常。超过那个时间,它把我扔到错误部分。

实际上,这段代码只执行了 60 个部分。

this.driver.FindElement(By.CssSelector("#btnLogin")).Click();

如何设置驱动程序等待这段代码完全执行?

谢谢

标签: c#winformsseleniumselenium-webdriver

解决方案


有很多选项可以设置页面加载超时。

driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(90);

或者

driver.Manage().Timeouts().ImplicitWait.Add(System.TimeSpan.FromSeconds(90)); 

或者

driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(90));

或者

driver.Manage().Timeouts().AsynchronousJavaScript.Add(90));

更新-1

您可以尝试在新页面上等待元素的存在(页面加载后出现页面)。编写一个自定义方法来查找具有超时的元素,如下所示

public static class WebDriverExtensions
{
    public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
    {
        if (timeoutInSeconds > 0)
        {
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(driver => driver.FindElement(by));
        }
        return driver.FindElement(by);
    }
}

上述方法的用法:

driver.FindElement(By.CssSelector("#btnLogin"), 90);

推荐阅读