私はSeleniumのクラスを、さまざまなタイプのロケーション基準を受け入れることができ、バージョンおよび/またはの新しいメソッドを提供するByより広いクラスに拡張しています。LocatorSearchContextWebDriver
一意の要素が存在し、表示され、有効になるのを待つ次のメソッドがあります。
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いないこと、およびどちらかを実行できるサブクラスがないためです。PredicateException
これを行う方法はありますか?Javaとのように、例外をスローできる形式Functionまたは例外はありますか?ない場合は、待機機能の独自のバージョンを作成する必要があるかもしれません。ありがとう!PredicateCallableRunnable