0

私は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

4

1 に答える 1

1

カスタム例外をExcetionの代わりにRuntimeExceptionを拡張するようにすると、問題なくスローできるはずです。

于 2012-11-08T07:53:24.037 に答える