Selenium webdriver Selenium无法随机识别帧元素[5次中有2次] w.switchTo().defaultContent(); 字符串parwind=w.getWindowHandle(); 设置windows=w.getWindowHandles(); System.out.println(windows.size()); 用于(字符串句柄:windows) { w、 切换到()窗口(手柄); 系统输出打印LN(手柄); } 字符串mainwind=w.getWindowHandle(); 系统输出打印LN(主风); System.out.println(w.getTitle()); w、 manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS); w、 切换到().defaultContent(); w、 切换到()框架(“菜单内容”); w、 findelelement(By.xpath(“//img[@id='toggletreexpand']))。单击(); w、 manage().timeouts().implicitlyWait(1,TimeUnit.SECONDS); w、 switchTo().frame(w.findElement(By.name(“menuFr”)); w、 findElement(By.xpath(“//a[@title='RegisterAttend']))。单击(); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 切换到().frame(“commontoolbarFrame”); w、 findElement(按.name(“创建”))。单击(); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 switchTo().frame(“f_query\u add\u mod”); w、 switchTo().frame(“query_sub”); w、 findElement(按名称(“名字”)).sendKeys(“硒”); w、 findElement(By.xpath(“//option[@value='M']))。单击(); w、 findElement(By.xpath(//input[@name='b_age'])).sendKeys(“44”); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 switchTo().frame(“f_query\u add\u mod”); w、 切换到()帧(“主”); w、 findelelement(By.xpath(“//span[@id='findtl_tabspan']))。单击(); w、 切换到().defaultContent(); 睡眠(5000); 设置windows1=w.getWindowHandles(); System.out.println(windows1.size()); 用于(字符串句柄1:windows1) { w、 切换到()窗口(把手1); } 睡眠(5000); //w、 切换到().defaultContent(); w、 切换到()框架(“主框架1”); w、 findElement(按.name(“blnggrpbut”))。单击(); w、 切换到().defaultContent(); 睡眠(5000); 设置windows2=w.getWindowHandles(); 用于(字符串句柄2:windows2) { w、 切换到()窗口(把手2); } 睡眠(5000); System.out.println(windows2.size()); w、 切换到().defaultContent(); w、 切换到()帧(“代码描述”); w、 findElement(By.xpath(“//a[@name='resulted\u row']))。单击(); w、 切换到().defaultContent(); 设置windows3=w.getWindowHandles(); 用于(字符串句柄3:windows3) { w、 切换到()窗口(手柄3); System.out.println(w.getTitle()); } w、 切换到()框架(“主框架1”); w、 findElement(按.name(“关闭按钮”))。单击(); w、 切换到().defaultContent(); w、 切换到()窗口(主风); w、 切换到()框架(“内容”); w、 切换到().frame(“commontoolbarFrame”); w、 findElement(按.name(“应用”))。单击(); w、 切换到().defaultContent(); 睡眠(5000); Set cancel=w.getWindowHandles(); for(字符串可以:取消) { w、 切换到()窗口(can); } w、 切换到().defaultContent();

Selenium webdriver Selenium无法随机识别帧元素[5次中有2次] w.switchTo().defaultContent(); 字符串parwind=w.getWindowHandle(); 设置windows=w.getWindowHandles(); System.out.println(windows.size()); 用于(字符串句柄:windows) { w、 切换到()窗口(手柄); 系统输出打印LN(手柄); } 字符串mainwind=w.getWindowHandle(); 系统输出打印LN(主风); System.out.println(w.getTitle()); w、 manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS); w、 切换到().defaultContent(); w、 切换到()框架(“菜单内容”); w、 findelelement(By.xpath(“//img[@id='toggletreexpand']))。单击(); w、 manage().timeouts().implicitlyWait(1,TimeUnit.SECONDS); w、 switchTo().frame(w.findElement(By.name(“menuFr”)); w、 findElement(By.xpath(“//a[@title='RegisterAttend']))。单击(); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 切换到().frame(“commontoolbarFrame”); w、 findElement(按.name(“创建”))。单击(); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 switchTo().frame(“f_query\u add\u mod”); w、 switchTo().frame(“query_sub”); w、 findElement(按名称(“名字”)).sendKeys(“硒”); w、 findElement(By.xpath(“//option[@value='M']))。单击(); w、 findElement(By.xpath(//input[@name='b_age'])).sendKeys(“44”); w、 切换到().defaultContent(); w、 切换到()框架(“内容”); w、 switchTo().frame(“f_query\u add\u mod”); w、 切换到()帧(“主”); w、 findelelement(By.xpath(“//span[@id='findtl_tabspan']))。单击(); w、 切换到().defaultContent(); 睡眠(5000); 设置windows1=w.getWindowHandles(); System.out.println(windows1.size()); 用于(字符串句柄1:windows1) { w、 切换到()窗口(把手1); } 睡眠(5000); //w、 切换到().defaultContent(); w、 切换到()框架(“主框架1”); w、 findElement(按.name(“blnggrpbut”))。单击(); w、 切换到().defaultContent(); 睡眠(5000); 设置windows2=w.getWindowHandles(); 用于(字符串句柄2:windows2) { w、 切换到()窗口(把手2); } 睡眠(5000); System.out.println(windows2.size()); w、 切换到().defaultContent(); w、 切换到()帧(“代码描述”); w、 findElement(By.xpath(“//a[@name='resulted\u row']))。单击(); w、 切换到().defaultContent(); 设置windows3=w.getWindowHandles(); 用于(字符串句柄3:windows3) { w、 切换到()窗口(手柄3); System.out.println(w.getTitle()); } w、 切换到()框架(“主框架1”); w、 findElement(按.name(“关闭按钮”))。单击(); w、 切换到().defaultContent(); w、 切换到()窗口(主风); w、 切换到()框架(“内容”); w、 切换到().frame(“commontoolbarFrame”); w、 findElement(按.name(“应用”))。单击(); w、 切换到().defaultContent(); 睡眠(5000); Set cancel=w.getWindowHandles(); for(字符串可以:取消) { w、 切换到()窗口(can); } w、 切换到().defaultContent();,selenium-webdriver,frames,childwindow,Selenium Webdriver,Frames,Childwindow,错误:线程“main”org.openqa.selenium.NoSuchElementException中出现异常:无法找到xpath=//frame[@name='MainFrame1']的元素 如果我在不更改任何代码的情况下运行此代码5次,那么它将成功执行2次,其他3次失败 第一次试传球 第二次尝试-失败 第三次尝试-失败 第四试通行证 第五次尝试-失败有时候Selenium会感到困惑。我建议使用 driver.SwitchTo().Window(driver.WindowHandles.

错误:线程“main”org.openqa.selenium.NoSuchElementException中出现异常:无法找到xpath=//frame[@name='MainFrame1']的元素

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

第一次试传球 第二次尝试-失败 第三次尝试-失败 第四试通行证
第五次尝试-失败

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

driver.SwitchTo().Window(driver.WindowHandles.Last())


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

@Mk08您能给出一个解决方案吗?您好,谢谢您的建议,如果我执行代码的5次仅为成功的3次,那么另外两次它会抛出一个错误,如“线程中的异常”main org.openqa.selenium.NoSuchElementException:无法找到xpath=//frame的元素[@name='code\u desc'](警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:3.45秒“没有名为driver.windowhandles.last的方法您似乎使用了“w”而不是driver。请尝试使用w.windowhandles
                    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();