Selenium - 等待返回的 javascript 脚本值匹配值

Lea*_*501 0 javascript java selenium-webdriver

我需要等待 javascript 的结果与字符串或布尔值匹配。

使用这个 JavaScript:

document.getElementById('video_html5').seeking;
Run Code Online (Sandbox Code Playgroud)

我得到一个“假”/“真”值,我需要等到该值是“假”,所以我确定视频不是在寻找,但我只找到了等待javascript命令值的方法而不是检查该值是否与某些文本匹配的方法。

new WebDriverWait(driver, 30)
    .until(ExpectedConditions.jsReturnsValue("return document.getElementById('video_html5').seeking;"));
Run Code Online (Sandbox Code Playgroud)

因为在某些情况下我会得到一个布尔值以外的字符串,并且需要比较这些字符串。

我已经找到了如何在 Ruby 中执行此操作,但在 Java 中却没有:

wait_element = @wait.until { @driver.execute_script("return document.getElementById('vid1_html5_api_Shaka_api').seeking;").eql? false }
Run Code Online (Sandbox Code Playgroud)

cju*_*gel 5

您可以编写自己的自定义预期条件。

public class MyCustomConditions {

  public static ExpectedCondition<Boolean> myCustomCondition() {
    return new ExpectedCondition<Boolean>() {
      @Override
      public Boolean apply(WebDriver driver) {
        return (Boolean) ((JavascriptExecutor) driver)
          .executeScript("return document.getElementById('video_html5').seeking === 'string_value' || ... ");
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的测试中您可以使用以下条件。

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(MyCustomConditions.myCustomCondition());
Run Code Online (Sandbox Code Playgroud)