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

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

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

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

我找出selenium 2的方法,适用于Chrome和firefox,IE有安全检查问题:

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

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

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

并回答它是否有效

花了一段时间(约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(); 

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

编辑:错字

以下是我使用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) 

我使用的是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); 

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

希望我能帮助你。