Switch

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

SwitchToWindows

 handles = driver.window_handles

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

例子:

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

SwitchToFrame

 # SwitchToFrame支持id、name、frame的element

 # 接受定位到的iframe的Element,这样就可以通过任意一种定位方式进行定位了
frameElement = driver.find_element_by_name('top-frame')
driver.switch_to.frame(frameElement) # 通过fame的name、id属性定位
driver.switch_to.frame('top-frame') # 当存在多层iframe嵌套时,需要一层一层的切换查找,否则将无法找到
driver.switch_to.frame('top-frame')
driver.switch_to.frame('baidu-frame') # 跳转到最外层的页面
driver.switch_to.default_content() # 多层Iframe时,跳转到上一层的iframe中
driver.switch_to.parent_frame()

例子:

 # 多层iframe切换,需要一层一层进入,但是能从任意一层切换到最外层
# 切换到top-frame
driver.switch_to.frame('top-frame')
import time
time.sleep(1)
# 输入newtag文案
driver.find_element_by_css_selector('#newtag').send_keys('XXXX')
# 切换到baidu-frame
driver.switch_to.frame('baidu-frame')
time.sleep(1)
# 输入kw文案
driver.find_element_by_css_selector('#kw').send_keys('YYYY')
# 返回上一层frame,即top-frame
driver.switch_to.parent_frame()
# 清空top-frame的输入
driver.find_element_by_css_selector('#newtag').clear()
# 再切换到baidu-frame
driver.switch_to.frame('baidu-frame')
# 再清空baidu-frame的输入
driver.find_element_by_css_selector('#kw').clear()
# 切换到最外层frame
driver.switch_to.default_content()
# 输入i1文案
driver.find_element_by_css_selector('#i1').send_keys('NNNN')

SwitchToAlert

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

例子:

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

Select

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

 # 通过select选项的索引来定位选择对应选项(从0开始计数)
Select(s).select_by_index(5) # 通过选项的value属性值来定位
Select(s).select_by_value('') # 通过选项的文本内容来定位
Select(s).select_by_visible_text('牡丹江') # 返回第一个选中的optionElement对象
Select(s).first_selected_option # 返回所有选中的optionElement对象
Select(s).all_selected_options # 取消所有选中的option
Select(s).deselect_all() # 通过option的index来取消对应的option
Select(s).deselect_by_index(1) # 通过value属性,来取消对应option
Select(s).deselect_by_value('') # 通过option的文本内容,取消对应的option
Select(s).deselect_by_visible_text('')

例子:

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

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

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

Selenium学习之==>Switch与SelectApi接口详解的更多相关文章

  1. Selenium-Switch与SelectApi接口详解

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

  2. go语言学习之路六:接口详解

    Go语言没有类和继承的概念,但是接口的存在使得它可以实现很多面向对象的特性.接口定义了一些方法,但是这些方法不包含实现的代码.也就是说这些代码没有被实现(抽象的方法).同时接口里面也不包含变量. 看一 ...

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

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

  4. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第八十三章:内部类与接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. JDBC常用接口详解

    JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...

  7. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  8. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  9. socket接口详解

    1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...

随机推荐

  1. 状态码是canceled

    timeout : 1000 给ajax配置如上属性 $.ajax({ type:"post", url:"pro/savePro", timeout : 10 ...

  2. h5 实现页面上拉加载更多数据

    您好,您的上拉加载更多的代码来喽: html:(style部分:html部分:js部分--js部分主要就是监控上拉,调接口) //上拉加载更多css <style> .wait-loadi ...

  3. Apache 80跳转443

    <VirtualHost *:> ServerName your.domain.com #域名 RewriteEngine on #启用重定向 RewriteCond %{SERVER_P ...

  4. Python 函数Ⅲ

    默认参数 调用函数时,默认参数的值如果没有传入,则被认为是默认值.下例会打印默认的age,如果age没有被传入: 以上实例输出结果: 不定长参数 你可能需要一个函数能处理比当初声明时更多的参数.这些参 ...

  5. select 语句关键字优先级

    1.select 语句优先级 select classid, userid, name, age from study where userid > 15 group by classid ha ...

  6. 使用Swagger自动生成文档

    1.maven依赖 maven仓库(https://mvnrepository.com/)搜索springfox <!-- https://mvnrepository.com/artifact/ ...

  7. 封装了opencv的旋转图像函数

    void ljb_cv_rotate_buf_size(IplImage *imgSrc, double degree, int *w_dst, int *h_dst) { double angle, ...

  8. MYSQL安装失败,一打开就出现MySQL-Workbench已停止工作

    1.由于系统重新安装,环境都是新的,出现MySQL-Workbench已停止工作 解决:下载  微软常用运行库合集  安装即可

  9. Luogu P3408 恋爱

    题目链接:Click here Solution: 设f[x]表示要使x向它的父亲写信需要花的最少的钱,per[x]为要使x向它的父亲写信最少要多少人 则\(f[x]=\sum_{i=1}^{per[ ...

  10. Codeforces 1203F1 Complete the Projects (easy version)

    cf题面 Time limit 2000 ms Memory limit 262144 kB 解题思路 看见这题觉得贪心可做,那就贪吧.(昨天真是贪心的一天,凌晨才被这两道贪心题虐,下午多校又来,感觉 ...