Selenium学习之==Switch与SelectApi接口详解
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接口详解相关推荐
- Selenium-Switch与SelectApi接口详解
转:http://www.imdsx.cn/index.php/2017/07/31/swse/ Switch 我们在UI自动化测试时,总会出现新建一个tab页面.弹出一个浏览器级别的弹框或者是出现一 ...
- JAVA8学习7-Collector接口详解以及实现类
7 Collector 接口详解(collect 收集器.Collectors)***************** collect: 收集器 Collector 作为 collect 方法的参数 Co ...
- html5硬件接口,HTML5通用接口详解
1.先说几个基本类型: DOMString, boolean, long, unsigned long, double,BmBHTML5中文学习网 - HTML5先行者学习网 NaN(Not-a-Nu ...
- php中switch语句的理解,php中switch语句的使用详解
我们之前给大家介绍了关于php中switch语句的介绍,我们都知道php中switch语句是循环语句,是一个开关语句,那么很多朋友都只知道简单的switch开关语句的用法了,今天就带大家了解一下php ...
- 【JavaWeb】Servlet系列——HttpServletRequest接口详解
文章目录 23 HttpServletRequest接口详解 23.1 关于HttpServletRequest接口 23.2 HttpServletRequest接口的实现类谁写的? HttpSer ...
- 小猫爪: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. ...
- IP地址和子网划分学习笔记之《IP地址详解》
在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. IP地址和子网划分学习笔记相关篇章: 1.I ...
- 迅为linux下串口,迅为iMX6UL开发板多路串口开发平台接口详解
原标题:迅为iMX6UL开发板多路串口开发平台接口详解 iMX6UL开发板 核心板参数 尺寸:38mm*42mm CPU:iMX6UL 主频528MHz ARM Cortex-A7架构 单核 内存:5 ...
- Python的C语言接口 - 详解官方文档
Python的C语言接口 - 详解官方文档 索引 Python的C语言接口 - 详解官方文档 介绍 / Introduce 代码标准 / Coding Standards 包含文件 / Include ...
最新文章
- dedecms系统列表页调用tag标签同时带上链接的方法
- RabbitMQ支持的消息模型
- [渝粤教育] 西北大学 仪器分析 参考 资料
- mysql和jfinal的区别_mysql与JFinal的数据关系-阿里云开发者社区
- 一篇文章看懂@Scheduled定时器/@Async/CompletableFuture
- Micsorft文档阅读笔记-Run-Time Type Information解析及使用
- React-native集成tfs自动发版问题
- 获取自己主机外网ip
- mvc5 新手入门--ASP.NET MVC5中View-Controller间数据的传递
- 浸会大学推中药材图像数据库
- 热烈庆贺产品站点开通。正在建设中...
- DXperience 12.2使用手册
- 安卓怎么打开html游戏,安卓手机如何打开.xapk文件
- 使用地图编辑器构建游戏场景
- 一个微型的操作系统内核 MiniOS
- python代码运行速度有点慢 ? 教你使用多线程速度飞升
- 联想服务器安装系统蓝屏怎么办,联想电脑装系统出现蓝屏怎么办
- 分析ANR具体哪个函数耗时,打时间戳是什么意思
- SpringBoot文件上传下载以及优化过程 -- 个人笔记
- vue使用百度富文本编辑器(ueditor)
热门文章
- bzoj4448 SCOI2015 情报传递 message
- Xcode里-ObjC, -all_load, -force_load
- java中线程池的使用方法
- How-to: 利用Visual Studio升级Windows Phone 7工程
- [精华]如何编写高质量的VB代码
- Flutter的AnimatedDefaultTextStyle实现文本样式的动画过渡切换效果
- vue中v-html指令的使用之Vue知识点归纳(三)
- java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)
- 18110 Koishi's travel, Satori's travel
- vue新版router.addRoute基础用法