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的所有选项卡和窗口。
希望我能帮助你。