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('')#在第一个框架内定位元素
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就行。如图:

有什么需要补充的或者说的不对的地方请一定要指正出来,谢谢啦。
selenium处理iframe定位于切换问题解决办法的更多相关文章
- python3 + selenium 多iframe(框架)切换
html演示: frame.html: <html> <head> <meta http-equiv="content-type" content=& ...
- selenium中iframe的切换
#第一层是默认层, 第二层是新建标签的层,第三层是百度的那层from selenium import webdriverimport timedriver=webdriver.Chrome()driv ...
- selenium之 定位以及切换frame(iframe)
Set<String> windows = driver.getWindowHandles(); int count = 0; for(String handl ...
- python selenium中iframe切换、window切换方法
一.selenium中iframe切换方法: 方法一:switch_to.frame frame函数中提供了三种定位方法:by index, name, or webelement. driver.s ...
- Selenium定位iframe动态ID
Selenium定位iframe动态ID. 126邮箱实例 买了本虫师的书来学习selenium2自动化测试,然后写第一个实例就遇到了一些坑,好在有热心的网友提供了帮助,解决了问题 要学习seleni ...
- 自动化测试-10.selenium的iframe与Frame
前言 有很多小伙伴在拿163作为登录案例的时候,发现不管怎么定位都无法定位到,到底是什么鬼呢,本篇详细介绍iframe相关的切换 以http://mail.163.com/登录页面10为案例,详细介绍 ...
- 关于iFrame特性总计和iFrame跨域解决办法
1.iframe 定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). HTML 与 XHTML 之间的差异 在 HTML 4.1 Strict DTD 和 XHTML 1. ...
- Python3.x:selenium获取iframe内嵌页面的源码
Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...
- Web自动化测试 五 ----- selenium的等待和切换
一.selenium的三种等待 当执行python的selenium代码时,如果需要定位一个元素或者点击一个元素,需要考虑到网速等多方面原因,导致页面加载速度慢,元素还未加载出来,这样就会导致找不到对 ...
随机推荐
- 修改访问的后缀contant
设置Struts 2处理的请求后缀及Action调用 1.在struts2中默认处理的请求后缀为action,我们可以修改struts.xml 和struts.properties来修改默认的配置,在 ...
- MySQL/MariaDB的锁
本文目录: 1.MariaDB/MySQL事务提交的方式 2.MariaDB/MySQL中的锁简介 2.1 不同存储引擎支持的锁级别 2.2 锁类型 2.3 锁兼容性 3.MyISAM的表级锁(loc ...
- 推荐免费小巧图片大小处理工具--Image Resizer for Windows
开源免费小巧,项目地址:http://imageresizer.codeplex.com/
- IT桔子沙龙之本地生活服务O2O探路者笔记整理
这个沙龙活动侧重于创业融资与投资角度 主持人:真格基金投资分析师顾女士;E-mail:grace@zhenfund.com;新浪微博:@顾三小姐 赞助商七牛云的服务宣传:静态资源托管:上传下载全网加速 ...
- js对象属性值为对象形式取值方式
console.log(rowData);//取带点的属性值 console.log(rowData['layoutPipegallery.pipegallerycode']);//取带点的属性值
- 使用Java API连接和操作HBase数据库
创建的数据库存储如下数据 表结构 java代码 public class HbaseTest { /** * 配置ss */ static Configuration config = null; p ...
- Django中数据库表的关联与创建(语言:python)
首先选择选用的数据库,(本人选用django(1.11.8版本)) 在主项目settings中操作如下: DATABASES = { 'default': { 'ENGINE': 'django.db ...
- Manjaro 安装后的配置
1. 将本地数据包与远程数据包同步 sudo pacman -Syy 默认manjaro是没有同步数据包的,也就是说,这个时候你执行pacman -S pack_name 会报数据包找不到的错误(wa ...
- 【问题】sql数据库报无效的数据证书,需重新安装
事情的经过: 今天打开sql2014数据库,没有成功运行,但是给我弹出一个"无效的数据证书,需要重新安装!"提示.什么情况.为什么,应该是前一天弄vs导致的.因为升级了vs2017 ...
- mysql 创建用户
以管理员方式打开cmd命令提示符进入MySql的Bin目录下 一.以管理员身份登录mysql 密码不隐藏的登录方式:mysql -u root -p 123456 密码隐藏的登录方式:mysql -u ...