Selenium3自动化测试【27】Frame的操作
本篇文章内容摘要 “ 讲解Python3+Selenium3如何处理Frame窗体”
同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890;【视频号】:柒哥思维
Frame窗体
我们在使用Selenium定位页面元素的时候,有时会遇到定位不到的问题,在页面上看到元素就在那儿,用浏览器的开发者工具也能够看到,而代码运行就是定位不到。当遇到这种情况时,很有可能是有Frame存在。
Frame标签有Frameset、Frame、IFrame三种,Frameset跟其他普通标签没有区别,不会影响到正常的定位。在页面中我们经常能看到Frame或IFrame(Frame是整个页面的框架,IFrame是内嵌的框架),由于WebDriver定位元素时只能在一个页面上定位,所以对于IFrame这样的情况,WebDriver是无法直接定位到元素的。Selenium有对应的方法对Frame进行操作。
WebDriver提供了switch_to.frame()方法来切换frame。
switch_to.frame(reference)
切换到IFrame中
青葱岁月,弹指间,毕业季到来。恍惚昨天还是那稚气未脱懵懂的样子,才觉时光如此短暂。青葱岁月,弹指间,毕业季到来。恍惚昨天还是那稚气未脱懵懂的样子,才觉时光如此短暂。
通过案例来讲解如何切换Iframe。案例描述如下:
外部页面有个指向Baidu的链接;
内嵌的页面是通过Iframe实现的,嵌套的Bing首页。
案例实现iframe.html页面的代码如下:
<html>
<body>
<div class="alert" align="center">The link
<a class="alert-link" href="http://www.baidu.com">
baidu
</a>
</div>
<div class="row-fluid">
<div class="span-ifrme" align="center">
<h4 align="center">iframe</h4>>
<iframe id="iname" name="nf" src="http://cn.bing.com" width="800" height="600"></iframe>>
</div>
</div>
</body>
</html>
iframe.html页面呈现效果如图所示。

案例要求:
单击Bing搜索页的搜索框完成关键字的搜索。iframe.html代码中iframe标签的id等于"INAME"。实现的代码如下:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("file:///D:/iframe.html")
# 案例1:操作iframe
# 切换窗体iframe(id:iname,name:nf)
# 使用switch_to_frame,会在该方法上出现下划线,不再推荐使用
# driver.switch_to_frame("iname") #不再推荐使用
driver.switch_to.frame("iname")
driver.find_element_by_xpath("//input[@id='sb_form_q']").send_keys("bella")
driver.find_element_by_xpath("//input[@id='sb_form_go']").click()
sleep(2)
driver.quit()
注解
需要特别说明的是:switch_to_frame()方法,有些人还在使用它,但是写的时候在这样写的时候会发现,这行代码被画上了删除线,原因是这个方法已经被淘汰了,之后很有可能会不支持,因此建议的写法是switch_to.frame()。
切换到主窗体
当切换到子窗体Frame中之后,便不能继续操作主窗体中的元素,这时如果要操作主窗体中的元素,则需切回主窗体。
针对本节的案例,就是当对Bing搜索页完成操作后,如想单击外部的Baidu链接,则需要切换到主窗体。
切换到主窗体的方法是
driver.switch_to.default_content()。
代码实现如下。
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("file:///D:/iframe.html")
driver.switch_to.frame("iname")
driver.find_element_by_xpath("//input[@id='sb_form_q']").send_keys("bella")
driver.find_element_by_xpath("//input[@id='sb_form_go']").click()
sleep(2)
driver.switch_to.default_content() #switch_to.default_content() 跳到最外层
driver.find_element_by_xpath("//a[@href='http://www.baidu.com']").click()
sleep(2)
driver.quit()
段落引用如果遇到嵌套的Frame,由子窗体切换到它的上一级父窗体,则可以使用switch_to.parent_frame()方法。
针对本节的案例,就是当对Bing搜索页进行了操作后,如想单击外部的Baidu链接,其实也是切换到它的父级,因此也可通过switch_to.parent_frame()方法实现,代码如下:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("file:///D:/iframe.html")
driver.switch_to.frame("iname")
driver.find_element_by_xpath("//input[@id='sb_form_q']").send_keys("bella")
driver.find_element_by_xpath("//input[@id='sb_form_go']").click()
sleep(2)
driver.switch_to.parent_frame() # 跳到iframe的上一级
driver.find_element_by_xpath("//a[@href='http://www.baidu.com']").click()
sleep(2)
driver.quit()
如果你觉的文章读的不过瘾,可以查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
https://ke.qq.com/course/3172187?tuin=9c43f38e
【测试全系列视频课程】请点击我哦.....
地址:https://ke.qq.com/course/2525707?tuin=9c43f38e
图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html)!

