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

Change focus to another window, where name is undefined

本文关键字:窗口 未定义 另一个 焦点      更新时间:2023-09-26

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

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

我试图使用window()方法从wd.js切换到新窗口,但它需要一个窗口名称作为未设置的参数。

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

我找到了答案。

你会想在这里使用这个函数

var handlePromise = driver.getAllWindowHandles();
handlePromise.then(function (handles){
  var popUpWindow = handles[1];
  driver.switchTo().window(popUpWindow);
})
  1. 这里我们告诉驱动程序获取所有的窗口句柄
  2. 然后我们将句柄作为参数传递给函数
  3. 然后我们将句柄[1](这是新窗口)的值分配给变量'popUpWindow'
  4. 告诉驱动程序切换到新窗口

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

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

async函数使用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]);
});

希望能有所帮助....

我将在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) 

-通过名称或句柄将焦点切换到不同的浏览器窗口。所以尝试一下,让社区知道解决方案。祝你好运!