本篇文章整理了元素定位的基础知识——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. (转) linux实现ssh免密码登录的正确方法

    方法/步骤 验证ssh远程登录,未作免密处理的两台机器,登录时,是需要输入密码的 本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件 在相应的目录下查看生成的密钥文件,其中:id_r ...

  2. threading.local作用及原理

    先看下应用: import threading from threading import local import time obj = local() def task(i): obj.xxxxx ...

  3. python基础练习题7

    1.创建Person类,属性有姓名.年龄.性别,创建方法personInfo,打印这个人的信息2.创建Student类,继承Person类,属性有学院college,班级class,重写父类perso ...

  4. gdb命令小结

    GDB命令小结 gdb <filename> : 调试指定程序文件 r : run 的简写,运行被调试程序, 如果此前没有下过断点,则执行完整个程序:如果有断点, 则程序暂停在第一个可用断 ...

  5. 一种循环C字符数组的骚操作

    #include <stdio.h> #include <stdlib.h> int main() { char wenwa[] = "程劲小盆友在做什么" ...

  6. 正则化方法L1 L2

    转载:http://blog.csdn.net/u012162613/article/details/44261657(请移步原文) 正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者ov ...

  7. shiro框架学习-7- Shiro权限控制注解和编程方式

    讲解权限角色控制 @RequiresRoles, @RequiresPermissions等注解的使用和编程式控制 配置文件的方式 使用ShiroConfig 注解方式 @RequiresRoles( ...

  8. 6.LINUX32位和64位系统的区别和选择

  9. UML——用例视图

    用例视图中交互功能部分被称为用例.   参与者   作为外部用户与系统发生交互作用,这是参与者的特征. 在系统的实际运作中,一个实际用户可能对应系统的多个参与者.不同的用户也可以只对应于一个参与者,从 ...

  10. 用flask进行web开发

    经理管理一个餐厅,推出每天都有特色菜的营销模式.他想根据一周中的每一天有一种特色菜. 客人想知道当天的特色菜是什么.另外再添加一个介绍页面.bios路径下,显示餐厅主人,厨师,服务生的简介. pyth ...