Selenium WebDriver JS - 显式等待

时间:2013-06-02 12:41:39

标签: javascript selenium-webdriver

我正在使用selenium-webdriverjs。我想等待显示某个元素,我已经创建了一个明确的等待,如下所示,它工作正常,

var displayed = false;
driver.wait(function(){
    driver.findElement(locator).isDisplayed().then(function(value){
        displayed = value;
    });
    return displayed;
}, timeout);

这是我能做的最好的还是有更好的方法来做到这一点?我问的原因是第一次调用等待回调(在我的情况下)它将始终返回false。只有在执行isDisplayed promise时,才会显示更改的值。

2 个答案:

答案 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)