Selenium 2:在新标签中打开链接并关闭标签

Posted

技术标签:

【中文标题】Selenium 2:在新标签中打开链接并关闭标签【英文标题】:Selenium 2: Open link in new tab and close tabs 【发布时间】:2011-08-27 07:06:21 【问题描述】:

我希望能够在 Selenium 2 的新选项卡中打开一个链接。我还想在完成与页面的交互后关闭该选项卡。如果我有一个<a> 标签的WebElement,这怎么可能?

我正在使用 Selenium 2 的 Java API 和 Firefox 驱动程序,在 Firefox 4 上运行。

【问题讨论】:

我想到了一个使用 javascript 的解决方案。也许这是最简单的方法? 你会分享这个解决方案吗?我也遇到了同样的问题。 我没有找到解决方案。似乎没有办法做到这一点,另请参阅接受的答案。 【参考方案1】:

我为 selenium 2 计算的方式,适用于 Chrome 和 firefox,IE 存在安全检查问题:

Set<String> winSet = webDriver.getWindowHandles();
List<String> winList = new ArrayList<String>(winSet);
String newTab = winList.get(winList.size() - 1);
webDriver.close(); // close the original tab
webDriver.switchTo().window(newTab); // switch to new tab

【讨论】:

据我了解,这种方法只允许处理windows,而不是tabs【参考方案2】:

目前,Selenium WebDriver API 没有任何处理选项卡的方法。该项目确实需要一套一致的、跨浏览器的方法来管理选项卡,然后我才会期望看到一种语言绑定(如 Java)的实现。在那之前,您的 JavaScript 解决方案可能是唯一的方法,请记住,您的代码将负责管理该选项卡的生命周期。

【讨论】:

我担心这就是答案。谢谢。【参考方案3】:

为了充分利用 selenium,我们在 sol-logics 将它与 java.awt.robot 类结合起来。您可以发送可以关闭浏览器窗口的密钥。尝试使用

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);

如果有效就回复

【讨论】:

【参考方案4】:

我花了一段时间(大约 2 周)来找到正确的命令序列,但这是迄今为止我发现的最简单的方法,可以让 Win7/Chrome 设置在新选项卡中打开链接并切换到自动打开新标签。

警告!确保始终执行 keyUp 操作。如果您未能执行 keyUp,您的系统将一直按住这些键,直到重新启动或发生 keyUp。

Windows 7/Chrome:

WebElement elem = driver.findElement(By.linkText("MyLinkText"));

// Chrome key combos:
//   SHIFT + CTRL + click = Open in new tab (and switch to new tab)
//   SHIFT + CTRL + RETURN = Open in new tab (in background)
Actions act = new Actions(driver);
act.keyDown(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform();

// Wrap in a try/catch during implementation to ensure you perform keyUp(s).
elem.click();

act.keyUp(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform();

注意:我知道这是一个旧线程,我只是想在这里对解决方案进行分类,因为我找不到更优雅的解决方案,并且想为其他人节省一点时间(希望 :)。

编辑:错字

【讨论】:

希望我能专门为 FF 提供帮助,但不幸的是,我们使用 Chrome 作为我们的主要测试浏览器。然而,相同的通用技术应该适用于其他具有各自组合键的人。 很酷的东西!谢谢!【参考方案5】:

这是我使用 Python 的方法。

这个解决方案有点脏,但如果你想关闭标签,它可以工作。

我模仿 mac 快捷键 CMD + W 来关闭选项卡,如果您正在运行 Windows,则可能需要实现不同的组合键。

import from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.amazon.com/gp/search/ref=sr_in_-2_p_lbr_brands_browse-_2895?rh=n%3A172282%2Cn%3A!493964%2Cn%3A502394%2Cp_lbr_brands_browse-bin%3ALytro")
action_chains = ActionChains(driver)
action_chains.key_down(Keys.COMMAND + "w")
action_chains.perform()
action_chains.key_up(Keys.COMMAND + "w")
driver.implicitly_wait(5)

【讨论】:

【参考方案6】:

我使用的是 Robor 类。

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_W);

这使机器人快速按下并释放 CTRL + W 键以模拟用户交互。如果只使用 keyPress 事件,这将关闭 WebDriver 的所有选项卡和窗口。

希望我能帮到你。

【讨论】:

以上是关于Selenium 2:在新标签中打开链接并关闭标签的主要内容,如果未能解决你的问题,请参考以下文章

Selenium - 单击链接会打开一个新选项卡

如何使用 Selenium WebDriver 打开一个新选项卡并启动链接?

在新标签Selenium + Python中打开网页

Chrome 快捷键使用

在新标签页中打开网页 Selenium + Python

chrome实用快捷键