等效于ExpectedConditions。或等待许多元素之一的节点

时间:2019-02-04 20:38:19

标签: node.js selenium selenium-webdriver

使用Java驱动程序,我可以在执行一项操作之前等待几种元素条件之一,例如:

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

例如,当仅列出的那些元素之一可单击时,我们的wait将结束。

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

1 个答案:

答案 0 :(得分:2)

好的,尽管Selenium驱动程序的Node版本中没有便利的方法,但是我能够使用Promise.race来模拟ExpectedConditions.or

let item1 = By.id("idNumber1");
let item2 = By.id("idNumber2");
let result = await Promise.race(
   [ 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);

类似地,您可以使用Promise.all来模拟and