Selenium 网络驱动程序 | driver().switchTo().defaultContent() 方法不会将控件从多个子窗口切换回父窗口

Posted

技术标签:

【中文标题】Selenium 网络驱动程序 | driver().switchTo().defaultContent() 方法不会将控件从多个子窗口切换回父窗口【英文标题】:Selenium webdriver | driver().switchTo().defaultContent() method is not switching the control back to parent window from multiple child windows 【发布时间】:2021-12-16 17:12:38 【问题描述】:

Selenium 网络驱动程序 | driver().switchTo().defaultContent() 方法不会将控件从多个子窗口切换回父窗口。

我面临着没有窗户和框架的问题。当我点击父窗口上的一个按钮说 wp 时,一个新的 web 窗口说 w1 正在生成,最终又生成一个窗口说 w2 ,我想切换到 wp 控制,所以我正在使用

driver.switchTo.defaultContent()

但它不会将控制切换到父窗口。

【问题讨论】:

***.com/questions/18378716/… 。这可以帮助 你可以试试这个driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString()); 吗? 【参考方案1】:

我有这个问题。 我找到了答案 试试这个,然后给我反馈 - 也许我可以帮助你

 const number1 = await driver.wait(until.elementLocated(By.xpath('your xpath')))
      await driver.executeScript("arguments[0].click()", number1).then(() =>
        console.log(driver.executeScript, 'Click done');
      )

【讨论】:

工作...谢谢安德烈·库尔库拉 祝我的朋友好运)【参考方案2】:

您要切换到窗口标签还是iframe

对于框架:我们需要这样做,

driver.switchTo().defaultContent();
driver.switchTo.parentFrame();

适用于窗户:

String parentwindow = driver.getWindowHandle();
List<String> allwindows = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(allwindows.get(1));
driver.switchTo().window(parentwindow);

【讨论】:

【参考方案3】:

在切换到父框架时可以使用两种类似的方法,但它们之间存在细微差别。

driver.switchTo().defaultContent() driver.switchTo().parentFrame()

例如:您有三个帧 i1、i2、i3 并且您在帧 i3 上, 当您使用 driver.switchTo.defaultContent() 时,它会将您带到 i1,而使用 driver.switchTo.parentFrame() 控制将切换到 i2 即直接父框架(当前框架的父框架)。

【讨论】:

您好 Srinivas,感谢您的回答,但我面临的问题是没有窗户和框架。当我单击父窗口上的按钮说 wp 时,会生成一个新的 Web 窗口说 w1 并最终生成另一个窗口说 w2 ,我想将 te 控制切换到 wp 所以我正在使用 driver.switchTo.defaultContent() 但是它不会将控件切换到父窗口。【参考方案4】:

如果进程打开多个浏览器标签,我们需要使用switchTo().window(window reference);在标签之间切换焦点。

// Save the initial tab as parentwindow 
String parentwindow = driver.getWindowHandle();

// Collect the tabs opened in a list
List<String> windows = new ArrayList<>(driver.getWindowHandles());

// Switch to window other than parentwindow
driver.switchTo().window(windows.get(1));

// Switch back to parentwindow
driver.switchTo().window(parentwindow);

【讨论】:

【参考方案5】:

我将 RemoteWebDriver 用于 VM 运行测试的云会话。在本地,它使用 $ driver.switchTo().defaultContent() $ 对我有用,但突然之间,它不适用于 RemoteWebDriver。我使用以下方法解决了我的问题:

driver.switchTo().parentFrame();

【讨论】:

以上是关于Selenium 网络驱动程序 | driver().switchTo().defaultContent() 方法不会将控件从多个子窗口切换回父窗口的主要内容,如果未能解决你的问题,请参考以下文章

python网络爬虫:Selenium

Selenium 网络驱动程序警报

带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素

selenium webdriver的各种driver

如何让Mink Selenium 2 Driver等待页面加载Behat

测试工具Selenium webdriver的各种driver