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() を使用するときだと思います。そして、True が ExpectedConditions によって返されると、カウントが停止すると思いますか? そして、本当の問題は、ここにあるように同じ「待機」を 2 回使用した場合、各使用間の制限として 60 秒がリセットされるのか、それとも以前に停止した場所からカウントを再開するのかということです。

では、最初の待機に 2 秒かかり、2 番目の待機に 3 秒かかった場合、wait.until() への 3 番目の呼び出しのタイムアウトは 55 秒になりますか、それとも 60 秒にリセットされますか?

4

1 に答える 1

2

はい、untilメソッドを呼び出すとカウントダウンが始まります。新しいWebDriverWaitオブジェクトをインスタンス化してタイムアウトを指定すると、クロックが設定されるため、そのオブジェクトでメソッドを呼び出すたびに、同じ timerutilのカウントダウンが続行されます。戻るたびにタイマーをリセットしません。タイマーをリセットするには、新しい WebDriverWait オブジェクトを作成する必要があります。

これは、ドキュメントでは本当に不明確です。何が起こっているのかを理解するために、コードを調べなければなりませんでした。ロジックは、実際には FluentWait クラスから継承されます。私が見たソースコードのリンクは次のとおりです。

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

したがって、最初の待機に 2 秒かかり、2 番目の待機に 3 秒かかった場合、3 番目の呼び出しのタイムアウトはwait.until()55 秒になります。

于 2013-07-31T23:13:52.903 に答える