.NET Selenium NoSuchElementException;WebDriverWait.Until() 不起作用

lev*_*nja 6 .net c# selenium nosuchelementexception

我们有一个 .NET 4.5、MVC、C# 项目。我们使用 Selenium 进行 UI 测试,并且测试在我们拥有的线路上不断间歇性失败wait.Until()。其中一个例子是:

NoSuchElementException was unhandled by user code
An exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll but was not handled in user code
Additional information: Unable to locate element: {"method":"css selector","selector":"#assessment-472 .status-PushedToSEAS"}
Run Code Online (Sandbox Code Playgroud)

它就被扔在这里:

Thread.Sleep(600);
wait.Until(drv => drv.FindElement(By.CssSelector("#" + assessmentQueueId + " .status-PushedToSEAS")));
Run Code Online (Sandbox Code Playgroud)

我可以看到浏览器打开,我看到它到达了这一点,并且我可以检查元素以查看该元素是否存在。它的 id 是完全正确的。

我们经常遇到这个问题,到目前为止,解决方案就是将其抛出Thread.Sleep(600)(或类似的时间)。重点wait.Until()是不必这样做,这使得我们的测试套件变得很长。Thread.Sleep()另外,正如您在上面的示例中所看到的,有时即使在前面加上 ,我们也会遇到问题,我们必须延长时间。

为什么 .NET SeleniumWebDriver.Until()不起作用,是否有不同的方法可以完成同样的事情,而无需等待一段时间?同样,这个问题是间歇性的,这意味着它只是有时发生,并且它可能发生在任意数量的wait.Until()语句中,而不仅仅是显示的语句!

编辑:

这是一个类变量。 private WebDriverWait wait;

它的实例化如下:

this.wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
Run Code Online (Sandbox Code Playgroud)

lev*_*nja 1

我决定不使用WebDriverWait.Until(),而是在主驱动程序上使用隐式等待:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
Run Code Online (Sandbox Code Playgroud)

我完全相信这个答案在另一个问题上给了我这个想法。