首先还是围绕以下几个方面来看:

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定位于切换问题解决办法相关推荐

  1. Linux-虚拟机中大小写不停切换问题解决办法

    1.问题原因 导致虚拟机中大小写不停的切换问题的原因:是真机与虚拟机大小写切换不同步. 2.解决方案 解决方案:按CAPSLOCK键将真机与虚拟机大小写切换步伐一致即可. 例如:如果真机中大写锁定是关 ...

  2. firebox安装selenium和firebug各种问题解决办法

    selenium无法录制脚本以及firebug安装时报错问题解决办法 最进打开电脑想用selenium,可是发现不好使了,很奇怪.所以我就都卸载掉重新开始,遇到了很多问题,现在把这几种情况总结出来,供 ...

  3. 爬虫之selenium标签页的切换

    爬虫之selenium标签页的切换 当selenium控制浏览器打开多个标签页时,如何控制浏览器在不同的标签页中进行切换呢?需要我们做以下两步: 获取所有标签页的窗口句柄    [获取窗口句柄,通过窗 ...

  4. ubuntu oracle 10g 安装,Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法

    PS:Ubuntu 12.04 安装Oracle 10g 全过程(完美)及问题解决办法正常情况下,完美无错..如果遇到问题,也有解决办法 1.安装前准备工作 1.1 到oracle官网下载适合自己电脑 ...

  5. java文件下载至linux乱码,JAVA 文件下载乱码问题解决办法

    页面设置隐藏的iframe 页面下载按钮 id="btnDown" href="javascript:void(download('btnDown'))" &g ...

  6. word无法自动修复计算机怎么办,电脑Word问题解决办法

    电脑Word问题解决办法 "microsoft office Word 无法执行语言识别"的解决办法 Word可以使用,打开后总会出现错误提示如下: Microsoft Offic ...

  7. 光遇为什么显示服务器连接错误,光遇服务器错误怎么办 光遇服务器错误问题解决办法-游侠手游...

    光遇服务器错误怎么办?昨天晚上很多玩家正在开心的跑图,结果遇到了服务器错误的问题,大家可能不知道是怎么回事,接下来就和小编一起来看看遇到这个问题该怎么办! 光遇服务器错误问题解决办法 根据玩家反馈今早 ...

  8. 远程连接自动断开的问题解决办法 screen

    远程连接自动断开的问题解决办法 文章目录 1. 问题描述 2. 解决办法 2.1. screen解决方案 3. screen详解 3.1 安装screen 3.2 创建一个新的窗口 3.3 常用的命令 ...

  9. 关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法

    关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法 最近上网买了一款STC8A8K64S4A12最小系统版学习, ...

最新文章

  1. GPU/DRM 简介
  2. 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类
  3. python批量给文件命名为001,002,...【亲测有效】
  4. Android Cursor类的概念和用法
  5. oracle 表空间-用户-授权-表创建
  6. mybatis 中SQLServer 和 mysql 模糊查询 不同点
  7. 数据湖之iceberg系列(一)iceberg能做什么
  8. INF DestinationDirs Section
  9. 如何创建比C语言更快的编程语言?
  10. MySQL5.7 semi-sync replication功能增强
  11. Snabbdom(虚拟dom-4-init函数)
  12. kvm安装android虚拟机,qemu-kvm安装虚拟机
  13. java 线程池 连接池_浅析Tomcat高并发之连接池、线程池
  14. 190503每日一句
  15. u盘被写保护怎么解除,如何去掉u盘写保护?
  16. html左边导航栏点击下拉显示内容,html导航栏-简单运用display设置左拉和下拉导航栏...
  17. DNS区域(ZONE)相关概念
  18. Chrome免安装版制作
  19. 非洲正在打造一个完全不同的人工智能产业
  20. 已经买好了域名后怎么建立一个网站

热门文章

  1. 中国锂电池行业发展机遇及营销策略前景研究报告2021-2027年版
  2. 全球及中国微生物气溶胶采样器行业十四五”发展规划及运营前景研究报告2021年版
  3. 中国氢能行业发展现状与投资规划深度研究报告2022-2027年版
  4. 入世展望对话国际农民丰收节贸易会 农产品国贸谋定展望
  5. centos solr 部署到 tomcat 上
  6. 有什么值得推荐的Java Web练手项目?
  7. 新概念英语(1-61)A bad cold
  8. 1.1.2 以Web Host方式寄宿Web API
  9. runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...
  10. JAVA的内存模型及结构