Java Selenium webdriver从弹出的子窗口获取父窗口的焦点

Java Selenium webdriver从弹出的子窗口获取父窗口的焦点,java,selenium,webdriver,Java,Selenium,Webdriver,我正在尝试从单击生成的弹出窗口切换到父窗口 我试过一些我发现有效的方法,但没有一种有效 public static String validateHierarchy(Properties prop) { String Hierarchy = driver.findElement(By.xpath("html/body/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody

我正在尝试从单击生成的弹出窗口切换到父窗口

我试过一些我发现有效的方法,但没有一种有效

public static String validateHierarchy(Properties prop)
{
    String Hierarchy = driver.findElement(By.xpath("html/body/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td[2]/table/tbody/tr/td[1]/table/tbody/tr[34]/td")).getText();
    Log.info(Hierarchy);

    String mainWindowHandle = driver.getWindowHandle();
    driver.findElements(By.cssSelector("a[class='left-link']")).get(10).click();
    //switching to current window 
    Set<String> s = driver.getWindowHandles();
    System.out.println("Window"+mainWindowHandle);
    System.out.println("Window"+s);
    Iterator<String> ite = s.iterator();
    while(ite.hasNext())
    {
        String popupHandle=ite.next().toString();
        if(!popupHandle.contains(mainWindowHandle))
        {
            driver.switchTo().window(popupHandle);
            //checking for forgot password text in the current page
            String part1 = driver.findElement(By.xpath("html/body/div[3]/form")).getText();
            Log.info(part1);
            String part2 = driver.findElement(By.xpath(".//*[@id='tree']")).getText();
            Log.info(part2);

            driver.close(); //closing child window
        }
    }

     driver.switchTo().window( mainWindowHandle );

    String mainWindowHandle1 = driver.getWindowHandle();
    System.out.println("Window"+mainWindowHandle1);
    driver.findElements(By.cssSelector("a[class='left-link']")).get(11).click();




    //switching to current window 
    Set <String> s1 = driver.getWindowHandles();
    System.out.println("Window"+mainWindowHandle1);
    System.out.println("Window"+s1);
    Iterator<String> ite1 = s1.iterator();
    while(ite1.hasNext())
    {
        String popupHandle1=ite1.next().toString();
        if(!popupHandle1.contains(mainWindowHandle1))
        {
            driver.switchTo().window(popupHandle1);

            //checking for forgot password text in the current page
            String part1 = driver.findElement(By.xpath("html/body/div[3]/form")).getText();
            Log.info(part1);
            String part2 = driver.findElement(By.xpath(".//*[@id='tree']")).getText();
            Log.info(part2);



            driver.close(); //closing child window

         }
      }


    driver.switchTo().window( mainWindowHandle );
    return Hierarchy;
}
第一个弹出窗口被正确处理,但当它出现并转到单击选项get11.click时。这句话有点错误

窗口{ed1019d1-0ac5-4cc0-ba18-8efdadc10c4c} 窗口[{ed1019d1-0ac5-4cc0-ba18-8efdadc10c4c},{9e9cbcf5-9c4b-4805-918b-8f3eb7d9f946}] 窗口{ed1019d1-0ac5-4cc0-ba18-8efdadc10c4c} 主线程java.lang.IndexOutOfBoundsException中出现异常:索引:11,大小:0 位于java.util.ArrayList.rangeCheckUnknown Source 位于java.util.ArrayList.getUnknown Source 在JaamoonManage.validateHierarchyJaamoonManage.java:299 在JaamoonManage.mainJaamoonManage.java:106

甚至我也试图找到字符串层次结构元素,但我也找不到。它正在切换到父窗口,但无法在该窗口上执行任何操作

有人能指出我哪里有问题吗


谢谢。

获取IndexOutOfBoundException的原因是,在.cssSelectora[class='left-link']中没有包含此定位器的第11个元素

方法将返回此列表中指定位置的元素,并抛出IndexOutOfBoundsException-如果索引超出范围index<0 | | index>=size

再次检查以下步骤中的逻辑

 driver.findElements(By.cssSelector("a[class='left-link']")).get(11).click();

请参阅以将控件切换到子窗口。

请参阅此博客文章我尝试了第一种方法,但没有任何帮助。我不明白如何获得IndexOutofBoundException如果我评论第一个驱动程序。findElementsBy.cssSelectora[class='left-link'].get10.click;和弹出功能,然后11元素工作正常。在12、13和14上有更多的“左链接”元素。如果我对整个方法进行评论,那么12、13和14元素在另一种方法中可以很好地工作。只有当我从弹出窗口返回并在关闭弹出窗口后尝试访问另一个元素时,问题才会出现。是否第一次正确地将控件切换到主窗口?确保在关闭第一个弹出窗口后,将控件切换到主窗口后,通过打印页面标题/当前url。并尝试在使用driver.navigate.refresh刷新窗口后获取11元素;是,它正在正确切换到主窗口。您可以在我的问题中看到,我使用System.out.println跟踪处理程序。在控制台中,我可以看到最后的处理程序是主处理程序。我不明白你所说的打印页面标题/当前url是什么意思,你能解释一下吗??我将尝试使用刷新功能并告诉您..我只是要求您打印System.out.printlndriver.getTitle,以确保在关闭第一个弹出窗口后,控件再次正确更改为主窗口。是的,SOP将主窗口作为标题。我确实找到了解决办法。但这不是一个实际的解决方案,而是一个你可以说的变通方法。关闭get10.click;中的弹出窗口后。我现在做的是driver.navigate.refresh;整数TIME1=Integer.parseIntprop.getPropertyTIME;driver.manage.timeouts.implicitlyWaitTIME1,TimeUnit.SECONDS;WebElement frame=driver.findElementBy.idMAIN;driver.switchTo.frameframe;driver.findElementBy.linktextmanager.click;然后单击11元素。它工作正常,但不是一个很好的解决方案。