1

我有以下代码:

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

4

1 回答 1

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 秒。

于 2013-07-31T23:13:52.903 回答