如何通过 Selenium 切换到新窗口

Posted

技术标签:

【中文标题】如何通过 Selenium 切换到新窗口【英文标题】:How to switch to a new window in through Selenium 【发布时间】:2019-01-11 05:52:42 【问题描述】:

我有 1 个第三方集成为 Paypal。当我单击“下订单”按钮时,它会将我从“下订单”页面导航到贝宝页面。 你能告诉我它是如何工作的吗?我尝试了下面的代码,我将重定向到 Paypal 页面,但出现新窗口而不是同一页面。 请告诉我如何才能保持在同一个屏幕上。

String handle= driver.getWindowHandle();
System.out.println(handle);
driver.findElement(By.name("New Message Window")).click();
Set handles = driver.getWindowHandles();
System.out.println(handles);
for (String handle1 : driver.getWindowHandles()) 
    System.out.println(handle1);
    driver.switchTo().window(handle1);

【问题讨论】:

您编写的代码将使您的 selenium 驱动程序切换到打开的新窗口。您的预期场景是什么? How to switch to the new browser window, which opens after click on the button?的可能重复 从你的问题来看,听起来你DON'T想要切换到新窗口......如果是这种情况,你不必做任何事情. Selenium 不会将上下文切换到新窗口,除非您告诉它。 【参考方案1】:

要切换到 新窗口,您需要诱导 WebDriverWait 并将 ExpectedConditions 设置为 numberOfWindowsToBe(),如下所示:

String parent_handle= driver.getWindowHandle();
System.out.println(parent_handle);
driver.findElement(By.name("New Message Window")).click();
new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = driver.getWindowHandles();
System.out.println(handles);
for(String handle1:handles)
    if(!parent_handle.equals(handle1))
    
        driver.switchTo().window(handle1);
        System.out.println(handle1);
    

【讨论】:

收到错误消息 - if(!parent_window.equals(handle1)) 请检查我是否更新了我的代码。而是 By.name 我放了 Xpath。检查它因为我无法在同一个选项卡中切换。它将允许我在另一个 chrome 窗口上重定向。截图链接:i.stack.imgur.com/xw5ue.jpg @nikhilnaphade 这个问题是关于如何通过 Selenium 切换到新窗口。收到经过充分研究的答案后,您不得根据 *** 规则更改原始问题。如果您的要求发生了变化,请随时提出新问题。 *** 志愿者将很乐意为您提供帮助。在这个场合,我将问题恢复到初始状态。 @nikhilnaphade 如果我的answer满足了您的问题,请点击空心处Acceptanswer我的 answer 旁边的复选标记位于 votedown 箭头下方,因此复选标记变为 绿色 你为什么要为一个明显是重复的问题添加答案?【参考方案2】:

我有一个使用量角器的 selenium 测试环境,其中将有一个 driver 指示 webdriver。我在我的 js 代码中使用 selenium-webdriver npm 包,并且我有一个在新旧选项卡/弹出窗口之间切换的功能:

goToTab(driver, tab) 
    if (tab !== 1 || tab !== 0) 
      throw new Error(`Tab $tab doesn't exist`);
    
    return driver
      .then(() => driver.getAllWindowHandles())
      .then((handles) => 
        driver.switchTo().window(handles[tab]);
      )
      .catch((err) => 
        console.error('error in goToTab: ' + err);
        throw err;
      );
  

【讨论】:

以上是关于如何通过 Selenium 切换到新窗口的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮后使用 Selenium 切换到新窗口

如何使用Selenium VBA将焦点切换到新窗口?

Selenium多窗口切换方法快速入门

单击按钮后无法切换到新的浏览器窗口 C# Selenium

selenium打开新窗口并切换

如何使用 Selenium java 在浏览器中的两个窗口之间切换