Web UI自动化测试基础——元素定位(三)
本篇文章整理了元素定位的基础知识——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自动化测试基础——元素定位(三)的更多相关文章
- Web UI自动化测试基础——元素定位(二)
本篇文章整理了元素定位的基础知识——多个元素定位方式. 一.多个元素定位方式简介 同单个元素定位方式相同,多个元素定位方式也有与之对应的8种方式,即id.name.class_name.tag_nam ...
- Web UI自动化测试基础——元素定位(一)
本篇文章整理了元素定位的基础知识——单个元素定位方式. 一.单个元素定位方式简介 1. find_element_by_id 通过元素的id属性进行定位.以百度首页为例,首先进入https://www ...
- [原创]浅谈Web UI自动化测试
[原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...
- 简单Web UI 自动化测试框架 pyse
WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...
- 【转】Web UI自动化测试原理
目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件,模拟用户输入,点击等 ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- web自动化测试(java)---元素定位
和python类似,java-selenium也提供了很多种元素定位的方法,具体如下: findElement(By.id()) findElement(By.name()) findElement( ...
- python ui自动化之元素定位和常用操作
做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...
- App元素定位三种方法
来自博客: http://testingpai.com/article/1595507262082 以下方法操作前必须确保有手机设备连入电脑,检测是否有手机连入命令 adb devices 第一种:A ...
随机推荐
- Linux系统,无法收到组播消息的问题
解决办法: 做以下3个修改 1. /etc/sysctl.conf 文件中的 net.ipv4.conf.all.rp_filter 设置成0 2. sysctl -w net.ipv4.conf.a ...
- u-boot中bss段的使用
近日在调试uboot时,发现了一个现象,即在relocate_code前如果给未初始化或者初始化值为0的变量赋值的话,则在relocate_code后程序无法正常执行.经过学习,恶补如下知识 BSS段 ...
- 前端每日实战:141# 视频演示如何用 CSS 的 Grid 布局创作一枚小狗邮票
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/BOeEYV 可交互视频 此视频是可 ...
- 【转】h5页面audio不自动播放问题
1.audio:html5音频标签 <audio loop src="/photo/aa.mp3" id="audio" autoplay preload ...
- fail2ban CentOS7安装
一.安装1.安装yum install shorewall gamin-python shorewall-shell shorewall-perl shorewall-common python-in ...
- Java——序列化 反序列化
记录一下: 先粘两个比较繁琐的方法: put: public void putSerializableObject(String key, Object value, int expireTime) ...
- 使用swagger生成API说明文档
使用swagger生成API说明文档本文由个人总结,如需转载使用请标明原著及原文地址没有导出!!!!!不要整天给我留言导出呢,那个是你们百度的时候下面的推荐文章带的关键字,要做导出从swagger取数 ...
- Jackson和fastjson简单用法及性能对比
背景: Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson.fastjson是阿里做的国有开源Java工具包,jackson是spring mvc内置的json转换 ...
- 文件操作:rewind()
函数名: rewind() 功 能: 将文件内部的位置指针重新指向一个流(数据流/文件)的开头 注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动 ...
- 编译依赖ndt_gpu库的包,遇到Eigen报错
背景: 使用NDT建图,帧率比较慢,打算使用gpu加速计算. ndt_gpu是一个使用gpu加速ndt计算的库,首先在工作空间编译这个包. 然后在ndtMap包中链接这个库,其CMakelists.t ...