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代码时,如果需要定位一个元素或者点击一个元素,需要考虑到网速等多方面原因,导致页面加载速度慢,元素还未加载出来,这样就会导致找不到对 ...
随机推荐
- iframe实现局部刷新和回调(转)
今天做项目遇到一个问题.就是提交表单的时候,要在后台验证用户名是否存在和验证码是否正确. 当验证码或者用户名存在的时候.在后台弹窗提示.可页面原本file里面符合要求的值刷新没了.用户体验不好.因为用 ...
- Web 前台优化
大型网站--前端性能优化和规范 2013-10-28 09:00 by 贤达, 2769 阅读, 10 评论, 收藏, 编辑 Web性能涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到 ...
- [转]用python 10min手写一个简易的实时内存监控系统
简易的内存监控系统 本文需要有一定的python和前端基础,如果没基础的,请关注我后续的基础教程系列博客 文章github源地址,还可以看到具体的代码,喜欢请在原链接右上角加个star 腾讯视频链接 ...
- 接口和抽象类的区别(JDK1.8)
1.一个类只能进行单继承,但可以实现多个接口. 2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法: 接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的 ...
- HTML编码和CSS编码会遇到的问
http://codeguide.bootcss.com/#html-syntax 参考链接 属性顺序 HTML 属性应当按照以下给出的顺序依次排列,确保代码的易读性. class id, name ...
- 第二章 ArrayList源码解析
一.对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器 往ArrayList中添加对象:即add(E)方法 获取ArrayList中的单个对象:即get(int index) ...
- IAAS-虚拟化技术组件介绍
虚拟化技术组件涉及众多,下面对一些组件所处的层级以及定位做个简单的汇总介绍,部分信息来自于网络整理,如有不准确之处,请指正.
- 《T-SQL查询》读书笔记Part 3.索引的基本知识
索引优化是查询优化中最重要的一部分,索引是一种用于排序和搜索的结构,在查找数据时索引可以减少对I/O的需要:当计划中的某些元素需要或是可以利用经过排序的数据时,也会减少对排序的需要.某些方面的优化可以 ...
- Java多线程问题
一. Java多线程: Java给多线程编程提供了内置的支持.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线 ...
- vue中keep-alive的用法
1.keep-alive的作用以及好处 在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-al ...