本篇文章内容摘要 “ 讲解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。案例描述如下:

  1. 外部页面有个指向Baidu的链接;

  2. 内嵌的页面是通过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的操作的更多相关文章

  1. Selenium3自动化测试【17】元素定位之Link定位

    Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...

  2. Selenium3自动化测试【20】CSS定位元素

    CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...

  3. 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

    1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...

  4. Selenium3自动化测试【29】文件上传

    日常在访问页面时,文件上传与下载操作也常常用到,因此在Web自动化测试中也会遇到文件上传的情况.针对上传功能,WebDriver并没有提供对应的方法.针对上传文件的场景主要有两种解决思路: 同步视频知 ...

  5. IOS 杂笔-12(类别de巧用 有便于Frame的操作)

    在实际开发中很多时候我们都为了控件frame的操作焦头烂额. 例如:我们只想要获取view的width. 我们可以这么操作:view.frame.size.width 有时我们想要改变view的wid ...

  6. Selenium3自动化测试【18】XPath定位元素(2)

    层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...

  7. 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)

    1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...

  8. 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)

    1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...

  9. IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退

    大家在Debug程序的时候,是否遇到过因为"下一步"按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有"回到上一步"这样的操作呢? 在IDEA中就提供了 ...

随机推荐

  1. Ubuntu 11.04 LAMP+JSP环境安装过程

    安装LAMP命令:sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysq ...

  2. Parrot Linux安装教程

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.Parrot Linux介绍 Parrot 是一个由开发人员和安全专家组成的全球社区,他们共同构建一个共享的工具框架,使他们的工作更轻松.标准 ...

  3. winform 代码生成textbox ,checkbox

    参考地址:https://jingyan.baidu.com/article/380abd0a6b80701d90192cde.html 首先搭建好Winform项目框架后,创建窗体页面后自行布局 这 ...

  4. Spark—GraphX编程指南

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...

  5. bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树)

    bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树) bzoj Luogu 题目描述略(太长了) 题解时间 切掉一个点,连通性变化. 上圆方树. $ \sum |S| ...

  6. CyclicBarrier和CountDownLatch区别

    这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧 CyclicBarrier和C ...

  7. 202A 202B 202C 202D 202E字符的作用及解释

    这里你会发现在值的前后有2个\u开头的控制字符:转换网址:http://www.jsons.cn/utf8/ 解释:https://blog.csdn.net/haiyan1111/article/d ...

  8. Django中的信号signals

    什么是信号? jango的信号机制就是事件驱动模型,一个事件可以被多个函数注册,当一个动作行为触发了这个事件后,这个事件所对应的函数便执行相应的操作; 内置信号; django 内部有些定义好的sig ...

  9. springboot-mail发邮件,不需要邮件服务器

    很简单 步骤走起-> 1.需要一个邮箱账号,我以163邮箱为例,先开启第三方服务后获得密码,后面用来邮箱登录 2.加入mail 依赖 3.properties配置账号和第三方服务密码(不是邮箱密 ...

  10. 惯性传感器(IMU)

    近两年来,车联网.自动驾驶.无人驾驶.汽车智能化.网联化等成为了汽车行业的热点话题,未来汽车一定是朝着安全.可靠及舒适的方向发展.而这一切背后的发展都离不开传感器的作用,今天我们就来聊聊用途越来越广的 ...