iframe,switchToWindow报错--no such element: Unable to locate element
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
免费下载资源
·
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页面,采用索引定位iframe
driver.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方案还有很多,想知道更多可以自行查看,这里只是提供一些参考
GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45
7 个月前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 7 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)