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代码时,如果需要定位一个元素或者点击一个元素,需要考虑到网速等多方面原因,导致页面加载速度慢,元素还未加载出来,这样就会导致找不到对 ...
随机推荐
- java程序的内存分配(一)
首 页 阅览室 馆友 我的图书馆 帐号 java程序的内存分配(一) 收藏 JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据J ...
- Webapck项目开发基本构建及配置
1.创建项目文件夹 myapp 手动创建myapp,或mkdir myapp 2.cd myapp 3.npm init (初始化项目) 4.一路回车(关于项目信息的填写,可以不写,一路回车即可) 可 ...
- VirtualBox虚拟机网络设置(四种方式)
原文地址: https://www.douban.com/group/topic/15558388/ VirtualBox的提供了四种网络接入模式,它们分别是: 1.NAT 网络地址转换模式(NAT, ...
- MacOS多版本Python切换方案
1. 安装homebrew 官网 http://brew.sh/index_zh-cn.html 打开终端,在终端中粘贴如下脚本 /usr/bin/ruby -e "$(curl -fsSL ...
- 五年级--python函数高级运用
一.装饰器 二.迭代器 三.生成器 四.练习 一.装饰器 1.1 闭包函数用法 # 需求: # 执行一个函数前需要认证是否登录,如果登录则不需再登录. # 只认证一次,后续操作无需认证 # 要求认证使 ...
- HTML5这个概念的解释
关于HTML5这个概念我一直很多困惑,稍微总结一下. 从HTML说起,HTML作为一个标记语言,通过这种标记定义了一个网页的dom tree,也定义了网页的结构,然后CSS定义了在这个结构基础上的样式 ...
- python笔记:#004#注释
注释 目标 注释的作用 单行注释(行注释) 多行注释(块注释) 01. 注释的作用 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性 02. 单行注释(行注释) 以 # 开头,# ...
- 高性能网络通信框架 HP-Socket
HP-Socket 详细介绍 HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/ ...
- ResultSet只返回一行数据的原因
写之前,先告戒一下自己......写代码一定要细心,自己写的即使是非常简单的地方也要细心,不能自我感觉太良好,那往往可能会有些bug在等着你...... 注意事项: 1.当你为了查看数据库中是否存在某 ...
- jsoncpp linux平台编译和arm移植
下载 http://sourceforge.net/projects/jsoncpp/ 或者 http://download.csdn.net/detail/chinaeran/8631141 Lin ...