

Selenium3自动化测试【27】Frame的操作 - BlaLeo
source link: https://www.cnblogs.com/starpoint/p/16134915.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本篇文章内容摘要 “ 讲解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;【视频号】:柒哥思维
Recommend
-
37
-
30
前言 在最近使用 vscode 的时候,有时候在 finder 中需要复制一下选中项目的路径,或者需要右键,在 XXX 中打开这种场景,这里记录下如何实现这些自动化的操作。 下面举 2 个我配置的:chestnut:: 复制路径...
-
34
Selenium3的安装
-
42
简介 Appium 是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。 Appium 封装了 Selenium,能够为用户提供所有常见的 JSON 格式的 Selenium 命令以及...
-
20
Selenium-IDE多种方式安装的介绍
-
6
使用Robot机器人框架实现自动化操作 RPA只是一种自动执行重复性任务的方法,这些任务通常由人类使用软件机器人完成。这些通常是在 Web 浏览器、MS Excel、电子邮件客户端等图形用户界面 (GUI) 中完成的任务……开源RPA项目有
-
5
SEO中的实时洞察和实时操作:自动化如何缩小差距 WPJIAN •2019年10月29日 下午9:37• Wordpress SEO 作为SEO...
-
6
IDEA小技巧:回退Reset Frame无法回退的操作
-
5
pytest测试框架也是主流的一个测试框架,推荐使用该框架,对比unnitest框架来说,其效率更高 1.Pytest介绍 pytest测试框架也是主流的一个测试框架,推荐使用该框架,对比unnitest框...
-
8
Selenium3自动化测试【39】单元测试Pytest(2) 原创 pytest测试框...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK