本篇文章整理了元素定位的基础知识——iframe框架中的元素定位。

一、iframe框架元素定位

  iframe是Html页面的内联框架,如果在自动化测试中无法定位到某个元素,那么很有可能是因为该元素在iframe框架中。先来看一下下面3段代码,分别是origin.html和2个iframe框架页面。

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>origin</title>
</head>
<body>
<p id="origin_p">这是原始页面</p>
<iframe src="iframe_1.html" id="parent"></iframe>
<br><br>
用户名:
<input type="text" id="username">
</body>
</html>

origin.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe_1</title>
</head>
<body>
<p id="parent_p">这是第1层iframe框架</p>
<iframe src="iframe_2.html" id="son"></iframe>
</body>
</html>

iframe_1.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe_2</title>
</head>
<body>
<p id="son_p">这是第2层iframe框架</p>
</body>
</html>

iframe_2.html

1. 未嵌套iframe

  将iframe_1.html的第9行代码注释后,打开origin.html页面,就可以看到只有一层iframe框架的origin页面。效果如下图,红框部分即为嵌套的第一层iframe框架。

2. 嵌套iframe 

  将iframe_1.html的第9行代码注释取消后,打开origin.html页面,就可以看到有两层iframe框架的origin页面。效果如下图,红框部分即为嵌套的第一层iframe框架,蓝框部分为嵌套的第二层iframe框架。

二、实例

 import time

 from selenium import webdriver

 # 创建driver实例
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 打开待测页面
driver.get('file:///python/selenium/origin.html')
# 隐式等待10s
driver.implicitly_wait(10)
# 定位原始页面中的p标签
origin_p = driver.find_element_by_id('origin_p')
# 打印原始页面中p标签的文本
print('原始页面p标签的内容:{}'.format(origin_p.text))
# 通过索引方式进入第一层iframe框架
driver.switch_to.frame(0)
# 定位iframe_1中的p标签
parent_p = driver.find_element_by_id('parent_p')
# 打印iframe_1中p标签的文本
print('第1层iframe框架中p标签的内容:{}'.format(parent_p.text))
# 通过id属性进入第二层iframe框架
driver.switch_to.frame('son')
# 定位iframe_2中的p标签
son_p = driver.find_element_by_id('son_p')
# 打印iframe_2中p标签的文本
print('第2层iframe框架中p标签的内容:{}'.format(son_p.text))
time.sleep(2)
# 跳转到原始页面
driver.switch_to.default_content()
# 定位原始页面中的input标签
user = driver.find_element_by_id('username')
# 在input标签中输入admin
user.send_keys('admin')
# 等待2s
time.sleep(2)
# 退出驱动程序并关闭浏览器
driver.quit()

第10行地址部分根据自己实际地址填写。以上代码中主要体现了进入iframe框架的方法switch_to.frame()和对应的2种方式,即索引方式和id方式;也展示了跳出iframe框架的方法switch_to.default_content()。

运行结果如下:

参考资料:《Python自动化测试实战》——无涯

Web UI自动化测试基础——元素定位(三)的更多相关文章

  1. Web UI自动化测试基础——元素定位(二)

    本篇文章整理了元素定位的基础知识——多个元素定位方式. 一.多个元素定位方式简介 同单个元素定位方式相同,多个元素定位方式也有与之对应的8种方式,即id.name.class_name.tag_nam ...

  2. Web UI自动化测试基础——元素定位(一)

    本篇文章整理了元素定位的基础知识——单个元素定位方式. 一.单个元素定位方式简介 1. find_element_by_id 通过元素的id属性进行定位.以百度首页为例,首先进入https://www ...

  3. [原创]浅谈Web UI自动化测试

    [原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...

  4. 简单Web UI 自动化测试框架 pyse

    WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...

  5. 【转】Web UI自动化测试原理

    目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等.  这些框架都可以操作Web中的控件,模拟用户输入,点击等 ...

  6. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

  7. web自动化测试(java)---元素定位

    和python类似,java-selenium也提供了很多种元素定位的方法,具体如下: findElement(By.id()) findElement(By.name()) findElement( ...

  8. python ui自动化之元素定位和常用操作

    做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...

  9. App元素定位三种方法

    来自博客: http://testingpai.com/article/1595507262082 以下方法操作前必须确保有手机设备连入电脑,检测是否有手机连入命令 adb devices 第一种:A ...

随机推荐

  1. 关于FileChannel的获取方式之open方法详解

    FileChannel.open(Path path, OpenOption... options); 例子使用JDK1.8 FileChannel open方法源码: public static F ...

  2. Codeforces Round #593 (Div. 2) C. Labs A. Stones

    题目:https://codeforces.com/contest/1236/problem/A 思路:两种操作收益都是3 且都会消耗b 操作2对b消耗较小 则可优先选择操作2 再进行操作1 即可得到 ...

  3. 深入理解JAVA虚拟机 虚拟机性能监控和故障处理工具

    jre的bin目录下的工具,都非常小.它都是tools.jar下面的代码的一层封装而已.tools.jar不是java标准,是Hotspot实现的. 名称 作用 jps JVM Process Sta ...

  4. redis高可用(一)主从复制

    主从复制 读写分离 https://blog.csdn.net/u014691098/article/details/82391608

  5. [每日一讲] Python系列:列表与元组

    参考文档 https://docs.python.org/zh-cn/3.7/tutorial/introduction.html#lists """ DATA STRU ...

  6. 【GDOI2017模拟12.9】最近公共祖先

    题目 分析 首先,将这些节点按dfs序建一棵线段树. 因为按dfs序,所以在同一子树上的节点会放在线段树相邻的位置. 发现,对于一个位置x,它的权值只会对以x为根的子树造成影响. 当修改x时,用w[x ...

  7. 【NOIP2016提高A组模拟10.15】算循环

    题目 分析 一步步删掉循环, 首先,原式是\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=i}^n\sum_{l=j}^m\sum_{p=i}^k\sum_{q=j}^l1\] 删 ...

  8. ubuntu中查看AMD GPU 状态的办法

    lshw -c video 运行命令:glxinfo | grep rendering 如果结果是“yes”,证明显卡驱动已经成功安装. 如果提示有问题,可能是系统里面没有安装mesa-utils,安 ...

  9. CSS布局之flexbox

    参考链接: https://www.cnblogs.com/qingchunshiguang/p/8011103.html 练习代码 <!DOCTYPE html> <html la ...

  10. spring mvc @Valid 数据验证

    //对书的单价校验不能是空,价格在20-100之间   @DecimalMax(value = "100", message = "价格不超过100元")   ...