私はSeleniumのクラスを、さまざまなタイプのロケーション基準を受け入れることができ、バージョンおよび/またはの新しいメソッドを提供するBy
より広いクラスに拡張しています。Locator
SearchContext
WebDriver
一意の要素が存在し、表示され、有効になるのを待つ次のメソッドがあります。
public void waitForElementPresent(BSWebDriver driver, int timeoutSeconds) {
try {
FluentWait<BSWebDriver> wait = new FluentWait<BSWebDriver>(driver)
.withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
wait.until(new Function<BSWebDriver, Boolean>() {
public Boolean apply(BSWebDriver driver) {
return isElementPresent(driver);
}
});
} catch (TimeoutException timeoutEx) {
throw new WaitForElementException(this, timeoutSeconds,
WAIT_FOR.PRESENT);
}
}
isElementPresent
要素が存在するかどうか(つまり、要素が存在し、表示され、有効になっている)のチェックを処理するメソッドですが、待機することはありません。問題は、ロケーターが要素を一意に識別しない場合(つまり、場所の基準に一致する複数の要素が返される場合)にisElementPresent
カスタムエラーをスローすることです。Exception
現在、上記のコードにはコンパイルエラーがあります。これは、私が知る限り、をスローすることも許可されてFunction
いないこと、およびどちらかを実行できるサブクラスがないためです。Predicate
Exception
これを行う方法はありますか?Javaとのように、例外をスローできる形式Function
または例外はありますか?ない場合は、待機機能の独自のバージョンを作成する必要があるかもしれません。ありがとう!Predicate
Callable
Runnable