在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常用的方法

  1. switch_to.alert():切换到当前页面上的警告框
  2. text:返回弹框文本信息
  3. accept():接受弹框,确认
  4. dismiss():取消弹框
  5. 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通过切换窗口句柄来进行多个窗口之间的切换。

处理流程

  1. 获取当前的窗口句柄(driver.current_window_handle)
  2. 获取当前会话下的所有窗口句柄(driver.window_handles)
  3. 切换窗口(driver.switch_to_window)
  4. 切回原窗口(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
--THE END--

系列文章

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方法相关推荐

  1. 自动化测试框架搭建三python环境安装selenium和手动下载安装selenium的方法

    python环境安装selenium和手动下载安装selenium的方法 方法1:cmd环境下,用pip install selenium 可能会很慢 方法2:下载selenium安装包手动安装 下载 ...

  2. Python用selenium简单方法处理完子窗口切换到主窗口

    百度是一个很好的例子 完成依次点击导航栏标签,前往次级页面进行处理完毕后再关闭并返回主界面的操作 最主要的就是掌握切换窗口 slenium是死的,不是说你看到哪个窗口它就帮你处理哪个窗口,需要让它切换 ...

  3. selenium定位方法(java实例)

    从下图中可以看到selenium有三类定位元素的方法,一种是直接通过属性.标签以及链接来定位,一种是XPath方式,最后一种是CSS方式. 下表列举了元素定位的例子 selenium之页面元素定位方法 ...

  4. python selenium webdriver方法封装(find_element_by)

    下面是对find_element_by_就行了封装,封装之后的高级方法就是getElement() 下面是具体的代码: def getElement(self, selector):"&qu ...

  5. Selenium API-WebElement 方法

    关于 WebElement 对象的方法,常用的如下表所示: 序号 方法/属性 描述 1 WebElement.click() 单次点击 2 WebElement.send_keys() 输入指定内容 ...

  6. Selenium API-WebDriver 方法

    关于常用的 WebDriver 方法,主要是回退.前进.刷新关闭浏览器等 序号 方法/属性 描述 1 driver.back() 浏览器页面后退 2 driver.forword() 浏览器页面前进 ...

  7. UI自动化之Selenium介绍、Selenium定位方法

    Selenium库 用于web应用程序的测试工具 模拟手工操作浏览器,进行自动化测试 特点 开源免费 多浏览器支持 -Chrome.IE.FireFox等 多平台支持 - Windows.Linux都 ...

  8. PyCharm:ModuleNotFoundError:No module named 'selenium' 解决方法

    1.打开pycharm,点击File -> Settings,找到 Project Interpreter,点击右边的下拉菜单下的 show All... 选项 2.点击 show All... ...

  9. Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言

    分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...

最新文章

  1. Pytorch源码与运行原理浅析--网络篇(一)
  2. 机器学习在高德搜索建议中的应用优化实践
  3. python 不得不知的第三方库以及常用安装包
  4. Python知识: scipy signal.chirp用法例
  5. nacos 公共_Springboot,Nacos并向使用研究
  6. Java数字格式:DecimalFormat
  7. AUTOSAR从入门到精通100讲(八十五)-AUTOSAR基础篇之BswM
  8. (pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
  9. (43)FPGA面试技能提升篇(Questa简介)
  10. linux考试中的7654_全国计算机等级考试你了解多少?
  11. Ruby之旅(16) 异常处理 rescue与ensure
  12. 0xFFFF中的0x是什么意思
  13. 未来已来,云上安全SaaS化势不可挡
  14. 移动宽带套餐介绍_中国移动宽带最新套餐介绍
  15. 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
  16. 英文人名及含意(转)
  17. 论文管理系统(登录功能)
  18. js 笔记-LHS RHS 作用域
  19. The default interactive shell is now zsh.
  20. 百度之星 2015资格赛 列变位法解密【字符串】

热门文章

  1. 文件管理系统(文件版)
  2. 拉卡拉支付开启生态化移动支付新趋势
  3. c语言sizeof用法计算char,C语言里sizeof(char)是什么意思
  4. 短视频去水印多功能工具箱微信小程序源码下载支持多种流量主
  5. 【OptiX】第6个示例 折射,玻璃材质
  6. 深度学习【使用pytorch实现基础模型、优化算法介绍、数据集的加载】
  7. 弱监督检测初识——Weakly Supervised Deep Detection Networks解读
  8. 计算机怎样禁止再添加新用户,Win10如何添加新用户?
  9. 面试官问我SpringBean生命周期,我
  10. 嵌入式Linux容器技术