程序笔记   发布时间:2022-07-14  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Selenium自动化测试-8.iframe处理大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

又给大家输送新能量啦~

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

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

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

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

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

 代码如下:          

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

报错信息如下:

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)  

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

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

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

<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属性࿰c;且唯一;

driver.switch_to.frame('id')

②有name属性࿰c;且唯一;

driver.switch_to.frame('name')   

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

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

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

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

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

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

这里再补充下xpath其他的三种方法:

1. contains(a, b) 如果a中含有字符串b࿰c;则返回true࿰c;否则返回false。

driver.find_elemenT_By_xpath("//div[contains(@id, 'btn-attention')]")

2. starts-with(a, b) 如果a是以字符串b开头࿰c;返回true࿰c;否则返回false。

driver.find_elemenT_By_xpath("//div[starts-with(@id,'btn-attention')]")

3. ends-with(a, b) 如果a是以字符串b结尾࿰c;返回true࿰c;否则返回false。

driver.find_elemenT_By_xpath("//div[ends-with(@id, 'btn-attention')]")  

 实现代码如下:

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

二、从iframe切回到主文档

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

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

代码如下:          

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

             

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

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

             

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

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

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

三、多层嵌套iframe的操作

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

<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>

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

driver.switch_to.frame("inden_main")driver.switch_to.frame("Editor1")driver.switch_to.frame("eWebEditor")那么如果我们又想切换到上一层呢࿰c;driver.switch_to.parent_frame()࿰c;表示从当前的子iframe切换到父iframe࿰c;即上级iframe。​​​​​​​
# 切换到第一层iframedriver.switch_to.frame("inden_main")# 切换到第二层iframedriver.switch_to.frame("Editor1")切换到第三层iframedriver.switch_to.frame("eWebEditor")重新切换到父iframe࿰c;即切换到第二层iframedriver.switch_to.parent_frame()

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

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

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

 

感谢每一个认真阅读我文章的人࿰c;看着粉丝一路的上涨和关注࿰c;礼尚往来总是要有的࿰c;然不是什么很值钱的东西࿰c;如果你用得到的话可以直接拿走:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

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

 ⑤ Python学习路线图(告别不入流的学习)

 在我的QQ技术交流群里(技术交流和资源共享࿰c;广告进来腿给你打断)

可以自助拿走࿰c;群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

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

大佬总结

以上是大佬教程为你收集整理的Selenium自动化测试-8.iframe处理全部内容,希望文章能够帮你解决Selenium自动化测试-8.iframe处理所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。