Selenium - getWindowHandles()返回值1,与浏览器打开的数量无关

时间:2014-01-19 07:16:16

标签: selenium selenium-webdriver

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

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

  1. 点击链接上的()试过getWindowHandles()
  2. Keys.Enter on the link& getWindowHandles()
  3. 链接上的
  4. sendkeys(“\ 0”)& getWindowHandles()
  5. 鼠标悬停在链接上,点击链接& getWindowHandles
  6. 双击链接& getWindowHandles
  7. 使用sendkeys(keys.control +“t”)打开“新建”选项卡,导航到URL& getWindowHandles()
  8. 使用sendkeys(keys.control +“n”)打开新的浏览器窗口,导航到URL& getWindowHandles()
  9. 使用环境 -                 Selenium WebDriver - 2.39.0                 IEDriverServer.exe - Win32_2.39.0                 Windows 7的                 Internet Explorer 8.0

    注意 - 它在Firefox上工作正常,此问题仅在IE上发生。

3 个答案:

答案 0 :(得分:0)

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

ie.forceCreateProcessApi 

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

答案 1 :(得分:0)

访问父窗口时,应提供一些延迟。 这是我的错误,原因是未运行哪个脚本。您可以尝试以下代码。

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

答案 2 :(得分:-2)

您能否判断点击该链接是打开新标签页还是新窗口? 新窗口中的链接打开与新选项卡中的链接打开之间存在差异。

案例1:
如果有多个窗口,则driver.getWindowHandles()返回句柄列表,因此列表的大小为&gt; 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