当前位置: 首页 > 面试题库 >

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

齐运诚
2023-03-14
问题内容

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

使用此javascript:

document.getElementById('video_html5').seeking;

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

new WebDriverWait(driver, 30)
    .until(ExpectedConditions.jsReturnsValue("return document.getElementById('video_html5').seeking;"));

因为在某些情况下,我得到的不是布尔型字符串,而是需要比较那些字符串。

我已经找到了如何在Ruby中而不是在Java中做到这一点:

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

问题答案:

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

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' || ... ");
      }
    };
  }
}

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

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(MyCustomConditions.myCustomCondition());


 类似资料:
  • 我被困在一个有硒等待的情况下。我正在使用硒爪哇和cucumber。点击一个按钮,一个新的页面加载,但内容还不能点击。当页面加载到背面时,将显示一个灰色屏幕阻止器,以便在加载整个页面之前使其不可编辑。所以我不能使用waitforpageload或wait for element使其可见,因为它们都返回true,因为元素在后台可用。我尝试使用一个条件来检查元素是否可点击,以确保页面完全加载。但那也没用

  • 我正在尝试使用selenium webdriver+Java+NGWebDriver来自动化一个混合的AngularJS2(2.4.10)web应用程序。

  • 我想返回用户的电话号码,但我得到的是[对象对象]。我在想,如果它在等待完成之前返回值。这是我的代码。 输出12345678,以便我可以在异步函数外部访问它。例如,要在个人资料页面中显示它,

  • 我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。

  • 我有一个由jenkins管道触发的外壳脚本,它检测文件夹中的文件是否已更改。我希望脚本根据文件夹中的更改返回1或0到管道脚本。我还想在管道脚本中读取返回的值,以便我可以相应地采取行动。

  • 问题内容: 当使用简单的回调(例如下面的示例)时: 如何更改功能以使用异步/等待?具体来说,假设“ someEvent”被保证只能被调用一次,那么我希望函数测试是一个异步函数,该异步函数在执行回调之前不会返回,例如: 问题答案: 不是魔术。异步函数是可以为您解开Promises的函数,因此您需要返回一个Promise才能起作用。像这样: 然后 但这也是一个谎言,因为异步函数也返回Promises本