0

在下面的 Selenium Explicit wait 中,我看到该方法until返回类似

<V> V对于方法until(com.google.common.base.Function<? super T,V> isTrue)

我的疑问是他们如何将它引用到 type 的元素WebElement

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

2 回答 2

0

通过贷款添加答案,我认为这个问题更多地与泛型的工作有关,而不是与 webdriver 有关。因此,阅读有关泛型的更多信息将有助于回答这个问题。

我不确定以下是否是最好的解释,但我会尝试一下:

当您调用 elementToBeClickable 方法时,它会返回类似ExpectedCondition<WebElement>.

until 方法返回 V。V 是一个泛型类型占位符。那么V会持有什么?V 与中的相同Function<? super T, V>

你的情况:Function<? super T, V>= ExpectedCondition<WebElement>

然后看一下 ExpectedCondition 的定义,

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

因此,在您的情况下,这ExpectedCondition<WebElement>意味着Function<WebDriver, WebElement> So 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 回答