即使打开了多个chrome实例,硒中的getWindowHandles始终返回大小为1

时间:2018-07-26 22:41:47

标签: selenium selenium-chromedriver

我打开了多个chrome窗口,但是即使打开了多个chrome实例,硒中的getWindowHandles始终返回大小为1。

代码如下:

    System.setProperty("webdriver.chrome.driver", "C:/Downloads/New folder/chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://www.google.com/");

    driver = new ChromeDriver();
    driver.get("https://www.rediffmail.com/");

    driver = new ChromeDriver();
    driver.get("https://www.facebook.com/");

    Set<String> ids = driver.getWindowHandles();
    System.out.println(ids.size());     
    System.out.println(ids);

这是输出:

1
[CDwindow-DBDAD89956F46A4DE6DC3F16E70D79A6]

为什么会这样? 也许我做错了什么。

我使用Selenium-Java“ selenium-java-3.13.0”

JDK“ 10.0.2”

Chrome浏览器“版本68.0.3440.75(官方内部版本)(64位)”

2 个答案:

答案 0 :(得分:1)

getWindowHandles()方法将返回当前WebDriver实例的窗口句柄集。

在这里,您要为每个URL创建不同的实例,并尝试获取WindowHandles。因此,它返回的大小为1。

实例1:

WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com/")

实例2:

driver = new ChromeDriver();
driver.get("https://www.rediffmail.com/");

实例3:

driver = new ChromeDriver();
driver.get("https://www.facebook.com/");

您将在创建实例3之后找到窗口句柄。因此,driver对象将保存实例3,因此driver.getWindowHandles();返回1。

您可以尝试使用同一驱动程序对象打开多个不同的选项卡,然后检查WindowHandles的大小。

出于理解的目的,请在实例3之后添加以下步骤,您可以观察到getWindowHandles的大小。

    //Latest driver instance is passed
    JavascriptExecutor js=(JavascriptExecutor)driver;
    String url1="https://www.rediffmail.com/";
    String url2="https://www.google.com/";

    js.executeScript("window.open(arguments[0])",url1); //New Tab will be opened
    js.executeScript("window.open(arguments[0])",url2); //New Tab will be opened

    Set<String> ids = driver.getWindowHandles();
    System.out.println(ids.size());
    System.out.println(ids);

输出:

3

答案 1 :(得分:0)

首先,我们需要找到打开此窗口所需的窗口,以便将getWindowHandles存储在String中,如下所示,希望下面的代码会有所帮助。

尝试下面的代码

Set<String> allWindowHandles = driver.getWindowHandles();

int count = allWindowHandles.size();
System.out.println("Number of browser windows opened on the system is : "+ count);
for (String windowHandle : allWindowHandles) {
//switch to each browser window
driver.switchTo().window(windowHandle);
String title = driver.getTitle();
//print the window handle id of each browser window
System.out.println("Window handle id of page -->"+ title +" --> is : "+windowHandle);

}