selenium处理iframe定位于切换问题解决办法
首先还是围绕以下几个方面来看:
1.什么是iframe?
2.为什么我们要定位iframe?
3.我们怎样定位iframe,与切换iframe?
1.什么是iframe?
♦ b/s架构都使用iframe,官方的定义是这样的:【iframe 元素会创建包含另外一个文档的内联框架(即行内框架)】。什么意思呢,就像是我们的某个主页,里面有好多小模块,每 个 小模块用这个叫做iframe的东西分开来,方便维护,也方便开发各自开发各自的部分,互不相干。
♦ 通常不在同一个iframe分为两种情况:一种是包含,一种是平级。
2.为什么我们要定位iframe?
♦ 介于iframe是独立开的一个一个的小模块,就像是船舱的特性,所以iframe就行船舱的舱门,想要进入船舱去找东西,就必须先进入舱门,所以当元素在不同的iframe时,就必须先进入到元素所在地的iframe之后才能定位到元素。
3.我们怎样定位iframe,与切换iframe?
♦ iframe几种情况:1.包含关系也就是嵌套 。2.平级关系
3.1.定位iframe几种方式:1.用iframe中的ID来定位 2.用iframe中的name来定位 3.用xpath来定位 4.用css来定位
♦ 首先我们用self.driver.switch_to.frame()这个方法来进入iframe框架,如果iframe是包含关系,需要从最外面的iframe一层一层进入。
self.driver.switch_to.frame()
♦1.用iframe中的ID来定位
self.driver.switch_to.frame('noticeCheckWin')
♦2.用iframe中的name来定位
self.driver.switch_to.frame('noticeCheckWin')
♦3.用xpath来定位
self.frame2 = self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]')self.driver.switch_to.frame(self.frame2)#定位动态的iframe,可以把动态的部分删了然后再用xpath定位
♦4.用css来定位
self.frame3 = self.driver.find_element_by_css_selector('body > div.h-main > div.h-screen.layout > div.h-screen-con > iframe')#也可以查出所有的路径用下标切出来
self.driver.switch_to.frame(self.frame3)
3.2.退出iframe
♦ 退出iframe有两种形式:1.退出所有的iframe切换到主文档 2.退回到父级iframe
♦1.退出所有的iframe切换到主文档
self.driver.switch_to.default_content()
♦2.退回到父级iframe
switch to.parent_frame()#退回到自己想要的层级
4.场景:1.包含关系也就是嵌套 。2.平级关系
♦ 包含关系也就是嵌套 ,一个iframe的层次在另一个iframe之下。
♦ 4.1.switch to.parent_frame()#退回到自己想要的层级
self.driver.switch_to.frame('noticeCheckWin')#进入一个iframe。
time.sleep(10)
self.driver.find_element_by_id('startProcess').click()#进入发起流程
time.sleep(10)
self.frame2=self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]')
self.driver.switch_to.frame(self.frame2)#进入第二个iframe
time.sleep(10)
self.driver.find_element_by_id('startProcess').click()#定位元素
self.driver.switch to.parent_frame()#退出第二个iframe
self.driver.find_element_by_id('account_pass').send_keys('1')#在第一个框架内定位元素
self.driver.switch to.parent_frame()#退出第一个iframe
♦1.退出所有的iframe切换到主文档
self.driver.switch_to.frame('noticeCheckWin')#进入一个iframe。
time.sleep(10)
self.driver.find_element_by_id('startProcess').click()#进入发起流程
time.sleep(10)
self.frame2=self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/iframe[3]')
self.driver.switch_to.frame(self.frame2)#进入第二个iframe
time.sleep(10)
self.driver.find_element_by_id('startProcess').click()#定位元素
self.driver.switch_to.default_content()#直接退出第一个iframe
注意:在遇到动态的ID或者name时我们直接把动态ID或者name删掉重新copy,xpath或者,css就行。如图:
有什么需要补充的或者说的不对的地方请一定要指正出来,谢谢啦。
转载于:https://www.cnblogs.com/insane-Mr-Li/p/9086997.html
selenium处理iframe定位于切换问题解决办法相关推荐
- Linux-虚拟机中大小写不停切换问题解决办法
1.问题原因 导致虚拟机中大小写不停的切换问题的原因:是真机与虚拟机大小写切换不同步. 2.解决方案 解决方案:按CAPSLOCK键将真机与虚拟机大小写切换步伐一致即可. 例如:如果真机中大写锁定是关 ...
- firebox安装selenium和firebug各种问题解决办法
selenium无法录制脚本以及firebug安装时报错问题解决办法 最进打开电脑想用selenium,可是发现不好使了,很奇怪.所以我就都卸载掉重新开始,遇到了很多问题,现在把这几种情况总结出来,供 ...
- 爬虫之selenium标签页的切换
爬虫之selenium标签页的切换 当selenium控制浏览器打开多个标签页时,如何控制浏览器在不同的标签页中进行切换呢?需要我们做以下两步: 获取所有标签页的窗口句柄 [获取窗口句柄,通过窗 ...
- ubuntu oracle 10g 安装,Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法
PS:Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法正常情况下,完美无错..如果遇到问题,也有解决办法 1.安装前准备工作 1.1 到oracle官网下载适合自己电脑 ...
- java文件下载至linux乱码,JAVA 文件下载乱码问题解决办法
页面设置隐藏的iframe 页面下载按钮 id="btnDown" href="javascript:void(download('btnDown'))" &g ...
- word无法自动修复计算机怎么办,电脑Word问题解决办法
电脑Word问题解决办法 "microsoft office Word 无法执行语言识别"的解决办法 Word可以使用,打开后总会出现错误提示如下: Microsoft Offic ...
- 光遇为什么显示服务器连接错误,光遇服务器错误怎么办 光遇服务器错误问题解决办法-游侠手游...
光遇服务器错误怎么办?昨天晚上很多玩家正在开心的跑图,结果遇到了服务器错误的问题,大家可能不知道是怎么回事,接下来就和小编一起来看看遇到这个问题该怎么办! 光遇服务器错误问题解决办法 根据玩家反馈今早 ...
- 远程连接自动断开的问题解决办法 screen
远程连接自动断开的问题解决办法 文章目录 1. 问题描述 2. 解决办法 2.1. screen解决方案 3. screen详解 3.1 安装screen 3.2 创建一个新的窗口 3.3 常用的命令 ...
- 关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法
关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法 最近上网买了一款STC8A8K64S4A12最小系统版学习, ...
最新文章
- GPU/DRM 简介
- 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类
- python批量给文件命名为001,002,...【亲测有效】
- Android Cursor类的概念和用法
- oracle 表空间-用户-授权-表创建
- mybatis 中SQLServer 和 mysql 模糊查询 不同点
- 数据湖之iceberg系列(一)iceberg能做什么
- INF DestinationDirs Section
- 如何创建比C语言更快的编程语言?
- MySQL5.7 semi-sync replication功能增强
- Snabbdom(虚拟dom-4-init函数)
- kvm安装android虚拟机,qemu-kvm安装虚拟机
- java 线程池 连接池_浅析Tomcat高并发之连接池、线程池
- 190503每日一句
- u盘被写保护怎么解除,如何去掉u盘写保护?
- html左边导航栏点击下拉显示内容,html导航栏-简单运用display设置左拉和下拉导航栏...
- DNS区域(ZONE)相关概念
- Chrome免安装版制作
- 非洲正在打造一个完全不同的人工智能产业
- 已经买好了域名后怎么建立一个网站
热门文章
- 中国锂电池行业发展机遇及营销策略前景研究报告2021-2027年版
- 全球及中国微生物气溶胶采样器行业十四五”发展规划及运营前景研究报告2021年版
- 中国氢能行业发展现状与投资规划深度研究报告2022-2027年版
- 入世展望对话国际农民丰收节贸易会 农产品国贸谋定展望
- centos solr 部署到 tomcat 上
- 有什么值得推荐的Java Web练手项目?
- 新概念英语(1-61)A bad cold
- 1.1.2 以Web Host方式寄宿Web API
- runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...
- JAVA的内存模型及结构