当前位置: 首页 > 知识库问答 >
问题:

selenium中的getWindowHandles始终将大小返回为1,即使有多个chrome实例处于打开状态

姬温文
2023-03-14

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

下面是代码:

    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]

你知道为什么会这样吗?或者也许我做错了什么。

Im使用Selenium-Java"selenium-java-3.13.0"

JDK"10.0.2"

Chrome“版本68.0.3440.75(官方版本)(64位)”

共有2个答案

郭志泽
2023-03-14

首先,我们需要找到有多少个窗口为此打开,需要以字符串形式存储getWindowHandles,如下所示,希望下面的代码能有所帮助。

试试下面的代码

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);

}
乐正瑞
2023-03-14

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后,您将找到windowhandles。因此,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个

 类似资料:
  • 上下文中的代码: 这段代码在Windows7和Windows8.1上的IE11上运行良好,可以切换到第二个窗口,但在Windows10上不起作用。 在Windows 10中, 使用的硒和IE版本是2.53.1。

  • 我目前正在使用selenium+Cucumber+Internet Explorer自动化一个基于IBM Cognos平台的应用程序,并面临一些挑战。在这些问题上,我需要这个小组的专家帮助。 null

  • 本文向大家介绍tensorflow 大于某个值为1,小于为0的实例,包括了tensorflow 大于某个值为1,小于为0的实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充知识:TensorFlow中获取大于零的元素集合 a为tensor idx = tf.where(a > 0) output = tf.gather_nd(a, idx) 以上这篇ten

  • 案例2: 但是在第二种情况下,即使arraylist中没有项,它的大小也将得到mySignimgList2.size()=1。

  • 问题内容: 我试图计算表中的行数,并认为这是执行此操作的正确方法: 但是计数总是返回。如果我在phpMyAdmin中使用相同的查询,则会得到正确的结果。它位于表格中,因此我也尝试进行测试,但是返回了。 什么是正确的方法? 问题答案: 您必须获取一条记录,它将包含Count()的结果

  • Selenium<代码>列表 代码段: ====================================================================== 我使用,但它也不起作用