如何在更新后删除发送快捷方式时,使用chrome上的selenium打开新选项卡,切换选项卡和关闭选项卡

时间:2016-12-16 23:50:47

标签: selenium tabs selenium-chromedriver

Chrome上有两个部分切换标签(也可能是其他驱动程序)。 首先必须切换驱动程序正在处理的上下文,在我的情况下,我还必须更改视图,以便关注某个选项卡。

您可以只发送快捷键(ctrl + tab,ctrl + t等)来管理切换视图,但最近更改了。

在让我头疼之后,并没有找到任何好的答案来解决这个问题,我提出了一些解决方法。

1 个答案:

答案 0 :(得分:0)

<强>打开

您可以使用驱动程序通过向页面发送快捷方式来创建Chrome选项卡。但是,它似乎不再起作用了。通过使用一些Javascript:

,以另一种方式打开标签实际上相当容易
https://www.onenote.com/api/v1.0/me/notes/pages?$expand=parentNotebook&$filter=parentNotebook/id%20eq%20'{$YOUR_NOTEBOOK_ID_HERE}'&$orderby=createdTime

然后,您必须将上下文切换到刚刚打开的新窗口。你可以使用webdriver.switchTo()方法(大量的文档)

<强>开关

我遇到的另一个挑战是在Chrome更新后切换标签使得无法使用快捷方式。我最初尝试使用Javascript为窗口命名:

((JavascriptExecutor)webdriver).executeScript("window.open();");

然后在另一个标签上你可以做到:

window.name = 'foo'

它会正确切换标签。然而,当你通过控制台发送它时它会正常工作的问题,但无论出于什么原因,当它通过JavascriptExecutor发送它时它将无法工作。

然而,我找到了一个工作。这有点像hacky,但我现在还没有看到替代方案。首先,您希望使用窗口句柄将上下文切换到您想要使用的任何选项卡(还有很多其他帖子解释了如何执行此操作,因此我不会详细说明如何获取正确的句柄)这样做:

window.open('', 'foo') 

这使得现在webdriver位于标签上下文中。然后实际切换视图,使其与上下文同步,你必须做一些黑客攻击。您要做的是在要切换视图的上下文中打开警报,然后关闭警报。这种情况发生得相当快,因此您甚至不会看到警报打开。

webdriver.switchTo().window(windowHandle);

<强>合

关闭实际上非常容易。你所做的就是:

((JavascriptExecutor) webdriver()).executeScript("window.alert('Horrible hack to switch tabs')");
webDriver().switchTo().alert().accept();