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() 方法不会将控件从多个子窗口切换回父窗口的主要内容,如果未能解决你的问题,请参考以下文章
带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素