【问题标题】:Selenium 2: Open link in new tab and close tabsSelenium 2:在新标签中打开链接并关闭标签
【发布时间】:2011-08-27 07:06:21
【问题描述】:

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

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

【问题讨论】:

  • 我想到了一个使用 JavaScript 的解决方案。也许这是最简单的方法?
  • 你会分享这个解决方案吗?我也遇到了同样的问题。
  • 我没有找到解决方案。似乎没有办法做到这一点,另请参阅接受的答案。

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


【解决方案1】:

我为 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

【讨论】:

  • 据我了解,这种方法只允许处理windows,而不是tabs
【解决方案2】:

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

【讨论】:

  • 我担心这就是答案。谢谢。
【解决方案3】:

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

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

如果有效就回复

【讨论】:

    【解决方案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();
    

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

    编辑:错字

    【讨论】:

    • 希望我能专门为 FF 提供帮助,但不幸的是,我们使用 Chrome 作为我们的主要测试浏览器。然而,相同的通用技术应该适用于其他具有各自组合键的人。
    • 很酷的东西!谢谢!
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      希望我能帮到你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2013-11-30
        相关资源
        最近更新 更多