Javascript 等待量角器加载在新选项卡中打开的数据

Javascript 等待量角器加载在新选项卡中打开的数据,javascript,protractor,Javascript,Protractor,我有一个场景,当我点击网站a中的一个元素时,它会在网站B中的一个新选项卡中打开。我可以导航到新的选项卡,即网站B,但必须使用browser.sleep(),我的客户希望我避免使用它。我尝试使用诸如after元素(网站A)之类的承诺。单击()。然后(函数(){getallwindowshandle,然后移动到我选择的窗口});但在这里我也不得不使用browser.sleep() 有人能帮助我在使用量角器导航到新窗口时如何克服browser.sleep()。最佳做法是使用量角器。预期条件是等待目标元

我有一个场景,当我点击网站a中的一个元素时,它会在网站B中的一个新选项卡中打开。我可以导航到新的选项卡,即网站B,但必须使用browser.sleep(),我的客户希望我避免使用它。我尝试使用诸如after元素(网站A)之类的承诺。单击()。然后(函数(){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
/
wait

我有许多页面将在选项卡中打开。这将不是理想的应用程序,我的工作,以获得一个网页上的特定元素被找到,然后找到该网页的标题。此外,我的网页非常动态,在下次运行测试脚本时,元素可能是页面中的其他内容或其他内容。我基本上想要一个理想的通用函数,它可以在没有任何输入的情况下吐出当前页面的标题。