Selenium WebDriver:打开新选项卡而不是新窗口

时间:2012-07-06 08:11:23

标签: selenium selenium-webdriver tabs window webdriver

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

2 个答案:

答案 0 :(得分:10)

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");

答案 1 :(得分:6)

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