我正在尝试找到一种不太复杂的方法来查找潜在的弹出式对话框,并在继续或继续之前单击它(如果出现)。
作为上下文:我的应用程序中有几十个滑块的滑块功能。现在,一些滑块会在您移动它们时立即弹出警告。对于这些滑块,我需要在继续之前确认警告,而对于所有其他滑块我不需要这样做。
我的代码减少了我的问题(不用所有的定义等):
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()
,从而避免不必要的异步执行和复杂性。
任何想法,我如何将其付诸实践?
答案 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.
};