【问题标题】:Node equivalent of ExpectedConditions.or for waiting for one of many elements节点等价于 ExpectedConditions.or 用于等待许多元素之一
【发布时间】:2019-06-28 15:43:54
【问题描述】:

使用 Java 驱动程序,我可以在执行操作之前等待多个元素条件之一,如下所示:

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.or(
    ExpectedConditions.elementToBeClickable(By.id("idNumber1")),
    ExpectedConditions.elementToBeClickable(By.id("idNumber2"))
)); 

例如,我们的wait 将在列出的元素中只有一个可点击时结束。

但是,我找不到使用 Node.js 版本驱动程序的方法。

【问题讨论】:

  • 你试过By.xpath("//*[@id='idNumber1' or @id='idNumber2']")吗?
  • 再想一想,预期的条件需要一个元素,而不是一个数组,这可能是可能的。

标签: node.js selenium selenium-webdriver


【解决方案1】:

好的,虽然在 Selenium 驱动的 Node 版本中没有可用的便捷方法,但我可以通过使用 Promise.any 来模拟 ExpectedConditions.or

let item1 = By.id("idNumber1");
let item2 = By.id("idNumber2");
let result = await Promise.any(
   [ driver.wait(until.elementLocated(item1, 5000)), 
     driver.wait(until.elementLocated(item2, 5000))
   ]).then((el) => {
     if (el.getId() === 'idNumber1') {
       return //something specific to item 1;
     } else {
       return //something specific to item 2;
     }
   }
);

console.log(result);

同样,要模拟and,您可以使用Promise.all

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2021-03-09
    • 2014-01-14
    • 2022-11-28
    • 2018-10-26
    • 2019-12-10
    相关资源
    最近更新 更多