同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890;【视频号】:柒哥思维
Selenium3自动化测试【27】Frame的操作的更多相关文章
- Selenium3自动化测试【17】元素定位之Link定位
Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...
- Selenium3自动化测试【20】CSS定位元素
CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...
- 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...
- Selenium3自动化测试【29】文件上传
日常在访问页面时,文件上传与下载操作也常常用到,因此在Web自动化测试中也会遇到文件上传的情况.针对上传功能,WebDriver并没有提供对应的方法.针对上传文件的场景主要有两种解决思路: 同步视频知 ...
- IOS 杂笔-12(类别de巧用 有便于Frame的操作)
在实际开发中很多时候我们都为了控件frame的操作焦头烂额. 例如:我们只想要获取view的width. 我们可以这么操作:view.frame.size.width 有时我们想要改变view的wid ...
- Selenium3自动化测试【18】XPath定位元素(2)
层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...
- 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...
- 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...
- IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退
大家在Debug程序的时候,是否遇到过因为"下一步"按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有"回到上一步"这样的操作呢? 在IDEA中就提供了 ...
随机推荐
- 高级IO模型之kqueue和epoll
目录 简介 block IO和nonblocking IO IO多路复用和select poll epoll kqueue epoll和kqueue的优势 简介 任何一个程序都离不开IO,有些是很明显 ...
- Floyd算法 解决多元汇最短路问题
接下来是图论问题求解最短路问题的最后一个,求解多元汇最短路问题 我们之前一般都是问1-n的最短路径,这里我们要能随便去问i到j的最短路径: 这里介绍一下Floyd算法:我们只有一个d[maxn][ma ...
- Java将彩色PDF转为灰度
本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGrayConverter.toGrayPdf()方法转为文档页面 ...
- Java study 4
JAVA 学习第四天 今日学习内容 快捷键.复习.注释.字面量 快捷键 学习地址:IJ快捷键 复习 jdk下载.安装.部署环境.第一个Java程序入门学习,环境变量path 注释 注释:顾名思义就是用 ...
- Prometheusbu部署使用-1
Prometheus+grafana部署使用 主机列表: 192.168.161.130 : Prometheus 192.168.161.128 : node-1 192.168.161.129 : ...
- 假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?
使用 keys 指令可以扫出指定模式的 key 列表. 对方接着追问:如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会 有什么问题? 这个时候你要回答 redis 关键的一个特 ...
- cookie可设置哪些属性?httponly?
chrome控制台的application下可查看: cookie name 字段为一个cookie的名称. value 字段为一个cookie的值. domain 字段为可以访问此cookie的域名 ...
- 什么是内部类? Static Nested Class 和 Inner Class的不同?
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员. 内部类作为其外部类的一个成员,因此内部类可以直接访问外部类的成员.但有一点需要指出:静态成员不能访问非静态成员,因此静态内部类不能访问外部 ...
- @RequestMapping 注解?
该注解是用来映射一个URL到一个类或一个特定的方处理法上.
- String s = new String("xyz");创建了几个字符串对象?
两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象.