Selenium WebdriverJS承诺循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium WebdriverJS承诺循环相关的知识,希望对你有一定的参考价值。
我正在尝试在容器中查找“更多”链接以继续单击它,直到该链接不再存在。一旦不再有“更多”链接,我正在创建延期并返回完成调用。
.then(function (previousResults) {
var deferred = webdriver.promise.defer();
// look for the more link, keep clicking it till it's no longer available
browser.wait(function() {
// see if we have "more" to click on
browser.findElements(byMoreLinkXpath)
.then(function (moreLinks) {
if (moreLinks[0]) {
console.log('has more');
moreLinks[0].click()
.then(function() {
// check for spinner to go away
browser.wait(pageDoneLoading, configSetting.settings.testTimeoutMillis);
});
} else {
console.log('no more');
deferred.fulfill(true);
}
});
}, 5000);
return deferred.promise;
})
不幸的是,承诺永远不会实现它只是超时。我尝试在return deferred.promise;
区块做一个else
,虽然它适用于reject
,但它仍然不适用于fulfill
。
webdriver.wait
的语法:
wait(condition, opt_timeout, opt_message)
但是在你的代码中,第一个参数既不是condition
也不是promise
而是function
,所以我将它改为:
另外,我认为你在这里做的是承诺反模式(我也没有看到再次检查更多链接的循环,对不起,但我认为你并不完全理解driver.wait
),我只是简单地将上述功能减少为:
function exhaustMoreLinks(){
return driver.wait( until.elementLocated(byMoreLinkXpath), 5000)
.then(function(){
return driver.findElement(byMoreLinkXpath);
}).then(function(moreLink){
console.log('more links');
return moreLink.click();
}).then(function(){
return browser.wait(pageDoneLoading(), configSetting.settings.testTimeoutMillis).then(exhaustMoreLinks);
}, function(err){
if(err.name === 'NoSuchElementError' || (err.message.search(/timed out/i)> -1 && err.message.search(/waiting element/i) > -1) ){ // checking if error because time-out or element not found, if true, redirect to fulfil
console.log('no more links');
return;
}else{
throw err;
}
});
}
用法如下:
...
.then(exhaustMoreLinks)
...
以上是关于Selenium WebdriverJS承诺循环的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Protractor/WebdriverJS 中设置默认浏览器窗口大小
selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代
bugRecord2selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable(代
selenium.common.exceptions.WebDriverException: Message: unknown Error: cannot find Chrome binary(示例代