【问题标题】:Selenium - getWindowHandles() is returning value 1 irrespective of number of browser openedSelenium - getWindowHandles() 返回值 1 与打开的浏览器数量无关
【发布时间】:2014-02-08 10:53:12
【问题描述】:

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

问题描述 - 单击页面上的链接后,会打开新的浏览器。理想情况下,getWindowHandles() 方法返回 WebDriver 打开的浏览器的正确计数。我们使用窗口句柄属性切换到第二个浏览器,将在第二个浏览器上执行进一步的操作。 GetWindowHandles 返回值 1,与 WebDriver 打开的浏览器数量无关。我尝试了以下方法 -

  1. 在链接上单击() 并尝试 getWindowHandles()
  2. Keys.Enter 在链接上 & getWindowHandles()
  3. 链接上的sendkeys(“\0”) & getWindowHandles()
  4. 鼠标悬停在链接上,点击链接&getWindowHandles
  5. 双击链接&getWindowHandles
  6. 使用 sendkeys(keys.control +”t”) 打开新选项卡,导航到 URL 和 getWindowHandles()
  7. 使用 sendkeys(keys.control +”n”) 打开新的浏览器窗口,导航到 URL 和 getWindowHandles()

使用的环境 – Selenium WebDriver – 2.39.0 IEDriverServer.exe - Win32_2.39.0 Windows 7的 Internet Explorer 8.0

注意——它在 Firefox 上运行良好,这个问题只在 IE 上发生。

【问题讨论】:

  • 您是否尝试在获取窗口句柄之前等待几秒钟?甚至在实例化浏览器窗口之前,可能会调用 getWindowHandles。
  • 是的,我尝试添加等待,没有运气

标签: selenium selenium-webdriver


【解决方案1】:

我遇到了同样的问题,但是添加以下功能解决了我的问题。

ie.forceCreateProcessApi 

以上功能需要添加到 InternetExplorer。 希望它也可以解决您的问题。 您可能还需要修改 reg 编辑器才能使其正常工作。

【讨论】:

    【解决方案2】:

    当您访问父窗口时,您应该提供一些延迟。 这是我的错误,因为哪个脚本没有运行。你可以试试这个代码。

    driver.findElement(By.xpath("//a[text()='Multi-PopUp Test']")).click();
    String parent=driver.getWindowHandle();
    Thread.sleep(3000);
    System.out.println("parent window: "+parent);
    Set<String>allwindow=driver.getWindowHandles();
    int count=allwindow.size();
    System.out.println("Total windows: "+count);
    for(String child:allwindow)
    {
        if(!parent.equalsIgnoreCase(child))
        {
            driver.switchTo().window(child);
            System.out.println("Child window title is:"+driver.getTitle());
            Thread.sleep(3000);
            driver.close();
        }
    }
    

    【讨论】:

      【解决方案3】:

      你能判断点击链接是打开一个新标签还是一个新窗口? 在新窗口中打开的链接和在新标签中打开的链接是有区别的。

      案例 1:
      如果有多个窗口,driver.getWindowHandles() 返回句柄列表,因此列表的大小> 1。下面的代码演示了窗口之间的切换:

      //Get the current window handle
      String windowHandle = driver.getWindowHandle();
      
      //Get the list of window handles
      ArrayList tabs = new ArrayList (driver.getWindowHandles());
      System.out.println(tabs.size());
      //Use the list of window handles to switch between windows
      driver.switchTo().window(tabs.get(0));
      
      //Switch back to original window
      driver.switchTo().window(mainWindowHandle);
      

      案例 2:
      如果同一窗口中有多个选项卡,则只有一个窗口句柄。因此,在窗口句柄之间切换会使控件保持在同一个选项卡中。
      在这种情况下,使用 Ctrl + \t (Ctrl + Tab) 在选项卡之间切换,对我有用。

      //Open a new tab using Ctrl + t
      driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
      //Switch between tabs using Ctrl + \t
      driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");
      

      在同一浏览器窗口中切换标签的详细示例代码可以在这里找到:
      http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

      【讨论】:

      • 这个问题不是关于切换窗口的问题,而是关于返回的窗口名称的数量在 IE 中是意外的。
      • @Sourabh 你可以在这里看到:stackoverflow.com/questions/34427390/… (ctrl+tab) 更改选项卡,但不要专注于它。
      猜你喜欢
      • 2021-06-10
      • 1970-01-01
      • 2021-08-28
      • 2018-02-01
      • 1970-01-01
      • 2017-09-10
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多