我有以下代码:
// setting timeout to a FULL MINUTE
WebDriverWait wait = new WebDriverWait(driver, 60);
Actions action = new Actions(driver);
// First, click the usermenu
WebElement userMenu = wait.until(ExpectedConditions.elementToBeClickable(By.id("UserMenu")));
userMenu.click();
WebElement adminPortal = driver.findElement(By.id("AdminPortals"));
action.moveToElement(adminPortal);
action.perform();
// Wait for secondary menu to become available
WebElement portal = wait.until(ExpectedConditions.elementToBeClickable(By.id(portalId)));
portal.click();
基本上,“UserMenu”是一个下拉列表,并且有一个悬停扩展菜单“AdminPortals”。上面的代码模拟(在Selenium中,单击展开菜单中的项目的操作。
我遇到的问题与超时期有关。什么时候开始倒计时?我假设是在使用wait.until()时。并且我假设它在ExpectedConditions返回True后停止计数?并且,真正的问题是:如果我使用相同的“等待”两次,就像我在这里一样,60秒重置为每次使用之间的限制,还是重新开始计算它之前停止的位置?
所以,如果第一次等待需要2秒,第二次等待需要3秒,那么第三次调用wait.until()的超时是55秒,还是重置为60?
答案 0 :(得分:2)
是的,当您调用until
方法时,它会开始倒计时。当您实例化一个新的WebDriverWait
对象并指定超时时,它会设置一个时钟,因此每次在该对象上调用util
方法时,它将继续倒计时相同的计时器。它每次返回时都不会重置计时器。如果要重置计时器,则需要创建新的WebDriverWait对象。
这在文档中真的不清楚。我不得不查看代码来弄清楚发生了什么。逻辑实际上是从FluentWait类继承的。这是我看过的源代码链接:
因此,如果第一次等待需要2秒,第二次等待需要3秒,第三次调用wait.until()
的超时时间将为55秒。