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

时间:2011-05-17 14:21:01

标签: java webdriver firefox4 selenium-webdriver browser-tab

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

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

6 个答案:

答案 0 :(得分:7)

我找出硒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

答案 1 :(得分:6)

目前,Selenium WebDriver API没有任何处理标签的方法。在我期望看到Java之类的语言绑定中的实现之前,该项目确实需要一组用于管理选项卡的一致的跨浏览器方法。在此之前,您的JavaScript解决方案可能是唯一的方法,请记住您的代码将负责管理该选项卡的生命周期。

答案 2 :(得分:6)

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

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

并回复是否有效

答案 3 :(得分: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();

注意:我知道这是一个旧线程,我只想在这里编写解决方案的目录,因为我找不到更优雅的解决方案,并希望节省一些时间(希望:)。

编辑:错字

答案 4 :(得分: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)

答案 5 :(得分: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的所有选项卡和窗口。

希望我帮助过你。