Switch

  我们在UI自动化测试时,总会出现新建一个tab页面、弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了。需要用到Selenium单独提供的模块switch_to模块

SwitchToWindows

1 handles =driver.window_handles2
3 #SwitchToWindows接受浏览器TAB的句柄
4 driver.switch_to.window(handles[1])

例子:

1 #浏览器句柄及指针切换
2 print(driver.window_handles)    #获取所有打开server的浏览器句柄,返回的是一个list
3 bl = driver.find_element_by_css_selector('[href="/new-index/"]')4 bl.click()                      #点击连接打开一个新的页面
5 print(driver.window_handles)    #再次获取所有打开server的浏览器句柄
6 handes =driver.window_handles7 driver.switch_to.window(handes[1])  #切换浏览器句柄到新打开的这个页面
8 cl = driver.find_element_by_css_selector('#newtag')9 cl.send_keys('AAAA')10 driver.close()     #关闭当前指针指向句柄的页面
11 driver.switch_to.window(handes[0])  #手动将浏览器指针切换回之前的页面
12 driver.find_element_by_css_selector('#i1').send_keys('EEEE')13 driver.quit()      #关闭所有页面

SwitchToFrame

1 #SwitchToFrame支持id、name、frame的element
2
3 #接受定位到的iframe的Element,这样就可以通过任意一种定位方式进行定位了
4 frameElement = driver.find_element_by_name('top-frame')5 driver.switch_to.frame(frameElement)6
7 #通过fame的name、id属性定位
8 driver.switch_to.frame('top-frame')9
10 #当存在多层iframe嵌套时,需要一层一层的切换查找,否则将无法找到
11 driver.switch_to.frame('top-frame')12 driver.switch_to.frame('baidu-frame')13
14 #跳转到最外层的页面
15 driver.switch_to.default_content()16
17 #多层Iframe时,跳转到上一层的iframe中
18 driver.switch_to.parent_frame()

例子:

1 #多层iframe切换,需要一层一层进入,但是能从任意一层切换到最外层
2 #切换到top-frame
3 driver.switch_to.frame('top-frame')4 importtime5 time.sleep(1)6 #输入newtag文案
7 driver.find_element_by_css_selector('#newtag').send_keys('XXXX')8 #切换到baidu-frame
9 driver.switch_to.frame('baidu-frame')10 time.sleep(1)11 #输入kw文案
12 driver.find_element_by_css_selector('#kw').send_keys('YYYY')13 #返回上一层frame,即top-frame
14 driver.switch_to.parent_frame()15 #清空top-frame的输入
16 driver.find_element_by_css_selector('#newtag').clear()17 #再切换到baidu-frame
18 driver.switch_to.frame('baidu-frame')19 #再清空baidu-frame的输入
20 driver.find_element_by_css_selector('#kw').clear()21 #切换到最外层frame
22 driver.switch_to.default_content()23 #输入i1文案
24 driver.find_element_by_css_selector('#i1').send_keys('NNNN')

SwitchToAlert

1 #alert 实际上也是Selenium的一个模块
2 from selenium.webdriver.common.alert importAlert3
4 #也可以通过Webdriver的switch_to来调用
5
6 #点击确认按钮
7 driver.switch_to.alert.accept()8
9 #如果是确认弹框,相当于点击需要和X按钮
10 driver.switch_to.alert.dismiss()11
12
13 #如果alert上有文本框时,可以输入文字。(注: 没遇到过)
14 driver.switch_to.alert.send_keys()15
16 #返回Alert上面的文本内容
17 text = driver.switch_to.alert.text

例子:

1 #弹框处理
2 driver.find_element_by_css_selector('#confirm').click()  #点击按钮,弹出弹框
3 print(driver.switch_to.alert.text)  #打印弹框返回的文本文字
4 driver.switch_to.alert.accept()     #确认
5 driver.switch_to.alert.dismiss()    #取消

Select

  在UI自动化测试过程中,经常会遇到一些下拉框,如果我们基于Webdriver操作的话就需要click两次,而且很容易出现问题,实际上Selenium给我们提供了专门的Select(下拉框处理模块)。

1 #通过select选项的索引来定位选择对应选项(从0开始计数)
2 Select(s).select_by_index(5)3
4 #通过选项的value属性值来定位
5 Select(s).select_by_value('2')6
7 #通过选项的文本内容来定位
8 Select(s).select_by_visible_text('牡丹江')9
10 #返回第一个选中的optionElement对象
11 Select(s).first_selected_option12
13 #返回所有选中的optionElement对象
14 Select(s).all_selected_options15
16 #取消所有选中的option
17 Select(s).deselect_all()18
19 #通过option的index来取消对应的option
20 Select(s).deselect_by_index(1)21
22 #通过value属性,来取消对应option
23 Select(s).deselect_by_value('')24
25 #通过option的文本内容,取消对应的option
26 Select(s).deselect_by_visible_text('')

例子:

