我有一个场景,当我单击网站 A 中的元素时,它会在网站 B 的新选项卡中打开。我可以导航到网站B的新选项卡,但必须使用我的客户希望我避免使用的browser.sleep((。我尝试使用像 element(Website A(.click((.then(function(({getallwindowshandle,然后移动到我选择的窗口}(这样的承诺;但在这里我也不得不使用browser.sleep((
有人可以帮我如何在使用量角器导航到新窗口时克服 browser.sleep((。
最佳做法是使用量角器。等待目标元素可见或启用等的预期条件。使用量角器的预期条件,您可以使量角器等到下一个选项卡准备好继续。您可以按照以下代码进行操作:
法典
EC=protractor.ExpectedConditions;
targetEleOnNewTab=element(locator)//find out an element on new tab
//keep this line of code after switching to new tab before performing any
//operation on new tab
browser.wait(EC.visibilityOf(targetEleOnNewTab),15000,'Ele Not Visible');
虽然这个问题有点旧,但我想提一下我是如何解决这个问题的:
var handles;
const targetNumberOfTabs = 2; // Or whatever
try {
await browser.wait(
async function() {
handles = await browser.getAllWindowHandles();
if(handles.length >= targetNumberOfTabs) {
return true;
}
else {
return false;
}
}
,30000, 'The number of tabs should be equal or greater ' + targetNumberOfTabs);
}
catch(err) {
console.log(err);
// Whatever you might want to do on error
}
基本上,此代码使测试流等待,直到达到预期的选项卡数最多 30 秒。
要求:您需要知道您希望有多少个选项卡并将它们存储在targetNumberOfTabs
中。并且您的环境需要支持async
/await
。