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

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页面,采用索引定位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方案还有很多,想知道更多可以自行查看,这里只是提供一些参考

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值