Selenium-synchronization
提供:Dev Guides
セレン-同期
スクリプトの実行とアプリケーションを同期するには、適切なアクションを実行した後に待機する必要があります。 同じことを達成する方法を見てみましょう。
Thread.Sleep
Thread.Sleepは静的な待機であり、条件なしでスリープするため、スクリプトで使用するのに適した方法ではありません。
Thread.Sleep(1000);//Will wait for 1 second.
明示的な待機
「明示的な待機」は、先に進む前に特定の条件が発生するのを待ちます。 主に、オブジェクトが表示されたらクリックするか、オブジェクトを操作するときに使用します。
WebDriver driver = new FirefoxDriver();
driver.get("Enter an URL"S);
WebElement DynamicElement =
(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("DynamicElement")));
暗黙の待機
暗黙の待機は、WebDriverが使用できないためにオブジェクトをすぐに見つけられない場合に使用されます。 WebDriverは、指定された暗黙の待機時間の間待機し、指定された期間中に要素の再検索を試行しません。
指定された制限時間を超えると、webDriverは最後にもう一度要素を検索しようとします。 成功すると、実行を続行します。失敗すると、例外をスローします。
これは一種のグローバル待機です。つまり、待機はドライバー全体に適用されます。 したがって、この待機をより長い時間ハードコーディングすると、実行時間が妨げられます。
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("Enter an URL");
WebElement DynamicElement = driver.findElement(By.id("DynamicElement"));
流Waitに待つ
FluentWaitインスタンスは、条件が発生するまで待機する最大時間と、オブジェクト条件の存在を確認する頻度を定義します。
要素がページで使用可能になるまで60秒かかりますが、10秒ごとに1回、そのavilableをチェックします。
Wait wait =
new FluentWait(driver).withTimeout(60, SECONDS).pollingEvery(10, SECONDS).ignoring(NoSuchElementException.class);
WebElement dynamicelement = wait.until(new Function<webdriver,webElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("dynamicelement"));
}
});