相当于 ExpectedConditions.or 的节点,用于等待多个元素之一

Tha*_*Don 0 selenium node.js selenium-webdriver

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

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

例如,wait当列出的其中一个元素可单击时,我们的操作就结束了。

但是,我找不到使用 Node.js 版本的驱动程序来执行此操作的方法。

Tha*_*Don 7

好的,虽然 Selenium 驱动程序的 Node 版本中没有可用的便捷方法,但我可以ExpectedConditions.or使用Promise.any进行模拟。

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);

Run Code Online (Sandbox Code Playgroud)

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