Selenium switch_to方法
在web应用自动化测试中,点击一个链接或者按钮会打开一个新的浏览器窗口,会出现多个窗口实例。默认情况下的焦点在主窗口(父窗口),如果要对子窗口进行操作,就需要首先切换到子窗口。
Selenium WebDriver给每个窗口指定了一个唯一的ID,Selenium通过这个唯一ID实现在多个窗口之间切换。常见的有iframe,弹出对话框alert,新窗口等。本文将介绍这几种窗口的切换。
目录
- iframe切换
- 什么是frame?
- frame切换
- 多 frame切换
- 弹出对话框alert切换
- 操作alert常用的方法
- alert切换
- 多窗口切换
- 处理流程
- 多窗口切换
- 获取当前焦点元素
- 系列文章
iframe切换
在web自动化中,如果一个元素定位始终不到,如果locator没有写错,很大概率就是这个元素在iframe中。
什么是frame?
frame是html中的框架,通过使用frameset 标签将页面进行垂直或者水平分离。包含frameset、frame、 iframe三种标签。
演示代码:https://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols
frame切换
切换到frame或者iframe后就可以进行操作,操作完成后需要切换回原来的框架:
driver.switch_to.frame() #根据元素id或 index切换
driver.switch_to.default_content() #切换到默认 frame
driver.switch_to.parent_frame() #切换到父级 frame
多 frame切换
测试页面:https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
切换iframe,打印’请拖拽我’元素文本
def test_iframe(self):self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")self.driver.switch_to.frame("iframeResult")print(self.driver.find_element_by_id("draggable").text) # 打印'请拖拽我'# self.driver.switch_to.parent_frame()self.driver.switch_to.default_content()print(self.driver.find_element_by_id("submitBTN").text) #点击运行
弹出对话框alert切换
在页面操作时会遇到 JavaScript所生成的alert、 confirm以及prompt弹框,需要对弹框操作后才能进行下一步。
操作alert常用的方法
- switch_to.alert():切换到当前页面上的警告框
- text:返回弹框文本信息
- accept():接受弹框,确认
- dismiss():取消弹框
- send_keys(keysToSend):发送文本至弹框
alert切换
测试页面还是上面的页面,拖拽后会出现一个弹框,我们打印弹框内容并点击确定。
python代码:
def test_alert(self):self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")self.driver.switch_to.frame("iframeResult")drag = self.driver.find_element_by_id("draggable")drop = self.driver.find_element_by_id("droppable")action = ActionChains(self.driver)action.drag_and_drop(drag, drop).perform()sleep(2)alert = self.driver.switch_to.alertprint(alert.text)alert.accept()# self.driver.switch_to.alert.accept()self.driver.switch_to.default_content()self.driver.find_element_by_id("submitBTN").click()sleep(3)
多窗口切换
有时候点击某些链接会打开一个新的窗口,需要先切换窗口才能在新页面上操作。selenium通过切换窗口句柄来进行多个窗口之间的切换。
处理流程
- 获取当前的窗口句柄(driver.current_window_handle)
- 获取当前会话下的所有窗口句柄(driver.window_handles)
- 切换窗口(driver.switch_to_window)
- 切回原窗口(driver.switch_to_window)
多窗口切换
1、打开百度,点击登录,进入注册界面,返回登录页
python代码:
def test_window(self):self.driver.get("http://www.baidu.com")self.driver.find_element_by_link_text("登录").click()# print(self.driver.current_window_handle) # 当前的窗口句柄self. driver.find_element_by_link_text("立即注册").click()windows = self.driver.window_handles # 所有窗口句柄# 切换到注册窗口self.driver.switch_to.window(windows[-1])self.driver.find_element_by_id("TANGRAM__PSP_4__userName").send_keys("username")self.driver.find_element_by_id("TANGRAM__PSP_4__phone").send_keys("12345678")sleep(2)# 切换回登录窗口self.driver.switch_to.window(windows[0])self.driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
2、打开新窗口
def test_window2(self):self.driver.get("http://www.baidu.com")js = "window.open('http://www.sogou.com')"self.driver.execute_script(js)sleep(3)windows = self.driver.window_handlesprint(windows)# 切换到新打开的窗口self.driver.switch_to.window(windows[-1])self.driver.find_element_by_id("query").send_keys("test sogou") # 搜狗搜索框sleep(3)self.driver.close() # 关闭新打开的窗口# 切回窗口self.driver.switch_to.window(windows[0])self.driver.find_element_by_id("kw").send_keys("test baidu") # 百度搜索框sleep(3)
获取当前焦点元素
switch_to还有一个方法叫switch_to.active_element,返回当前焦点的WebElement对象,用于判断当前焦点是否位于某个web元素。有时候需要测试打开一个网页,焦点是否在输入框,比如账号密码登录页面。
测试:打开https://www.baidu.com/,焦点在输入框
python代码:
def test_element_focus(self):self.driver.get("https://www.baidu.com/")baidu = self.driver.find_element_by_id("kw")assert baidu == self.driver.switch_to.active_element
系列文章
1、Selenium Webdriver 架构
2、Selenium Web元素定位方法
3、Selenium Web元素操作
4、Web自动化测试:xpath & CSS Selector定位
5、Selenium ActionChains、TouchAction方法
6、Selenium switch_to方法
7、Selenium Select下拉框
8、Selenium多浏览器测试
9、Selenium执行JavaScript脚本
10、selenium/appium 等待方式介绍
11、Selenium Grid:在多个主机上并行执行自动化脚本
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
Selenium switch_to方法相关推荐
- 自动化测试框架搭建三python环境安装selenium和手动下载安装selenium的方法
python环境安装selenium和手动下载安装selenium的方法 方法1:cmd环境下,用pip install selenium 可能会很慢 方法2:下载selenium安装包手动安装 下载 ...
- Python用selenium简单方法处理完子窗口切换到主窗口
百度是一个很好的例子 完成依次点击导航栏标签,前往次级页面进行处理完毕后再关闭并返回主界面的操作 最主要的就是掌握切换窗口 slenium是死的,不是说你看到哪个窗口它就帮你处理哪个窗口,需要让它切换 ...
- selenium定位方法(java实例)
从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性.标签以及链接来定位,一种是XPath方式,最后一种是CSS方式. 下表列举了元素定位的例子 selenium之页面元素定位方法 ...
- python selenium webdriver方法封装(find_element_by)
下面是对find_element_by_就行了封装,封装之后的高级方法就是getElement() 下面是具体的代码: def getElement(self, selector):"&qu ...
- Selenium API-WebElement 方法
关于 WebElement 对象的方法,常用的如下表所示: 序号 方法/属性 描述 1 WebElement.click() 单次点击 2 WebElement.send_keys() 输入指定内容 ...
- Selenium API-WebDriver 方法
关于常用的 WebDriver 方法,主要是回退.前进.刷新关闭浏览器等 序号 方法/属性 描述 1 driver.back() 浏览器页面后退 2 driver.forword() 浏览器页面前进 ...
- UI自动化之Selenium介绍、Selenium定位方法
Selenium库 用于web应用程序的测试工具 模拟手工操作浏览器,进行自动化测试 特点 开源免费 多浏览器支持 -Chrome.IE.FireFox等 多平台支持 - Windows.Linux都 ...
- PyCharm:ModuleNotFoundError:No module named 'selenium' 解决方法
1.打开pycharm,点击File -> Settings,找到 Project Interpreter,点击右边的下拉菜单下的 show All... 选项 2.点击 show All... ...
- Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言
分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...
最新文章
- Pytorch源码与运行原理浅析--网络篇(一)
- 机器学习在高德搜索建议中的应用优化实践
- python 不得不知的第三方库以及常用安装包
- Python知识: scipy signal.chirp用法例
- nacos 公共_Springboot,Nacos并向使用研究
- Java数字格式:DecimalFormat
- AUTOSAR从入门到精通100讲(八十五)-AUTOSAR基础篇之BswM
- (pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
- (43)FPGA面试技能提升篇(Questa简介)
- linux考试中的7654_全国计算机等级考试你了解多少?
- Ruby之旅(16) 异常处理 rescue与ensure
- 0xFFFF中的0x是什么意思
- 未来已来,云上安全SaaS化势不可挡
- 移动宽带套餐介绍_中国移动宽带最新套餐介绍
- 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
- 英文人名及含意(转)
- 论文管理系统(登录功能)
- js 笔记-LHS RHS 作用域
- The default interactive shell is now zsh.
- 百度之星 2015资格赛 列变位法解密【字符串】