iframe,switchToWindow报错--no such element: Unable to locate element

来源:互联网 发布:淘宝送的魔豆 编辑:程序博客网 时间:2024/05/21 10:38

iframe参考
window窗口切换参考

iframe概念:

iframe 就是HTML 中,用于网页嵌套网页的。 一个网页可以嵌套到另一个网页中,可以嵌套很多层

iframe实例

项目相关网址
这里写图片描述

怎么知道一个页面是否是iframe

1.首先如果我们报找不到这个元素的错误no such element: Unable to locate element,然后使用firefox定位到这个元素下,指定查找的为FirePath查找,如果如上图左下角的两个箭头出现iframe(一般的显示的是TopWindow)标签,那就证明页面包含了iframe,至于iframe旁边的RightMain则代表是iframe的id,当然很多时候不一定有2.如果我们确定包含iframe,那么我们需要操作的元素在iframe中,那么我们就可以先从TopWindow切换到iframe下,之后我们可以对iframe中的元素进行click(),senkeys()等操作,操作完后我们就可以通过代码返回到TopWindow,当然根据实际情况我们可以自由在iframe和TopWindow之间进行自由切换,具体切换代码如下:注意:如果一个页面包含多个iframe,那么切换iframe之前先选择操作的到底是哪个iframe,定位iframe的方法有四个,如下 第一个是根据frame的索引来定位,也就是说一个页面如果有多个frame,可以根据frame(1),frame(2)从上往下去定位。第二个就是我们今天介绍的方法,是根据frame的ID或者name去识别。第三个是根据该frame内部一个元素去识别,第四个就是从frame内部切换到默认的Top Window的方法。我们修改下脚本,在点击化学药这个操作的时候,先切换到frame内部,然后去操作内部元素化学药,最后切换出去,点击无权限提醒对话框上面的去登录按钮。
//点击“计划结束时间”栏目driver.findElement(By.id("plannedEndTime")).click();//从主窗口切换到frame页面,采用索引定位iframedriver.getDriver().switchTo().frame(1);//选择项目"计划结束时间并点击"WebElement webElement3=driver.findElement(By.xpath("html/body/div[1]/div[3]/table/tbody/tr[6]/td[5]"));        webElement3.click();        driver.sleep(1000);         //从iframe切换到主窗口        driver.getDriver().switchTo().defaultContent();

iframe具体还是参考上述博客

switchToWindow问题实例如下:

这里写图片描述
这里写图片描述

在项目中我们会常常遇见如上图所示的情况,当我们点击第一个页面的某个页面时,通常会跳转到另外一个页面,比如登陆之后的跳转,那么我们跳转到另外一个页面的时候,我们一般会操作第二个页面中的元素,比如点击按钮或者输入等,但是此时通常会报错:no such element: Unable to locate element"报错原因:"由于我们是从第一个页面跳转过来的,那么在跳转到第二个页面的时候操作元素,惯性思维是我们操作的是第二个页面的元素,其实我们仍然是在第一个页面,并且操作的是第一个页面,由于很多时候第二个页面的元素通常和第一个元素不尽相同,所以我们查找元素是会报错的"解决方案:":当页面从第一个页面加载到第二个页面后,我们从第一个页面同步切换到第二个页面,这样我们就是操作的是第二个页面元素"Window切换代码如下:"
//"第一个页面元素"driver.findElement(By.partialLinkText("任务流程数据一体化")).click();driver.sleep(2000);// 获取当前页面句柄    String handle = driver.getWindowHandle();    // 获取所有页面的句柄,并循环判断不是当前的句柄   for (String temhandle : driver.getDriver().getWindowHandles()) {                if (!temhandle.equals(handle))                    driver.getDriver().close();                 driver.getDriver().switchTo().window(temhandle);                }            //点击"新建"按钮--"第二个页面元素"driver.findElement(By.id("Project_addProject")).click();

当然switchToWindow方案还有很多,想知道更多可以自行查看,这里只是提供一些参考

阅读全文
0 0
原创粉丝点击