13

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

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

4

6 回答 6

7

我为 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
于 2012-04-24T20:09:02.947 回答
6

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

于 2011-05-17T19:17:55.147 回答
6

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

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

并回复是否有效

于 2012-12-19T10:43:14.580 回答
4

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

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

Windows 7/铬:

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();

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

编辑:错字

于 2015-01-12T18:16:27.183 回答
3

这是我如何使用 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)
于 2013-12-06T06:41:17.633 回答
3

我使用的是 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 的所有选项卡和窗口。

希望我对你有所帮助。

于 2014-07-05T04:03:31.603 回答