【问题标题】:Selenium WebDriver: Open new tab instead of a new windowSelenium WebDriver:打开新选项卡而不是新窗口
【发布时间】:2012-07-06 16:23:39
【问题描述】:

我正在使用 Selenium WebDriver。每个链接都在新的浏览器窗口中打开。这对我来说不方便。如何更改它以使其仅在新标签页中打开?

【问题讨论】:

  • 你使用什么编程语言?

标签: selenium selenium-webdriver tabs window webdriver


【解决方案1】:

Selenium 现在可以切换标签。下面的code1:将适用于firefox,code2:适用于IE和chrome,我们可以使用Robot类,并且控件不会自动移动到当前选项卡,因此我们需要使用窗口句柄方法切换到当前选项卡。当我们运行单独的脚本时,下面给出的代码可以很好地工作,但是当作为一个套件运行时,您可能会在执行键盘事件时感到痛苦。为了避免我们不得不通过在 selenium-Java 中使用 javascript 执行程序来使用用户定义的 javascript 方法来解决其他可能性。

我们可以通过识别分配给我们打开的每个窗口的名称来在窗口和选项卡之间切换,并且名称将是字母数字字符。

    ***Code 1***
    //First tab(default tab)
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();

    //second tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("https://yahoo.com");

    //third tab
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
    driver.navigate().to("http://www.google.com");

    //move to very first tab.
    driver.findElement(By.cssSelector("body"))
            .sendKeys(Keys.CONTROL + "\t");

    // To close the current tab.    
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "w");
    **code 2**
    driver.navigate().to("http://www.google.com");
    driver.manage().window().maximize();


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

    Set<String> handles = driver.getWindowHandles();
    List<String> handlesList = new ArrayList<String>(handles);
    String newTab = handlesList.get(handlesList.size() - 1);

    // switch to new tab
    driver.switchTo().window(newTab); 
    driver.get("http://www.yahoo.com");

【讨论】:

    【解决方案2】:

    Selenium 目前无法切换标签。因此,我们强制浏览器在新窗口中打开链接,但由于我们能够切换窗口,我们强制浏览器采用这种方法。这可能会在以后的版本中修复

    【讨论】: