我打开了多个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位)”
答案 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);
}