我正在使用selenium-webdriverjs。我想等待显示某个元素,我已经创建了一个明确的等待,如下所示,它工作正常,
var displayed = false;
driver.wait(function(){
driver.findElement(locator).isDisplayed().then(function(value){
displayed = value;
});
return displayed;
}, timeout);
这是我能做的最好的还是有更好的方法来做到这一点?我问的原因是第一次调用等待回调(在我的情况下)它将始终返回false。只有在执行isDisplayed promise时,才会显示更改的值。
答案 0 :(得分:28)
您的代码将同步返回与异步回调混合,以下代码应该做正确的事情:
return driver.wait(function() {
return driver.findElement(locator).isDisplayed();
}, timeout);
内部函数将返回driver.wait
将等待的承诺,并将其值(true / false)作为等待条件。
答案 1 :(得分:3)
为了避免webdriver和js的异步风格中出现的混乱,你可以试试webdriver-sync:https://npmjs.org/package/webdriver-sync
根据我的经验,在太多嵌套回调之后,webdriver API的异步版本变得难以阅读。
这当然假设您没有保持异步的要求。
免责声明:我是此软件的创建者(webdriver-sync)