有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。

selenium webdriver中提供了进入一个iframe的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

也提供了一个返回default content的方法:

WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()

这样使我们面对iframe时可以轻松应对。

以下面的html代码为例,我们看一下处现iframe。

  1. main.html
  2. <html>
  3. <head>
  4. <title>FrameTest</title>
  5. </head>
  6. <body>
  7. <div id = "id1">this is a div!</div>
  8. <iframe id = "frame"  frameborder="0" scrolling="no" style="left:0;position:absolute;" src = "frame.html"></iframe>
  9. </body>
  10. </html>
  11. frame.html
  12. <html>
  13. <head>
  14. <title>this is a frame!</title>
  15. </head>
  16. <body>
  17. <div id = "div1">this is a div,too!</div>
  18. <label>input:</label>
  19. <input id = "input1"></input>
  20. </body>
  21. </html>
  1. import org.openqa.selenium.By;
  2. import org.openqa.selenium.WebDriver;
  3. import org.openqa.selenium.firefox.FirefoxDriver;
  4. public class FameStudy {
  5. public static void main(String[] args) {
  6. WebDriver dr = new FirefoxDriver();
  7. String url = "\\Your\\Path\\to\\main.html";
  8. dr.get(url);
  9. //在default content定位id="id1"的div
  10. dr.findElement(By.id("id1"));
  11. //此时,没有进入到id="frame"的frame中时,以下两句会报错
  12. dr.findElement(By.id("div1"));//报错
  13. dr.findElement(By.id("input1"));//报错
  14. //进入id="frame"的frame中,定位id="div1"的div和id="input1"的输入框。
  15. dr.switchTo().frame("frame");
  16. dr.findElement(By.id("div1"));
  17. dr.findElement(By.id("input1"));
  18. //此时,没有跳出frame,如果定位default content中的元素也会报错。
  19. dr.findElement(By.id("id1"));//报错
  20. //跳出frame,进入default content;重新定位id="id1"的div
  21. dr.switchTo().defaultContent();
  22. dr.findElement(By.id("id1"));
  23. }
  24. }

switch_to方法会new1个TargetLocator对象,使用该对象的frame方法可以将当前识别的”主体”移动到需要定位的frame上去。

最新文章

  1. DbUtility v3
  2. python排序算法的实现-选择
  3. android Camera 中如何修改缩放变焦参数
  4. python练习程序(c100经典例18)
  5. 如何正确学习JavaScript
  6. MySQL Cluster基础知识简介以及基本参数介绍
  7. CentOS7使用VPN上网
  8. MySQL的InnoDB和MyISAM比较
  9. 使用python+django+twistd 开发自己的操作和维护系统的一个
  10. Kindeditor编辑插件的使用
  11. 如何局部覆盖element-ui的默认样式
  12. LOJ 3049: 洛谷 P5284: 「十二省联考 2019」字符串问题
  13. Python-Django 模型层-多表查询-2
  14. /etc/resolv.conf
  15. live 2d js demo
  16. 第九节、人脸检测之Haar分类器
  17. Linux命令实例功能笔记
  18. VMware Ubuntu如何连接互联网
  19. Linux系统挂载只读改成读写
  20. JS-json-1

热门文章

  1. 工作记录--使用FFmpeg将一个视频文件中音频合成到另一个视频中
  2. Oracle 优化效率
  3. python 轴向连接
  4. 利用CSS使footer固定在页面底部
  5. 几道莫名AC的并查集题
  6. JavaScript--数组与伪数组(特殊对象)的区别
  7. gitlab 添加本地项目
  8. element-ui el-time-picker
  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 全书总结
  10. win2003开启ftp