2011-05-17 90 views
13

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

我使用硒2 Firefox的驱动程序的Java API中,在Firefox 4

+0

我想到了一个使用JavaScript的解决方案。也许这是最简单的方法? – Alp 2011-05-17 16:25:26

+1

你会分享这个解决方案吗?我有同样的问题。 – 2011-09-17 01:06:15

+0

我没有找到解决方案。看起来没有办法做到这一点,另见公认的答案。 – Alp 2011-09-17 09:01:04

回答

6

运行目前,硒的webdriver API没有处理选项卡的任何方式。该项目真的需要一个统一的,跨浏览器的管理选项卡的方法,然后才能在Java之类的语言绑定之一中看到实现。在此之前,您的JavaScript解决方案可能是唯一的方法,并且请记住,您的代码将负责管理该选项卡的生命周期。

+0

我担心这会是答案。谢谢。 – Alp 2011-05-17 21:07:28

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 
+2

据我了解,这种方法只允许处理'windows',而不是'tabs' – Alp 2012-04-24 23:25:00

6

使用硒处于最佳状态,我们在溶胶 - 逻辑与java.awt中结合起来.robot类。您可以发送可以关闭浏览器窗口的密钥。尝试使用

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

,如果它的工作原理

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) 
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的所有选项卡和窗口。

希望我帮你。

4

花了一段时间(〜2周)让我追踪正确的命令序列,但这是迄今为止我发现的一种Win7/Chrome设置最简单的方法,可以在新选项卡AND开关中打开链接自动添加到新标签。

警告!确保始终执行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(); 

注:我知道这是一个古老的线程,我只是想在这里编目解决方案,因为我无法找到一个更好的解决方案,并希望拯救别人一一点时间(希望:)。

编辑:错字

+0

谢谢,这是一个很好的方法 – Alp 2015-01-12 22:17:37

+0

希望我能够专门帮助w/FF,但不幸的是我们使用Chrome作为我们的主要测试浏览器。然而,相同的通用技术应该适用于他人和他们各自的关键组合。 – TwoByteHero 2015-01-14 20:51:47

+0

酷东西!谢谢! – 2016-10-05 02:14:04

相关问题