Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium-getWindowHandles()返回值1,与打开的浏览器数量无关_Selenium_Selenium Webdriver - Fatal编程技术网

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

Selenium-getWindowHandles()返回值1,与打开的浏览器数量无关,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我目前正在使用selenium+Cucumber+InternetExplorer自动化一个基于IBMCognos平台的应用程序,并面临一些挑战。我需要这个小组在这些问题上提供一些专家帮助 问题描述-单击页面上的链接后,将打开新浏览器。理想情况下,getWindowHandles()方法返回WebDriver打开的浏览器的正确计数。我们使用窗口句柄属性切换到第二个浏览器,进一步的操作将在第二个浏览器上执行。GetWindowHandles返回值1,与WebDriver打开的浏览器数量无关。我尝试

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

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

  • 单击链接上的()
  • 在链接&getWindowHandles()上输入
  • 链接&getWindowHandles()上的sendkeys(“\0”)
  • 将鼠标悬停在链接上,单击链接&getWindowHandles
  • 双击链接&getWindowHandles
  • 使用sendkeys(keys.control+“t”)打开新选项卡,导航到URL&getWindowHandles()
  • 使用sendkeys(keys.control+“n”)打开新的浏览器窗口,导航到URL&getWindowHandles()
  • 使用的环境- Selenium WebDriver–2.39.0 IEDriverServer.exe-Win32_2.39.0 视窗7 Internet Explorer 8.0


    注意–它在Firefox上工作正常,这个问题只发生在IE上。

    你能告诉我点击链接是打开一个新标签还是一个新窗口吗? 在新窗口中打开的链接与在新选项卡中打开的链接之间存在差异。

    案例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");
    
    可在此处找到在同一浏览器窗口中的选项卡之间切换的详细示例代码:

    我也面临同样的问题,但添加以下功能解决了我的问题

    ie.forceCreateProcessApi 
    
    以上功能需要添加到InternetExplorer中。 希望它也能解决你的问题。
    您可能还需要修改注册表编辑器以使其工作。

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

    driver.findElement(By.xpath(//a[text()='Multi-PopUp Test'])。单击();
    字符串parent=driver.getWindowHandle();
    睡眠(3000);
    System.out.println(“父窗口:“+parent”);
    Setallwindow=driver.getWindowHandles();
    int count=allwindow.size();
    System.out.println(“总窗口数:+计数”);
    for(字符串子项:allwindow)
    {
    if(!parent.equalsIgnoreCase(child))
    {
    driver.switchTo().窗口(子窗口);
    System.out.println(“子窗口标题为:“+driver.getTitle());
    睡眠(3000);
    driver.close();
    }
    }
    
    在获取窗口句柄之前,您是否尝试等待几秒钟?可能在浏览器窗口实例化之前就调用了getWindowHandles。是的,我尝试了添加wait,不是Luckt。这个问题不是关于切换窗口,而是关于返回的窗口名称的数量在IE中是意外的。@Sourabh,正如您在这里看到的:(ctrl+tab)更改选项卡,但不要关注它。