【问题标题】:driver.getWindowHandles(); not workingdriver.getWindowHandles();不工作
【发布时间】:2015-09-07 01:17:11
【问题描述】:
这是代码,它应该打印 3,但它只打印 1。
不明白什么不起作用。 (因此我也无法切换到新窗口。我想按索引切换到窗口。)
driver.get("https://www.google.co.in");
//open two more tabs
act.keyDown(Keys.LEFT_CONTROL).perform();
driver.findElement(By.linkText("Images")).click();
driver.findElement(By.linkText("Images")).click();
// save windows in a set
Set<String> winlist = driver.getWindowHandles();
Thread.sleep(5000);
//print set size --------> wrong, prints only 1
System.out.println(winlist.size());
【问题讨论】:
标签:
selenium
selenium-webdriver
webdriver
window-handles
【解决方案1】:
这似乎只是 Firefox 驱动程序的问题。我能够使用当前版本的 Firefox 和 Selenium 版本 2.47.1 进行重现。但是,我确实相信降级 Firefox 可能会解决这个问题,但我还没有尝试过。我确实在 Chrome 上尝试了相同的代码块,只是为了确保问题与驱动程序相关并且达到预期结果。
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "E:\\working\\selenium\\drivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
Actions act = new Actions(driver);
driver.get("https://www.google.co.in");
//get the original window handles
String originalHandle = driver.getWindowHandle();
//open two more tabs
act.keyDown(Keys.LEFT_CONTROL).perform();
driver.findElement(By.linkText("Images")).click();
driver.findElement(By.linkText("Images")).click();
// save windows in a set
Set<String> winlist = driver.getWindowHandles();
for(String win:winlist){
if(!win.equals(originalHandle)){
driver.switchTo().window(win);
System.out.println(driver.getTitle());
}
}
//print set size --------> wrong, prints only 1
System.out.println(winlist.size());
}
控制台输出:
启动 ChromeDriver 2.16.333243
(0bfa1d3575fc1044244f21ddb82bf870944ef961) 在端口 25687
只允许本地连接。
谷歌图片
谷歌图片
3
【解决方案2】:
什么可以帮助我解决这个问题:
问题出在 ChromeDriver 的声明中:
更改“WebDriver 驱动程序 = 新 ChromeDriver();” to "ChromeDriver driver = new ChromeDriver();"
所以 ChromeDriver 的创建应该如下所示:
System.setProperty("webdriver.chrome.driver", "path to chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.google.co.in");