Selenium - 为什么在自定义预期条件中覆盖 'apply'?

Selenium - why override 'apply' in custom Expected Conditions?

我找不到答案,我想了解为什么我们这样做,所以:为什么在创建自定义 ExpectedConditions 时,我们必须覆盖 apply 方法?这很可能是一些简单和基本的东西,但我就是听不懂。

这是我在网上找到的一个例子:

public boolean customExpectedConditions() {

    WebDriverWait wait = new WebDriverWait(driver, 60);

    ExpectedCondition<Boolean> jqLoaded = new ExpectedCondition<Boolean>() {
      @Override
      public Boolean apply(WebDriver driver) { // why this part?
        try {
          return ((Long)((JavascriptExecutor)getDriver()).executeScript("return jQuery.active") == 0);
        }
        catch (Exception e) {
          // no jQuery present
          return true;
        }
      }
    };

  return wait.until(jqLoaded);
}

您需要重写它,因为 Selenium 中的 Wait 实现(例如 FluentWait)需要实现 Function 接口来测试条件。

ExpectedCondition<Boolean> 只是扩展了该接口以限制作为参数进入您的“函数”的内容。它将它限制为 WebDriver 个对象。

因此,当您准备自己的条件时,您需要实现告诉 Selenium 条件是否满足的逻辑。您可以通过覆盖 apply 方法来做到这一点。

您可以在 case of FluentWait 中找到有关 Selenium 中的服务员如何处理条件的更多详细信息(其他服务员的工作方式完全相同)。

您还可以检查它以在 Selenium 中找到一些 more examples of custom conditions 并查看它们是否足够灵活以处理您可以使用 Java.

检测到的任何类型的事件