14

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

4

2 回答 2

11

Selenium 现在能够切换标签。下面的代码1:适用于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");
于 2015-02-24T13:45:47.437 回答
6

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

于 2012-07-06T08:38:50.783 回答