繁体   English   中英

Selenium - 无论打开的浏览器数量如何,getWindowHandles() 都会返回值 1

[英]Selenium - getWindowHandles() is returning value 1 irrespective of number of browser opened

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

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

  1. 单击()链接并尝试 getWindowHandles()
  2. Keys.Enter 在链接上 & getWindowHandles()
  3. 链接上的 sendkeys(“\\0”) 和 getWindowHandles()
  4. 鼠标悬停在链接上,点击链接并获取WindowHandles
  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 上发生。

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

ie.forceCreateProcessApi 

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

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

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

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

情况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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM