简体   繁体   English

Selenium WebDriver JS - 显式等待

[英]Selenium WebDriver JS - Explicit Wait

I am using the selenium-webdriverjs. 我正在使用selenium-webdriverjs。 I want to wait for a certain element to be displayed for which I have created an explicit wait as follows and it works just fine, 我想等待显示某个元素,我已经创建了一个明确的等待,如下所示,它工作得很好,

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

Is this the best I can do or is there a better way to do this? 这是我能做的最好的还是有更好的方法来做到这一点? The reason I ask is that the first time ever the wait callback is called (in my case) it will always return false. 我问的原因是第一次调用等待回调(在我的情况下)它将始终返回false。 Only subsequently when the isDisplayed promise is executed will the value of displayed change. 只有在执行isDisplayed promise时,才会显示更改的值。

Your code is mixing a synchronous return with asynchronous callbacks, the following code should do the right thing: 您的代码将同步返回与异步回调混合,以下代码应该做正确的事情:

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

The inner function will return a promise that driver.wait will wait for and will take its value (true/false) as the waiting condition. 内部函数将返回一个driver.wait将等待的promise, driver.wait其值(true / false)作为等待条件。

To avoid much of the confusion involved in the asynchronous flavors of webdriver and js, you could give webdriver-sync a try: https://npmjs.org/package/webdriver-sync 为了避免webdriver和js的异步风格中的大部分混淆,你可以试试webdriver-sync: https//npmjs.org/package/webdriver-sync

It's been my experience that the async versions of the webdriver API become difficult to read after too many nested callbacks. 根据我的经验,在太多嵌套回调之后,webdriver API的异步版本变得难以阅读。

This of course assumes that you don't have requirements to remain asynchronous. 当然,这假设您没有保持异步的要求。

Disclaimer: I am the creator of this piece of software (webdriver-sync) 免责声明:我是这个软件的创建者(webdriver-sync)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM