@pavel_kazlou、FluentWaitに関する質問については、基本的に2種類の待機があります。
明示的な待機
WebDriverWait.until(condition-that-finds-the-element)
暗黙の待機
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
違いは
- 明白-暗黙の待機時間はスクリプト内のすべての要素に適用されますが、明示的なのは特定の要素にのみ適用されます
- Explicitでは、状態をチェックする頻度(500ミリ秒ではなく)を構成できます。
- Explicitでは、タイムアウトまで「NoSuchElement」以外の例外を無視するように構成することもできます。WebDriverWait(実際にはFluentWaitを拡張します)と同様に機能するFluentWaitを使用しますが、柔軟性が少し向上します。
WebDriverWaitの使用例を次に示します(別のWebDriverWaitコンストラクターを使用して、要素のポーリング間隔(ミリ秒単位で測定)を指定します)。
new WebDriverWait(webDriver(), 10, 50).until(ExpectedConditions.elementToBeClickable(By.xpath(menuItemXpath)));
WebDriverWait(実際にはFluentWaitを拡張します)と同様に機能するFluentWaitを使用しますが、柔軟性が少し向上します。特に、無視するWebDriver例外を選択する機能があります。使用例:
new FluentWait(webDriver())
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(50, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class)
.until(ExpectedConditions.elementToBeClickable(By.xpath(menuItemXpath)));
私のメモを締めくくるには、fluentWaitは明示的なタイプの待機であり、無視するWebDriver例外のタイプを明示的に選択する可能性を提供します。暗黙的な待機には、任意のwebElementを待機するための固定時間が含まれます。IMHO fluentWaitアプローチは、この観点からより堅牢です。