[python][selenium] Web UI自动化页面切换iframe框架
关联文章:Web UI自动化8种页面元素定位方式
1、切换iframe的方法:switch_to.frame
入参有4种:
1.1、id
1.2、name
1.3、index索引
1.4、iframe元素对象
2、返回主文档(最外层的页面)的方法:switch_to.default_content()
3、返回到上一级iframe的方法:switch_to.parent_frame()
简单说下:
iframe元素是用来在当前html里的其他元素中,再嵌套个html。
因为webdriver默认只能在一个页面上识别和操作元素,所以无法直接定位和操作主文档html和内嵌html,
要定位操作iframe内嵌页面的元素,就需要先切换到iframe。
下面我用网易云音乐首页来做demo,直接用代码+注释演示说明。
1、切换iframe的方法的4种入参
1.1、id
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://music.163.com/")
# 操作:从页面主文档切换到 id="g_iframe" 的iframe,定位网易云音乐轮播图右箭头按钮,用for循环点击30次
driver.switch_to.frame("g_iframe")
ele = driver.find_element(By.CLASS_NAME, "btnr")
for i in range(30):
ele.click()
sleep(0.1)
sleep(3)
driver.quit()
1.2、name
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
# driver.implicitly_wait(10) # 加了隐式等待后打开页面要等10秒左右才定位,不加就很快就定位了,原因还在研究中
driver.get("https://music.163.com/")
# 操作:从页面主文档切换到 name="contentFrame" 的iframe,点击"用户登录"按钮
driver.switch_to.frame("contentFrame")
driver.find_element(By.ID, "index-enter-default").click()
sleep(3)
driver.quit()
1.3、index索引
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://music.163.com/")
# 操作:从页面主文档切换到第1个iframe,点击热门推荐的"更多"按钮
driver.switch_to.frame(0)
driver.find_element(By.CSS_SELECTOR, 'span > a[href="/discover/playlist/"]').click()
sleep(3)
driver.quit()
1.4、iframe元素对象
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://music.163.com/")
# 操作:定位到iframe元素,把元素传给switch_to.frame方法切换iframe,点击页面底部"音乐开放平台"
iframe = driver.find_element(By.CSS_SELECTOR, "body > iframe")
driver.switch_to.frame(iframe)
driver.find_element(By.CSS_SELECTOR, 'a[href="https://developer.music.163.com/st/developer"]').click()
sleep(3)
driver.quit()
2、返回主文档(最外层的页面)
如果iframe里面还有一个iframe,这时你不想操作上一层iframe,想直接回到主文档就可以使用这个方法。
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://music.163.com/")
# 先切换iframe
driver.switch_to.frame("g_iframe")
# 切换回主文档(把这句注释掉,定位主文档元素就会报异常:NoSuchElementException)
driver.switch_to.default_content()
# 定位主文档的搜索框,输入内容
driver.find_element(By.ID, "srch").send_keys("空之轨迹")
sleep(3)
driver.quit()
3、返回到上一级iframe
如果iframe里面还有一个iframe,这时你不想回到主文档,想操作上一层iframe就可以使用这个方法。
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://music.163.com/")
# 先切换iframe (暂时没有找到有这么多层iframe的页面。。将就下,原理一样的)
driver.switch_to.frame("g_iframe")
# 切换到上一级iframe(把这句注释掉,定位上一级iframe的元素就会报异常:NoSuchElementException)
driver.switch_to.parent_frame()
# 定位主文档的搜索框,输入内容
driver.find_element(By.ID, "srch").send_keys("空之轨迹")
sleep(3)
driver.quit()
[python][selenium] Web UI自动化页面切换iframe框架的更多相关文章
- python UI自动化之切换iframe
python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame(" ...
- Python selenium web UI之Chrome 与 Chromedriver对应版本映射表及下载地址和配置(windows, Mac OS)
浏览器及驱动下载 进行web UI 自动化时,需要安装浏览器驱动webdriver,Chrome浏览器需要安装chromedriver.exe 驱动,Firefox需安装 geckodriver.ex ...
- python+selenium封装UI自动化框架
seleinum框架 框架的思想: 解决我们测试过程中的问题:大量的重复步骤,用自动化来实现 1)配置和程序的分离 2)测试数据和程序的分离 3)不懂编程的人员可以方便使用:使用的 ...
- 基于PO和单例设计模式用python+selenium进行ui自动化框架设计
一)框架目录的结构 二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备然后目前的配置文件大都会用yaml,ini,excel,还有.py也 ...
- selenium(12)-web UI自动化项目实战(PO模式,代码封装)
web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...
- selenium自动化之切换iframe
许多人在执行脚本的时候会发现,明明自己的元素路径没写错啊!怎么还是报元素未找到的异常呢?是的,没错,你可能是遇上iframe啦!下面将介绍关于iframe的相关操作. 例子:以163邮箱登录页面为例 ...
- UI自动化页面需要选择上传文件
UI自动化页面上传文件,百度查的时候说有4中方法,简便的方法是安装SendKeys,但是百度说这个只支持python2.7的 我的python版本是3.7的,目前还只碰到了非<input typ ...
- 修改rabbitmq Web UI 监控页面的端口
在前几天工作中遇到一个问题,部署服务器,需要用rabbitmq自带的一个web UI监控组件,但是15672的端口没有对外映射.尝试了几种办法.开始修改rabbitmq.config,rabbitmq ...
- session失效后,登录页面嵌入iframe框架
在登录页面的onload方法中加入以下代码解决: //防止登录页面嵌入iframe框架 if (top.location != self.location){ top.location=self.lo ...
- Python Selenium 搭建Web UI自动化
Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python ...
随机推荐
- 一个难忘的json反序列化问题
前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助. 案发现场 我最近在做知识星球中的商品秒杀系统,写 ...
- 详解C#委托与事件
在C#中,委托是一种引用类型的数据类型,允许我们封装方法的引用.通过使用委托,我们可以将方法作为参数传递给其他方法,或者将多个方法组合在一起,从而实现更灵活的编程模式.委托类似于函数指针,但提供了类型 ...
- 使用GSAP制作动画视频
GSAP 3Blue1Brown给我留下了深刻印象.利用动画制作视频,内容简洁,演示清晰.前两天刚好碰到一件事,我就顺便学习了一下怎么用代码做动画. 以javascrip为例,有两个动画引擎,GSAP ...
- workman和swoole区别和异同
swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同. 先说下swoole的进程模型,看一下以下解析图 mast ...
- 指针_C
指针的代码 // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" ...
- 【ue源码】定制-蓝图部分
今天在更新UE的伤害系统的时候出现了一个问题: 多个地方频繁调用一个函数,而这个函数肯定做优化,具体就是,把对应数据放入到队列,另外一个地方慢慢消费这个队列, 那么问题出现了,我使用的UE只有Sing ...
- AppiumDesktop控制手机和安卓模拟器
前言: 本期内容 如何用AppiumDesktop连接安卓手机和安卓模拟器 AppiumDesktop基本参数的获取方法,及如何驱动安卓设备 AppiumDesktop在模拟登陆和爬虫中用到的基本功能 ...
- docker 概念,安装,启动,运行
docker概念,安装,启动,运行模式 docker的概念 镜像(image) 模板,可以通过模板来创建容器服务,tomcat镜像===>run==>tomacat01容器(提供服务),通 ...
- Excel函数-相对引用和绝对引用
1.相对引用 公式填充时引用的相对位置不变,行和列.序号都相对递增 2.绝对引用 公式填充时应用的单元格绝对位置不变,行和列.序号都不变.绝对引用的符号是"$",也可以快捷键按F4 ...
- 【JavaScript】精度损失问题
参卡博客: https://blog.csdn.net/azl397985856/article/details/99148969/