21

我正在使用 selenium-webdriverjs。我想等待某个元素显示出来,我为此创建了一个显式等待,如下所示,它工作得很好,

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

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

4

2 回答 2

28

您的代码将同步返回与异步回调混合在一起,以下代码应该做正确的事情:

return driver.wait(function() {
    return driver.findElement(locator).isDisplayed();
}, timeout);

内部函数将返回一个driver.wait等待并将其值(真/假)作为等待条件的承诺。

于 2013-06-02T12:50:23.440 回答
5

为了避免 webdriver 和 js 的异步风格所涉及的大部分混淆,您可以尝试 webdriver-sync: https ://npmjs.org/package/webdriver-sync

根据我的经验,webdriver API 的异步版本在嵌套回调过多后变得难以阅读。

这当然假设您没有保持异步的要求。

免责声明:我是这个软件的创建者(webdriver-sync)

于 2013-09-14T00:42:17.623 回答