【问题标题】:Explicit wait is not working in selenium webdriver 2.37?显式等待在 selenium webdriver 2.37 中不起作用?
【发布时间】:2013-11-15 20:24:09
【问题描述】:

我有一个显式等待元素存在的方法。在我将驱动程序升级到 2.37 之前它工作正常。问题是即使我在我的方法中传递了超时参数,它似乎并没有等待那么长时间,而是抛出了“elementNotFound”异常。我相信它仍在使用默认 webdriver 的超时。下面是我在我的方法中使用的代码(这不是我的原始代码,我是从 stackoverflow 中获取的)。我什至尝试过 TimeSpanFromMINutes ,它似乎并没有等那么久。 2.37 出了什么问题?

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

【问题讨论】:

  • 你应该调试它。在if 中放置一个断点并确保它击中它。您也不应该忽略任何异常类型,它已经为您完成了。另外,驱动程序是否设置了任何隐式等待?
  • 我进行了调试,是的,它到达了 if 语句内部,但它没有等待足够长的时间,如超时参数中定义的那样。它看起来像一个错误,因为直到(ExpectedConditions) 完美运行。它是相同的代码,运行了至少 3-4 个月,突然升级到 2.37 打破了它。
  • 该代码在 v2.37 中没有改变:selenium.googlecode.com/git/dotnet/CHANGELOG ....您使用的预期条件与您的初始代码完全相同:@ 987654322@ ....
  • 嗨@Arran你能解释一下隐式等待如何影响显式等待吗?谢谢

标签: c# selenium


【解决方案1】:

我不能说它为什么停止工作,但你可以使用 ExpectedConditions 来查看元素是否存在。我测试了它,它似乎在 2.37 中工作:

if (timeoutInSeconds > 0)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
    wait.IgnoreExceptionTypes(typeof(OpenQA.Selenium.NoSuchElementException)); 
    return wait.Until(ExpectedConditions.ElementExists(by));
}
return driver.FindElement(by);

【讨论】:

  • 谢谢!是的,ExpectedConditions 似乎有效。至少,它似乎在等到超时。这个问题需要向 Selenium 社区报告吗?
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
相关资源
最近更新 更多