WebDriverWait计时器在测试之间重置?

时间:2013-07-31 23:01:15

标签: selenium webdriver selenium-webdriver

我有以下代码:

// 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?

1 个答案:

答案 0 :(得分:2)

是的,当您调用until方法时,它会开始倒计时。当您实例化一个新的WebDriverWait对象并指定超时时,它会设置一个时钟,因此每次在该对象上调用util方法时,它将继续倒计时相同的计时器。它每次返回时都不会重置计时器。如果要重置计时器,则需要创建新的WebDriverWait对象。

这在文档中真的不清楚。我不得不查看代码来弄清楚发生了什么。逻辑实际上是从FluentWait类继承的。这是我看过的源代码链接:

https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/support/ui/FluentWait.java

因此,如果第一次等待需要2秒,第二次等待需要3秒,第三次调用wait.until()的超时时间将为55秒。