前往小程序,Get更优阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 >Selenium自动化测试-8.iframe处理

Selenium自动化测试-8.iframe处理

作者头像
王大力测试进阶之路
发布2020-03-11 13:03:39
1.9K0
发布2020-03-11 13:03:39
举报
文章被收录于专栏: 橙子探索测试 橙子探索测试

——————·今天距2020年75天·——————

这是ITester软件测试小栈第61次推文

大家好

我是vivi小胖虎

听说很多城市最近的气温急转直下

在生活和行业寒冬的双重夹击中

身心灵与肉都饱受折磨

一个坐标深圳的还在短衣短袖的靓仔

今天踩着七彩祥云沐浴着阳光

又给大家输送新能量啦~

在上一篇: Selenium自动化测试-获取元素属性信息,介绍了如何获取元素的内容、属性、状态信息。写自动化脚本有时会遇到 iframe嵌套页面,这时直接定位是不行的,今天我们介绍怎么处理iframe。

iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架), 作用就是嵌套网页。

以126网易邮箱账号或手机号码输入框为例,我们先按正常定位方法试下能否定位成功。

代码如下:

报错信息如下:

代码语言:javascript
复制
Traceback (most recent call last):
      ......
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=76.0.3809.132)

让我们定位到元素看下到底发生了什么:

我们发现要定位的这个元素在iframe嵌套页面里,我们要操作这个元素,需要先切换到iframe页面,才能正常定位。

代码语言:javascript
复制
<iframe name="" frameborder="0" id="x-URS-iframe1571229605178.6365" scrolling="no" src="https://passport.126.com/webzj/v1.0.1/pub/index_dl2_new.html?cd=https%3A%2F%2Fmimg.127.net%2Fp%2Ffreemail%2Findex%2Funified%2Fstatic%2F2019%2Fcss%2F&amp;cf=urs.126.589bdb88.css&amp;MGID=1571229605178.6365&amp;wdaId=&amp;pkid=QdQXWEQ&amp;product=mail126" style="width: 100%; height: 100%; border: none; background: none;"></iframe>

一、怎么切换到iframe

1.iframe有固定id或name属性。 ①有id属性,且唯一; driver.switch_to.frame('id') ②有name属性,且唯一; driver.switch_to.frame('name')

2.如果是动态id或者没有id和name属性,可以xpath或css定位解决。

检查发现126邮箱id="x-URS-iframexxxxxx" 是动态id, 所以,我们不能直接通过id定位。

我们用之前学过的css定位,代码如下:

邮箱或手机号输入框写入了vivi,表示切换iframe,定位成功。

这里再补充下xpath其他的三种方法: 1. contains(a, b) 如果a中含有字符串b,则返回true,否则返回false。 driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]") 2. starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false。 driver.find_element_by_xpath("//div[starts-with(@id,'btn-attention')]") 3. ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false。 driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]")

实现代码如下:

二、从iframe切回到主文档

切换到iframe框架内后,就不能直接定位主文档元素了,比如切换到iframe之后,再定位126邮箱页面的企业邮箱链接。

代码如下:

结果报错,因为在iframe框架内,没有切换到主文档,不能直接定位到主文档的元素。

处理办法是退回主文档,进行定位,使用:driver.switch_to.default_content()。

运行之后,切换到iframe框架,然后再切回主文档,定位企业邮箱链接。

三、多层嵌套iframe的操作

有时候页面会有多层嵌套iframe,这时候我们需要层层切换iframe

代码语言:javascript
复制
<iframe src="" id="index_main" name="main" scrolling="Yes" noresize="noresize">
  <iframe id="Editor1" src="" frameborder="0" scrolling="no" >
    <iframe id="eWebEditor" width="100%" height="100%" scrolling="yes"                                  frameborder="0" src="">
       <input type="text" id="TeacherTxt" name="Teacher" size="12"                                              maxlength="12" >
    </iframe>
  </iframe>
</iframe>

比如这个源码中,有三层iframe嵌套,如果我们想定位到id="eWebEditor"这一层,代码如下:

代码语言:javascript
复制
driver.switch_to.frame("inden_main")
driver.switch_to.frame("Editor1")
driver.switch_to.frame("eWebEditor")
代码语言:javascript
复制

那么如果我们又想切换到上一层呢,driver.switch_to.parent_frame(),表示从当前的子iframe切换到父iframe,即上级iframe。

代码语言:javascript
复制
# 切换到第一层iframe
driver.switch_to.frame("inden_main")
# 切换到第二层iframe
driver.switch_to.frame("Editor1")
切换到第三层iframe
driver.switch_to.frame("eWebEditor")
重新切换到父iframe,即切换到第二层iframe
driver.switch_to.parent_frame()

总结:遇到iframe时,需要先切换到iframe框架内,再进行定位;多层嵌套的,层层切换iframe;在iframe框架内,定位主文档的元素,需切回到主文档再定位。

下一篇将介绍定位一组元素,敬请期待~

最后是今天的分享:Python接口测试框架实战与自动化进阶视频及资料

ITester软件测试小栈今日分享

分享内容

Python接口测试框架实战与自动化进阶视频及资料

领取方式

微信公众号后台回复:20191013

有图有真相

以上

That‘s all

ITester软件测试小栈

本文参与  腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-05,如有侵权请联系  cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与  腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
相关产品与服务
腾讯企业邮
腾讯企业邮(Tencent Exmail)是腾讯基于多年海量用户邮件系统研发和运营经验,为企业量身订造的一套办公用邮箱系统。稳定、简洁和快速,整合了丰富的企业应用,涵盖资源共享、消息发布、组织管理等方面。腾讯企业邮和微信生态深度整合,为您提供便捷高效的移动邮件解决方案。
产品介绍
精选特惠 用云无忧
领券
问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

代做工资流水公司九江签证流水代办离职证明费用烟台银行流水PS公司广州工资代付流水代办郑州银行流水报价宜昌代办车贷工资流水湘潭办流水账单泰州流水报价蚌埠代开自存银行流水杭州房贷工资流水 图片贵阳背调流水价格唐山签证银行流水 办理包头房贷流水开具银川个人工资流水 打印临沂代办房贷工资流水保定打印背调工资流水惠州查企业贷流水银行流水账打印长沙办理签证银行流水淮安代办签证流水湖州银行流水电子版代开桂林银行流水电子版样本流水开具漳州房贷收入证明样本厦门打印企业对公流水镇江银行流水修改开具衡阳办银行流水电子版泰州车贷流水代做信阳查询车贷银行流水孝感查车贷工资流水香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化