【问题标题】:Page Load Timeout - Selenium Webdriver using C#页面加载超时 - 使用 C# 的 Selenium Webdriver
【发布时间】:2013-01-30 14:44:46
【问题描述】:

我正在使用 Selenium 2.25 WebDriver

我在查找页面上的元素时遇到问题,有时我的测试用例能够找到元素,有时页面没有加载,它是由于页面加载,如果我在下面添加这个似乎喜欢工作:

 driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));

我的问题是,我不想让我的代码分散在上面的代码行中,有没有办法让它集中在一个地方?

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: c# selenium selenium-webdriver settimeout page-load-time


    【解决方案1】:

    如果您设置一次超时,它会在驱动程序实例的生命周期内设置。你不需要一直重置它。您可以在创建驱动程序后立即设置。

    IWebDriver driver = new FirefoxDriver();
    driver.Manage().Timeouts.SetPageLoadTimeout(TimeSpan.FromSeconds(2));
    

    使用此超时的唯一警告是,并非每个浏览器都可以完全支持它(IE 确实支持,我认为 Firefox 也支持,但我不认为 Chrome 支持)。

    【讨论】:

    • 谢谢吉姆,我应该把代码放在哪里?为了在驱动程序实例的生命周期内设置超时?
    【解决方案2】:

    您可以尝试这样的解决方法:

    观察页面中最后加载的元素并找到它的 id(或任何其他标识符)。然后做这样的事情:

     while (true)
            {
                try
                {   
                    IWebElement element = driver.FindElement(By.Id(...));
                    if (element.Displayed)
                    {
                        break;
                    }
                }
                catch (Exception)
                {
                    continue;
                }
            }
    

    这将一直循环,直到显示最后加载的元素并随后中断。捕获元素未找到异常并继续循环,直到元素不显示为止。

    【讨论】:

    • 我认为强制while循环不会有利于测试性能
    猜你喜欢
    • 2012-05-23
    • 2015-02-10
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多