Javascript Selenium测试:webdriver.wait多次调用承诺
出于测试目的,我使用selenuim chromedriver、nodejs和摩卡咖啡 我现在有点为难:Javascript Selenium测试:webdriver.wait多次调用承诺,javascript,node.js,selenium,promise,selenium-chromedriver,Javascript,Node.js,Selenium,Promise,Selenium Chromedriver,出于测试目的,我使用selenuim chromedriver、nodejs和摩卡咖啡 我现在有点为难: 驱动程序。等待与完美配合,直到 我有一个承诺,让我们称之为promiseA,这需要一个webdriver和css类名称,进行一些计算,返回布尔值。这个很好用 pickle正在结合webdriver.wait和promiseA,我希望wait函数反复(多次)检查promiseA的解析,直到达到超时或布尔返回值为真,但现在,它在第一次解析时停止,这显然是错误的,破坏了我的测试 示例代码 we
与驱动程序。等待
完美配合,直到
- 我有一个承诺,让我们称之为promiseA,这需要一个
和css类名称,进行一些计算,返回布尔值。这个很好用webdriver
- pickle正在结合
和webdriver.wait
,我希望wait函数反复(多次)检查promiseA
的解析,直到达到超时或布尔返回值为真,但现在,它在第一次解析时停止,这显然是错误的,破坏了我的测试promiseA
webdriver.wait(promiseA(webdriver, 'cssClass'), 5000)
.then(...
我唯一有效的备份是,但我发现它非常丑陋和低效:
setTimeout(function(){
promiseA(webdriver, 'cssClass')
.then(function(bool)...
...
}, 5000);
进行了临时修复,仍在等待更清洁的解决方案:
function waiter(promise, argList,waitTime){
var deffered = Driver.promise.defer(),
wt = waitTime || 20,
pCall = function(){
promise.apply(promise, argList).then(pThen, pCatch);
},
pThen = function(data){
if(data){
deffered.fulfill(true);
}else{
setTimeout(pCall, wt);
}
},
pCatch = function(err){
setTimeout(pCall, wt);
};
pCall();
return deffered.promise;
}
用法:
...
button.click()
.then(function(){
var promise = waiter(promiseA, [arg1, arg2, arg3] );
return driver1.wait(promise, 5000); // keep checking till five seconds,
}).then(...