selenium之frame操作
前言
很多时候定位元素时候总是提示元素定位不到的问题,明明元素就在那里,这个时候就要关注你所定位的元素是否在frame和iframe里面
frame标签包含frameset、frame、iframe三种,frameset和普通的标签一样,不会影响正常的定位,而iframe和frame需要进行一些特殊的处理
1.怎么切到frame中(switch_to.frame())
selenium提供了switch_to.frame()方法来切换frame
switch_to.frame(reference)
不得不提到switch_to_frame(),很多人在这样写的时候会发现,这句话被划上了删除线,原因是这个方法已经out了,之后很有可能会不支持,建议的写法是switch_to.frame()
reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象,假设有如下HTML代码 index.html:
<html lang="en">
<head> <title>FrameTest</title> </head> <body> <iframe src="a.html" id="frame1" name="myframe"></iframe> </body> </html>
想要定位其中的iframe并切进去,可以通过如下代码:
from selenium import webdriver
driver = webdriver.Firefox()
driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0
# driver.switch_to.frame("frame1") # 2.用id来定位 # driver.switch_to.frame("myframe") # 3.用name来定位 # driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement对象来定位
通常采用id和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:
- index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
- WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象
举个栗子:
<iframe src="myframetest.html" />
用xpath定位,传入WebElement对象:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))
2.从frame中切回主文档(switch_to.default_content())
切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。
driver.switch_to.default_content()
3.嵌套frame的操作(switch_to.parent_frame())
有时候我们会遇到嵌套的frame,如下:
<html><iframe id="frame1"> <iframe id="frame2" / > </iframe> </html>
1.从主文档切到frame2,一层层切进去
driver.switch_to.frame("frame1")
driver.switch_to.frame("frame2")
2.从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。
driver.switch_to.parent_frame() # 如果当前已是主文档,则无效果
有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。
所以只要善用以下三个方法,遇到frame分分钟搞定:
driver.switch_to.frame(reference)
driver.switch_to.parent_frame()
driver.switch_to.default_content()
补充
另外补充一下,之前曾看到过用点分法来切入嵌套frame的方法,但我试验之后发现并不能定位到frame,如果有同学可以成功,麻烦留言告知一下,用法如下:
driver.switch_to.frame('frame1.0.frame3')
转载于:https://www.cnblogs.com/xiao-qing/p/9399950.html
selenium之frame操作相关推荐
- Selenium经典API操作
Selenium经典API操作 三种等待方式 1.强制等待--sleep(等待时间) time库中的sleep()函数 不管怎么样,让等几秒就等几秒 真正测试的时候不需要死等,只要页面刷新出元素了就可 ...
- python表单切换_python3 selenium自动化 frame表单嵌套的切换方法
在web自动化测试中,测试工程师经常会碰到frame表单嵌套结构,直接定位会报错,我们需要切换表单后才能成功定位. 我拿QQ邮箱登录来作为例子说下frame怎么切换. qq邮箱页面按F12可以看到以下 ...
- selenium之鼠标操作详解
前言 人类频繁的用手操作鼠标和键盘,为了解决这个问题,selenium工具为我们提供了一个类来处理这些事件- Actionchains ,该类可以完成鼠标移动,鼠标点击事件.键盘输入.内容菜单交互等交 ...
- Selenium教程(4)操作选择框
目录 Selenium教程(1)选择和查找基本元素 Selenium教程(2)CSS元素操作 Selenium教程(3)IFrame切换/窗口切换 Selenium教程(4)操作选择框 1.选择框操作 ...
- python 页面script xpath_python selenium xpath定位操作
xpath是一种在xm文档中定位的语言,详细简介,请自行参照百度百科,本文主要总结一下xpath的使用方法,个人看法,如有不足和错误,敬请指出. 注意:xpath的定位 同一级别的多个标签 索引从1开 ...
- Selenium定位元素操作实例详解
Selenium定位元素操作示例 本文实例讲述了Selenium定位元素操作.分享给大家供大家参考,具体如下: Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器 ...
- 已解决python selenium模块自动化操作谷歌浏览器点击元素失效问题解决(亲测有效)
已解决python selenium模块自动化操作浏览器点击元素,抛出异常selenium.common.exceptions.ElementClickInterceptedException: Me ...
- Selenium WebDriver- 使用Frame中的HTML源码内容操作Frame
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- python+selenium浏览器常用操作(一)
1.导入selenium自定义的webdriver.后续可通过调用此协议启动各大浏览器 from selenium import webdriver #浏览器 from selenium.webdri ...
最新文章
- Redis的数据结构
- ubuntu 视频播放不了
- AJAX入门——工作原理
- Leetcode--287. 寻找重复数(Java)
- 字符串拼接与打印相关2
- error:lnk2005 已经在*.obj中定义_如何在 Spring 中自定义 scope
- Android 蓝牙相关的广播
- UVA10652木板包装
- Python 被爆大 Bug,攻击者可远程代码执行漏洞!
- 如何用一段代码证明JVM加载类是懒加载模式?分享PDF高清版
- 119 Python程序中的线程操作-线程同步
- gpt分区安装的Win7激活工具
- 联想19/20财年录得强劲的营业额 税前利润创历史新高 力克挑战,勇攀高峰
- linux 怎么看出io是瓶颈,IO瓶颈探测方法
- 华为U5800刷机,Root权限
- 图解:卷积神经网络数学原理
- 产品经理如何营销自己
- 黑苹果开启——HiDPI 技术
- Adobe的后期摄影图片处理软件Photoshop Lightroom(Lr) 6.2版本下载与安装教程
- 京东云宙斯上传单张图片php,京东api接入的几个坑(宙斯)