Selenium无法随机识别Frame元素[5次中有2次]

时间:2015-11-18 12:53:43

标签: selenium-webdriver frames childwindow

                    w.switchTo().defaultContent();
        String parwind = w.getWindowHandle();
        Set<String> windows = w.getWindowHandles();
        System.out.println(windows.size());
        for(String handle : windows)
        {
            w.switchTo().window(handle);
            System.out.println(handle);
        }
        String mainwind = w.getWindowHandle();
        System.out.println(mainwind);
        System.out.println(w.getTitle());
        w.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
        w.switchTo().defaultContent();
        w.switchTo().frame("menucontent");
        w.findElement(By.xpath("//img[@id='toggleTreeExpand']")).click();
        w.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
        w.switchTo().frame(w.findElement(By.name("menuFr")));
        w.findElement(By.xpath("//a[@title='RegisterAttend']")).click();
        w.switchTo().defaultContent();
        w.switchTo().frame("content");
        w.switchTo().frame("commontoolbarFrame");
        w.findElement(By.name("create")).click();
        w.switchTo().defaultContent();
        w.switchTo().frame("content");
        w.switchTo().frame("f_query_add_mod");
        w.switchTo().frame("query_sub");
        w.findElement(By.name("first_name")).sendKeys("selenium");
        w.findElement(By.xpath("//option[@value='M']")).click();
        w.findElement(By.xpath("//input[@name='b_age']")).sendKeys("44");
        w.switchTo().defaultContent();
        w.switchTo().frame("content");
        w.switchTo().frame("f_query_add_mod");  
        w.switchTo().frame("main");
        w.findElement(By.xpath("//span[@id='findtl_tabspan']")).click();
        w.switchTo().defaultContent();
        Thread.sleep(5000);
        Set<String> windows1 = w.getWindowHandles();
        System.out.println(windows1.size());
        for(String handles1 : windows1)
        {
            w.switchTo().window(handles1);
        }
        Thread.sleep(5000);
        //w.switchTo().defaultContent();
        w.switchTo().frame("MainFrame1");
        w.findElement(By.name("blnggrpbut")).click();
        w.switchTo().defaultContent();
        Thread.sleep(5000);
        Set<String> windows2 = w.getWindowHandles();
        for(String handles2 : windows2)
        {
            w.switchTo().window(handles2);
        }
        Thread.sleep(5000);
        System.out.println(windows2.size());
        w.switchTo().defaultContent();
        w.switchTo().frame("code_desc");
        w.findElement(By.xpath("//a[@name='resulted_row']")).click();
        w.switchTo().defaultContent();
        Set<String> windows3 = w.getWindowHandles();
        for(String handles3 : windows3)
        {
            w.switchTo().window(handles3);
            System.out.println(w.getTitle());
        }
        w.switchTo().frame("MainFrame1");
        w.findElement(By.name("close_button")).click();
        w.switchTo().defaultContent();
        w.switchTo().window(mainwind);
        w.switchTo().frame("content");
        w.switchTo().frame("commontoolbarFrame");
        w.findElement(By.name("apply")).click();
        w.switchTo().defaultContent();
        Thread.sleep(5000);
        Set<String> cancel = w.getWindowHandles();
        for(String can : cancel)
        {
            w.switchTo().window(can);
        }
        w.switchTo().defaultContent();

错误:线程&#34; main&#34;中的异常org.openqa.selenium.NoSuchElementException:无法找到xpath == // frame的元素[@name =&#39; MainFrame1&#39;]

如果我在不更改任何代码的情况下运行此代码5次,则会成功执行2次,其他3次执行失败。

第一次尝试 - 通过 第二次尝试 - 失败 第三次尝试 - 失败 第四次尝试 - 通过 第五次尝试 - 失败

1 个答案:

答案 0 :(得分:0)

有时Selenium会感到困惑。我建议使用

driver.SwitchTo()窗口(driver.WindowHandles.Last());

以上将在新打开的窗口之间切换。您也可以使用.First()来回交换。