在同一窗口的多个选项卡上使用getWindowHandles方法时,Selenium IE驱动程序将选项卡计数返回为1

时间:2017-12-01 19:12:18

标签: selenium selenium-webdriver selenium-iedriver

我使用selenium web驱动程序+ Internet Explorer自动化门户,能够在现有窗口上打开多个新选项卡,但无法将URL传递给新打开的选项卡,IE无法识别新选项卡和getWindowHandles( )将count返回为1,相同的代码与Chrome一起使用。

示例代码1:

String baseUrl = "www.facebook.com";
driver.get(baseUrl);
driver.findElement(By.xpath("//*[@id='userName']")).sendKeys("xyz");
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("****");
driver.findElement(By.xpath("//*[@id='loginButton']")).click();

driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL +"t");   
driver.getWindowHandles();
ArrayList<String> tabs =  new ArrayList<String>(driver.getWindowHandles()); 

driver.switchTo().window(tabs.get(1)); //switches to new tab
driver.get("www.google.com");

示例代码2:

String baseUrl = "www.facebook.com";
driver.get(baseUrl);
driver.findElement(By.xpath("//*[@id='userName']")).sendKeys("xyz");
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("****");
driver.findElement(By.xpath("//*[@id='loginButton']")).click();

String parent = driver.getWindowHandle();
driver.findElement(By.cssSelector("Body")).sendKeys(Keys.CONTROL +"t");
Thread.sleep(3000);
for(String winHandle : driver.getWindowHandles()){
    if(!winHandle.equals(parent)){
        driver.switchTo().window(winHandle);
        driver.get("www.google.com");
    }
}

还尝试了其他几种方式来改变IE配置,例如更改保护模式/覆盖自动cookie处理但没有任何效果。

有没有办法通过代码在IE中打开新标签,并使用Selenium中的任何方法获得准确的标签计数?

配置:

IE:11, Selenium-java:2.47 / 3.7 IEDriver:3.3.0 / 2.53, Windows 7

1 个答案:

答案 0 :(得分:0)

我遇到了与IE8类似的问题,我在调用driver.getWindowHandles()之前使用driver.switchTo()。defaultContent()解决了问题。像这样:

// Save the parent
parent = driver.getWindowHandle();
driver.switchTo().defaultContent();
for (String winHandle : driver.getWindowHandles()) {
        driver.switchTo().window(winHandle);
        if (!winHandle.equals(parent)) {
        // Do something
        }
}
driver.close();
driver.switchTo().window(parent);