Javascript 将焦点更改为另一个未定义名称的窗口

Javascript 将焦点更改为另一个未定义名称的窗口,javascript,selenium,webdriver,Javascript,Selenium,Webdriver,我正在使用node.js的webdriver客户端测试我的应用程序 在我的应用程序中,单击一个按钮后,将打开一个新的浏览器窗口。 显然,由于硒的性质,旧窗口保持活动状态 我尝试使用wd.js中的window()方法切换到新窗口,但没有设置 有没有办法在不知道名称的情况下在窗口之间切换?我会在java实现中执行以下操作 String parentWindowHandle = browser.getWindowHandle(); // save the current window handle

我正在使用node.js的webdriver客户端测试我的应用程序

在我的应用程序中,单击一个按钮后,将打开一个新的浏览器窗口。 显然,由于硒的性质,旧窗口保持活动状态

我尝试使用wd.js中的
window()
方法切换到新窗口,但没有设置


有没有办法在不知道名称的情况下在窗口之间切换?

我会在java实现中执行以下操作

  String parentWindowHandle = browser.getWindowHandle(); // save the current window handle.
  WebDriver popup = null;
  Iterator<String> windowIterator = browser.getWindowHandles();
  while(windowIterator.hasNext()) { 
    String windowHandle = windowIterator.next(); 
    popup = browser.switchTo().window(windowHandle);
    if (popup.getTitle().equals("Google") {
      break;
    }
  }

-按名称或句柄将焦点切换到其他浏览器窗口。因此,尝试一下,让社区知道解决方案。祝你好运

foo,我找到了答案

您将希望在此处使用此函数

var handlePromise = driver.getAllWindowHandles();
handlePromise.then(function (handles){
  var popUpWindow = handles[1];

  driver.switchTo().window(popUpWindow);
})
  • 在这里,我们告诉司机去拿所有的车窗把手
  • 然后,我们将句柄作为参数传递给函数
  • 然后,我们将句柄[1](即新窗口)的值指定给变量“popUpWindow”
  • 告诉司机换到那个新窗口

  • 我使用了它,它适用于所有浏览器:- 请尝试以下代码:-

    var tab_handles =await driver.getAllWindowHandles();
    let number_of_tabs = tab_handles.length;
    let new_tab_index = number_of_tabs-1;
    await driver.switchTo().window(tab_handles[new_tab_index]); 
    
    driver.getAllWindowHandles().then((tab_handles)=>{
    let number_of_tabs = tab_handles.length;
    let new_tab_index = number_of_tabs-1;
    driver.switchTo().window(tab_handles[new_tab_index]);
    });
    
    对于异步函数,使用wait而不是Promise

    如果要使用Promise,请尝试以下代码:-

    var tab_handles =await driver.getAllWindowHandles();
    let number_of_tabs = tab_handles.length;
    let new_tab_index = number_of_tabs-1;
    await driver.switchTo().window(tab_handles[new_tab_index]); 
    
    driver.getAllWindowHandles().then((tab_handles)=>{
    let number_of_tabs = tab_handles.length;
    let new_tab_index = number_of_tabs-1;
    driver.switchTo().window(tab_handles[new_tab_index]);
    });
    

    希望对您有所帮助……

    我对您使用的webdriver版本不是特别熟悉,但用于执行类似操作的典型流程是:1-获取窗口名称,仅存储名称;2-执行打开新窗口的操作;3-获取窗口名称;4-切换到与第一个窗口名称不同的窗口;WD.js能做到吗?我也很好奇,我不能给窗口命名,因为我没有使用window.open()。。。我希望能够使用类似“driver.switchTo().window();”的命令切换到新窗口下面的答案是针对java的,而不是javascriptfoo,我已经测试了这个答案,它是有效的,如果它适用于您,请接受
    browser.driver.switchTo.window不是一个函数
    sorry@chrismillah阅读您的答案。。。不幸的是,我们在短暂的尝试后不得不放弃WebDriver,所以我无法测试您的答案,但非常感谢。是的,但他正在使用JavaScript@LeeGee同意。正如我所提到的,我只是给了他一个关于方法的建议,并把实现留给了他。也许我应该试试WD.js上的POC然后回来。我相信我会很感激的。注意,他的窗口没有标题。假设foo只打开了两个窗口,它应该很简单。