我可以使用browser.wait()的第3个参数作为“return false”而不是替代错误消息吗?

时间:2017-11-02 09:09:24

标签: javascript protractor

我正在尝试找到一种不太复杂的方法来查找潜在的弹出式对话框,并在继续或继续之前单击它(如果出现)。

作为上下文:我的应用程序中有几十个滑块的滑块功能。现在,一些滑块会在您移动它们时立即弹出警告。对于这些滑块,我需要在继续之前确认警告,而对于所有其他滑块我不需要这样做。

我的代码减少了我的问题(不用所有的定义等):

dragSlider = function(){
    //some code to evaluate if(currentValue === desiredValue){return}
    browser.actions().dragAndDrop(slider,{x:10, y:0}).perform();
    warningDlg.isPresent().then(function(toConfirm){
        if(toConfirm){
            confirmBtn.click(); //click the warning away, so I can drag the slider again
        }
        dragSlider(); //recursive call until I have my desired value.
    });
};

现在我的想法是:

dragSlider = function(){
    //some code to evaluate if(currentValue === desiredValue){return}
    browser.actions().dragAndDrop(slider,{x:10, y:0}).perform();

    //HERE TO WAIT WITH EXPECTED CONDITION AND RETURN FALSE INSTEAD OF ERROR
    if( browser.wait(EC.presenceOf(warningDlg), 500, false)  ){
        confirmBtn.click();
    }
    dragSlider(); //recursive call until I have my desired value.
};

这样我就可以摆脱then(),从而避免不必要的异步执行和复杂性。

任何想法,我如何将其付诸实践?

2 个答案:

答案 0 :(得分:0)

使用您自己定制的等待函数包裹等待函数并执行您想要的任何操作。

答案 1 :(得分:0)

使用promise .then()来处理不同的Promise状态:

dragSlider = function(){
    //some code to evaluate if(currentValue === desiredValue){return}
    browser.actions().dragAndDrop(slider,{x:10, y:0}).perform();

    browser.wait(EC.presenceOf(warningDlg), 500).then(()=> {
       // If wait successful - means warningDlg is present
       confirmBtn.click()
    }, (err)=> {
       // If wait not successful - means warningDlg is not present
       // Just empty function to ignore error
    })

    dragSlider(); //recursive call until I have my desired value.
};