将焦点更改为另一个窗口,其中name未定义

时间:2014-06-19 15:00:06

标签: javascript selenium webdriver

我使用WD.js webdriver客户端来运行node.js来测试我的应用。

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

我已尝试使用wd.js中的window()方法切换到新窗口,但it needs a window name as a parameter未设置。

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

3 个答案:

答案 0 :(得分:2)

foo,我找到了答案。

你想在这里使用这个功能

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

  driver.switchTo().window(popUpWindow);
})
  1. 这里我们告诉司机获取所有窗口句柄
  2. 然后我们将句柄作为参数传递给我们的函数
  3. 然后我们将handle [1](这是新窗口)的值赋给变量'popUpWindow'
  4. 告诉司机切换到新窗口

答案 1 :(得分:1)

我用过这个,它适用于所有浏览器: - 试试这个代码: -

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]); 

那是使用await而不是Promise来实现异步函数。

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

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]);
});

希望它有所帮助......

答案 2 :(得分:-1)

我会在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;
    }
  }

此处,名称不是强制性的。同样,你可以尝试循环并切换? 有关您的信息,

 switchToWindow(name/Handle) 

- 按名称或句柄将焦点切换到其他浏览器窗口。所以试试这个,让社区知道解决方案。祝你好运!