1 #点击下拉菜单再点击一个值
2 from selenium.webdriver.support.select importSelect3 driver.get('http://ui.imdsx.cn/html/')4 driver.execute_script('window.scrollTo(0,1500);')5 select = driver.find_element_by_xpath('//select[1]')6 #实例化select,接收一个select标签,如果不是select标签则抛异常
7 Select(select).select_by_value('2')  #通过select标签的option中的value的值定位
8 Select(select).select_by_index('2')  #通过select标签的option中的下标定位,从0开始

如果一个标签下还有子集,可以继续在这个标签小查找,如下:

1 driver.get('http://ui.imdsx.cn/html/')2 driver.execute_script('window.scrollTo(0,1500);')3 select = driver.find_element_by_xpath('//select[1]')4 #获取select标签下所有的option的元素
5 options = select.find_elements_by_tag_name('option')6 for opt inoptions:7     print(opt.get_attribute('value'))  #循环获取select('//select[1]')标签下的option的value属性
8     print(opt.get_attribute('index'))  #循环获取select('//select[1]')标签下的option的下标

转载于:https://www.cnblogs.com/L-Test/p/9307553.html

Selenium学习之==Switch与SelectApi接口详解相关推荐

  1. Selenium-Switch与SelectApi接口详解

    转:http://www.imdsx.cn/index.php/2017/07/31/swse/ Switch 我们在UI自动化测试时,总会出现新建一个tab页面.弹出一个浏览器级别的弹框或者是出现一 ...

  2. JAVA8学习7-Collector接口详解以及实现类

    7 Collector 接口详解(collect 收集器.Collectors)***************** collect: 收集器 Collector 作为 collect 方法的参数 Co ...

  3. html5硬件接口,HTML5通用接口详解

    1.先说几个基本类型: DOMString, boolean, long, unsigned long, double,BmBHTML5中文学习网 - HTML5先行者学习网 NaN(Not-a-Nu ...

  4. php中switch语句的理解,php中switch语句的使用详解

    我们之前给大家介绍了关于php中switch语句的介绍,我们都知道php中switch语句是循环语句,是一个开关语句,那么很多朋友都只知道简单的switch开关语句的用法了,今天就带大家了解一下php ...

  5. 【JavaWeb】Servlet系列——HttpServletRequest接口详解

    文章目录 23 HttpServletRequest接口详解 23.1 关于HttpServletRequest接口 23.2 HttpServletRequest接口的实现类谁写的? HttpSer ...

  6. 小猫爪:i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解

    i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解 1 前言 2 FlexCAN简介 2.1 MB(邮箱)系统 2.1.1 正常模式下 2.1.2 激活了CAN FD情况下 2. ...

  7. IP地址和子网划分学习笔记之《IP地址详解》

    在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. IP地址和子网划分学习笔记相关篇章: 1.I ...

  8. 迅为linux下串口,迅为iMX6UL开发板多路串口开发平台接口详解

    原标题:迅为iMX6UL开发板多路串口开发平台接口详解 iMX6UL开发板 核心板参数 尺寸:38mm*42mm CPU:iMX6UL 主频528MHz ARM Cortex-A7架构 单核 内存:5 ...

  9. Python的C语言接口 - 详解官方文档

    Python的C语言接口 - 详解官方文档 索引 Python的C语言接口 - 详解官方文档 介绍 / Introduce 代码标准 / Coding Standards 包含文件 / Include ...

最新文章

  1. dedecms系统列表页调用tag标签同时带上链接的方法
  2. RabbitMQ支持的消息模型
  3. [渝粤教育] 西北大学 仪器分析 参考 资料
  4. mysql和jfinal的区别_mysql与JFinal的数据关系-阿里云开发者社区
  5. 一篇文章看懂@Scheduled定时器/@Async/CompletableFuture
  6. Micsorft文档阅读笔记-Run-Time Type Information解析及使用
  7. React-native集成tfs自动发版问题
  8. 获取自己主机外网ip
  9. mvc5 新手入门--ASP.NET MVC5中View-Controller间数据的传递
  10. 浸会大学推中药材图像数据库
  11. 热烈庆贺产品站点开通。正在建设中...
  12. DXperience 12.2使用手册
  13. 安卓怎么打开html游戏,安卓手机如何打开.xapk文件
  14. 使用地图编辑器构建游戏场景
  15. 一个微型的操作系统内核 MiniOS
  16. python代码运行速度有点慢 ? 教你使用多线程速度飞升
  17. 联想服务器安装系统蓝屏怎么办,联想电脑装系统出现蓝屏怎么办
  18. 分析ANR具体哪个函数耗时,打时间戳是什么意思
  19. SpringBoot文件上传下载以及优化过程 -- 个人笔记
  20. vue使用百度富文本编辑器(ueditor)

热门文章

  1. bzoj4448 SCOI2015 情报传递 message
  2. Xcode里-ObjC, -all_load, -force_load
  3. java中线程池的使用方法
  4. How-to: 利用Visual Studio升级Windows Phone 7工程
  5. [精华]如何编写高质量的VB代码
  6. Flutter的AnimatedDefaultTextStyle实现文本样式的动画过渡切换效果
  7. vue中v-html指令的使用之Vue知识点归纳(三)
  8. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)
  9. 18110 Koishi's travel, Satori's travel
  10. vue新版router.addRoute基础用法