我们在 Selenium 中遇到了显式等待条件的问题。我们目前正在使用 Selenium 版本 4.19 / 4.20 和 C# .NET 4.7.2。最近,我们注意到,当使用显式等待条件(例如 ElementisVisible 或 ElementToBeClickable)时,即使在分配的时间之前满足指定的条件,Selenium 也不会继续执行后续步骤。相反,Selenium 会等待显式等待的最大指定时间。 我们最近根据 Selenium 的“等待策略”文档修改了我们的代码
之前我们使用以下代码:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementExists(By.Id("id")));
最近重构了新代码
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(d => revealed.Displayed);
a.在这两种情况下,它的行为是相同的。根据有关等待条件的 Selenium 文档,指出在同一驱动程序中同时使用隐式和显式等待可能会导致功能不正确。
我们采用 10 秒的隐式等待,而显式等待则根据应用程序的行为从 10 到 30 秒不等。
这个问题是否是由于我们的框架同时采用隐式和显式等待造成的? Selenium 等待所有显式条件的最大指定时间,导致执行时间显着增加。有人可以帮忙解决这个问题吗?
b.在使用仅用于“显示”的 lambda 表达式的新等待条件代码时,我无法找到 Selenium 中其他显式等待条件的等效等待条件。 (如 InvisibilityOfElementLocated、ElementToBeClickable 等)
您使用的方法的名称中有一个语义线索:“FromSeconds”。
您可能想检查:
Duration.ofSeconds()
所以在你的代码中它将是:
WebDriverWait 等待 = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.Until(ExpectedConditions.ElementExists(By.Id("id")));
参考:https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait