0

次のSeleniumExplicitwaitでは、メソッドuntilが次のようなものを返すことがわかります。

<V> Vメソッドのためにuntil(com.google.common.base.Function<? super T,V> isTrue)

私の疑問は、彼らがそれをタイプの要素にどのように参照しているのかということWebElementです。

WebElement element = b.until(ExpectedConditions.elementToBeClickable(By.id("Email")));
4

2 に答える 2

0

ローンによる回答に加えて、この質問は、Webドライバーに関係するものよりも、ジェネリックの動作に関連していると思います。したがって、ジェネリックについてもっと読むと、この質問に答えるのに役立ちます。

以下が最良の説明であるかどうかはわかりませんが、試してみます:

elementToBeClickableメソッドを呼び出すと、のようなものが返されますExpectedCondition<WebElement>

untilメソッドはVを返します。Vはジェネリック型のプレースホルダーです。では、Vは何を保持するのでしょうか?Vはの1つと同じですFunction<? super T, V>

あなたの場合:Function<? super T, V>= ExpectedCondition<WebElement>

次に、ExpectedConditionの定義を見てください。

public interface ExpectedCondition<T> extends Function<WebDriver, T> {}

つまり、あなたの場合、ExpectedCondition<WebElement>つまりFunction<WebDriver, WebElement> VはWebElementであり、したがってWebElementを返します。

于 2012-11-08T09:28:58.957 に答える
0

ソースで確認できるように、次のように指定されています。

  • @param <V> The function's expected return type.
  • メソッドのシグネチャは : のようになりますpublic <V> V until(Function<? super T, V> isTrue) {...}

結論として、 ExpectedConditionパラメーターを使用する場合(これが最も可能性が高い)、型はそのパラメーター化された型です。以下に例を示します。

    try {
      (new WebDriverWait(webDriver, maxWaitTime)).until(new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
          return applyCondition(driver, locator);
        }
      });
      return true;
    }
    catch (TimeoutException ex) {
      return false;
    }

この場合、ご覧のとおり、メソッドの戻り値の型は でuntilありBoolean、これは のパラメーター化された型に由来しますExpectedConditionnew ExpectedCondition<Boolean>

于 2012-11-08T08:00:31.847 に答える