使用Selenium WebDriver与JAVA,我试图自动化一个功能,我必须打开一个新的选项卡在那里做一些操作,并回到上一个选项卡(父) . 我使用了开关手柄,但它不起作用 . 还有一个奇怪的事情是两个标签有相同的窗口句柄,因此我无法在标签之间切换 .
但是,当我尝试使用不同的Firefox窗口时,它可以工作,但是对于标签它不起作用 .
请帮我,我如何切换标签 . 或者如何在不使用窗口句柄的情况下切换标签,因为在我的情况下,窗口句柄与两个标签相同 .
(我观察到当你在同一个窗口中打开不同的标签时,窗口句柄保持不变 . )
19 回答
这段代码对我很有用 . 试试看 . 在要在新选项卡上执行某些操作之前,始终需要将驱动程序切换到新选项卡 .
这是打开新选项卡,将焦点更改为选项卡,关闭选项卡并将焦点返回到旧/原始选项卡的简单解决方案:
Web驱动程序如何处理不同的窗口以及它如何处理不同的选项卡是有区别的 .
Case 1:
如果有多个窗口,则以下代码可以提供帮助:
Case 2:
如果同一窗口中有多个选项卡,则只有一个窗口句柄 . 因此,在窗口句柄之间切换可将控件保持在同一选项卡中 .
在这种情况下,使用Ctrl \ t(Ctrl Tab)在标签之间切换更有用 .
详细的示例代码可以在这里找到:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html
Work around
假设:通过点击您网页上的内容,可以打开一个新标签 .
使用以下逻辑切换到第二个选项卡 .
以同样的方式,您可以再次切换回第一个标签 .
希望它对你有所帮助..
您需要做的第一件事是打开一个新选项卡并保存它的句柄名称 . 最好使用javascript而不是键(ctrl t),因为密钥在自动化服务器上并不总是可用 . 例:
您需要做的第二件事是在标签之间切换 . 仅通过切换窗口句柄执行此操作并不总是有效,因为您将使用的选项卡不会始终处于焦点,Selenium将不时失败 . 正如我所说,使用密钥有点问题,而javascript并不真正支持切换标签,所以我使用警报切换标签,它就像一个魅力:
此方法有助于在多个窗口之间切换 . 这种方法的限制问题是它只能被使用很多次,直到达到所需的窗口 . 希望能帮助到你 .
调用此方法并将参数传递给要切换到的选项卡的url的子字符串
使用Selenium 2.53.1使用firefox 47.0.1作为Java中的WebDriver:无论我打开多少个选项卡,“driver.getWindowHandles()”只返回一个句柄,因此无法在选项卡之间切换 .
一旦我开始使用Chrome 51.0,我就可以获得所有句柄 . 以下代码显示如何访问每个驱动程序中的多个驱动程序和多个选项卡 .
希望这能让您很好地了解如何在多个浏览器窗口中操作多个选项卡 .
由于
driver.window_handles
不合适,因此更好的解决方案就是这样 .我最近遇到了一个问题,链接是在一个新选项卡中打开的,但selenium仍然集中在初始选项卡上 .
我正在使用Chromedriver,关注选项卡的唯一方法是让我使用
switch_to_window()
.这是Python代码:
所以提示是找出你需要的窗口句柄的名称,它们存储为列表
请看下面:
希望这有用!
这是一个非常简单的过程:假设您有两个选项卡,因此您需要先使用
client.window(callback)
关闭当前选项卡,因为切换命令"switches to the first available one" . 然后,您可以使用client.switchTab
轻松切换选项卡 .如何在浏览器中切换选项卡的简短示例(如果是一个窗口):
我写
Thread.sleep(2000)
只是为了看到在标签之间切换的超时 .您可以使用CTRL TAB切换到下一个选项卡,使用CTRL SHIFT TAB切换到上一个选项卡 .
这适用于MacOS for Firefox和Chrome:
获取父窗口句柄 .
简单的答案对我有用:
选定答案的缺陷是它在
webDriver.getWindowHandles()
中不必要地假定顺序 .getWindowHandles()
方法返回Set
,但不保证顺序 .我使用以下代码更改选项卡,不承担任何排序 .
公共类TabBrowserDemo {