Javascript Selenium测试:webdriver.wait多次调用承诺

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

出于测试目的,我使用selenuim chromedriver、nodejs和摩卡咖啡

我现在有点为难:

  • 驱动程序。等待
    完美配合,直到

  • 我有一个承诺,让我们称之为promiseA,这需要一个
    webdriver
    和css类名称,进行一些计算,返回布尔值。这个很好用

  • pickle正在结合
    webdriver.wait
    promiseA
    ,我希望wait函数反复(多次)检查
    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(...