Web自动化测试
- 5.1 Selenium Web 自动化
- 5.1.1 Selenium 和 Robot Framework SeleniumLibrary 库介绍
- 5.1.2 Open Browser 和 Close Browser
- 5.1.3 Input Text
- 5.1.4 Click Button
- 5.1.5 Click Element
- 5.1.6 Click Link
- 5.1.7 Add Cookie、Get Cookies 和 Delete Cookie
- 5.1.8 Get All Links
- 5.1.9 Choose File
- 5.1.10 Get Text
- 5.1.11 Get Title
- 5.1.12 Get Value
- 5.1.13 Get Webelements 和 Get Webelement
- 5.1.14 Get Window Titles
- 5.1.15 Go Back 和 Go To
- 5.1.16 Get List Items
- 5.1.17 Get Selected List Value
- 5.1.18 Select From List
- 5.1.19 Selenium2Library 库其他的自动化测试关键字介绍
- 5.2 SikuliLibrary 库的使用
5.1 Selenium Web 自动化
Selenium 出来已经有很多年了,从最初的 Selenium1 到后来的 Selenium2,也变得越来越成熟,而且已经被很多公司广泛使用
Selenium 在发展的过程中分了很多模块,这里我们主要介绍 WebDriver
WebDriver 已经被很多浏览器所兼容,WebDriver 在自动化脚本和浏览器之间充当的角色和之前介绍的 Appium 很像
由于现在很多的浏览器都已经主动支持和兼容了 WebDriver,所以 WebDriver 在启动后会确认浏览器的 native component 是否存在可用而且版本匹配,接着在目标浏览器里启动使用 Selenium 自己设计定义的协议(WebDriver WireProtocol)
WebDriver Wire 协议是通用的,也就是说不管是 FirefoxDriver 还是 ChromeDriver 等,启动之后都会在某一个端口启动基于这套协议的 Web 服务
WebDriver Wire 协议是一套基于 RESTful 的 Web 服务,在调用 WebDriver 的时候,实际上是给在浏览器上启动的 RESTful 服务监听端口发送 HTTP请 求,以 WebDriver Wire 协议规定的 JSON格 式的字符串来告诉 Selenium 希望浏览器执行什么样的操作
5.1.1 Selenium 和 Robot Framework SeleniumLibrary 库介绍
从 Selenium 官网可以下载到各种浏览器运行需要的 Driver
从 http://www.seleniumhq.org/docs/ 地址可以查询到关于 Selenium 的文档和介绍等信息
安装 robotframework-seleniumlibrary
pip install robotframework-seleniumlibrary
导入 SeleniumLibrary
5.1.2 Open Browser 和 Close Browser
在 SeleniumLibrary 库中,Open Browser
关键字用来打开一个指定的浏览器
Close Browser
关键字用来关闭一个已经打开的当前浏览器
5.1.3 Input Text
Input Text
关键字用于模拟向一个输入框中输入文字内容
该关键字接收两个参数[ locator| text ]
- locator 参数指的是定位界面元素的方式
- text 参数指的是需要输入的内容
5.1.4 Click Button
Click Button
关键字用于模拟单击页面中的按钮
- 接收一个参数[ locator ]
5.1.5 Click Element
Click Element
关键字用于模拟单击一个通过 locator 定位到的具体元素,可以是通过 id 或者 name、xpath 等
- 该关键字接收一个参数[ locator ]
5.1.6 Click Link
Click Link
关键字用于模拟单击一个链接
- 该关键字接收一个参数[ locator ]
5.1.7 Add Cookie、Get Cookies 和 Delete Cookie
Add Cookie
关键字用于模拟向本地浏览器中添加一个 Cookie 缓存,Cookie 也是我们在做 Web 自动化测试时经常需要用到的一个概念
- 该关键字接收[ name |value | path=None | domain=None | secure=None | expiry=None ]这几个参数
Get Cookies
关键字用于获取浏览器中缓存的所有 Cookie
- 这个关键字后面不需要加任何的参数
Delete Cookie
关键字用于删除浏览器中缓存的 Cookie
- 该关键字接收一个参数[name],用于标志需要删除的 Cookie的名称
5.1.8 Get All Links
Get All Links
关键字用来获取所有页面上所有的 href 链接的元素对应的 id,链接对应的元素中没有 id 时,就以一个空字符串代替
5.1.9 Choose File
做自动化测试时,我们经常遇到的就是上传文件了,这里我们可以使用 Choose File
关键字完成该操作
- 接收[ locator | file_path ]两个关键字
5.1.10 Get Text
Get Text
关键字用来获取文本内容
- 该关键字接收[ locator ]这一个关键字,locator可以通过 id、name、xpath 等来定位
5.1.11 Get Title
Get Title
关键字用来获取浏览器网页的 title
- 该关键字后面不需要接收任何参数
5.1.12 Get Value
Get Value
关键字用于获取某个元素标签对应的 value 属性,
- 该关键字接收[locator ]这一个参数,locator 可以通过 id、name、xpath 等进行定位
5.1.13 Get Webelements 和 Get Webelement
Get Webelements
关键字用来获取所有获得的 WebElement 对象的列表
- 接收[locator ]一个参数,locator 可以通过 id、name、xpath 等进行定位
Get Webelement
关键字和 Get Webelements
类似,只不过 Get Webelement
只会返回匹配到的第一个 WebElement 对象
5.1.14 Get Window Titles
Get Window Titles
用来获取当前已经打开的浏览器窗口的所有 Title
- 该关键字不需要接收任何参数
5.1.15 Go Back 和 Go To
Go Back
和 Go To
关键字分别用来模拟对浏览器进行后退和前进的操作
GoBack
关键字不需要接收任何参数Go To
关键字接收[ url ]一个参数,url 是一个需要跳转到的地址
5.1.16 Get List Items
Get List Items
关键字用来获取页面中一个下拉列表中的所有下拉选项
- 该关键字接收[ locator ]一个参数,locator 可以通过 id 或者 name等 来进行元素定位
5.1.17 Get Selected List Value
Get Selected List Value
关键字用于获取页面中选中的一个下拉列表的 Value 值
- 关键字接收[ locator ]一个参数,locator 可以通过 id 或者 name 来进行元素定位
5.1.18 Select From List
Select From List By Value
关键字用来模拟从指定的下拉列表中选择指定的下拉列表选项
- 该关键字接收[ locator | *values ]多个参数,locator 可以通过 id、name来进行元素的定位
5.1.19 Selenium2Library 库其他的自动化测试关键字介绍
5.2 SikuliLibrary 库的使用
5.2.1 Sikuli 简介
Sikuli 是一种图形化编程技术,或者也可以说是一种图形化的自动化测试工具,平时在屏幕上看到的任何画面,Sikuli 都可以使用图像识别的方式来进行操作
Sikuli 不需要像 WebDriver 那样通过查找元素的方式去对页面进行定位,而是使用屏幕截图的方式来定位页面的按钮等,Sikuli 用于自动化测试的优点如下:
- 可以测试不易识别或无法定位的对象,比如地图、Flash 和图表等
- 可以验证和识别图片
- 直接对图片进行操作,更加通俗易懂,容易维护
- 适用于 Window/Linux/Mac OS X 桌面应用,甚至是 iPhone 和 Android 模拟器的自动化测试
Sikuli 同样也有很大的缺点:
- 对于相似的图片或者按钮容易识别错误
- 由于只能对图像进行操作,因此不够灵活,一般只能用于辅助测试,比较适合于辅助 WebDriver 进行 Web 自动化测试
安装 robotframework-SikuliLibrary
pip install robotframework-SikuliLibrary
导入 SikuliLibrary
示例
- 注:我这边
Click
关键字报错“com.github.rainmanwy.robotframework.sikulilib.exceptions.TimeoutException: Timeout happened, could not find P(/Users/chengrui/Documents/TestData/baidu_logo.png) S: 0.699999988079071”,使用Get Match Score
关键字获取到的匹配度为0,难道是此库与 Python 3 不兼容?
5.2.3 SikuliLibrary 的工作原理
Robot Framework 的 SikuliLibrary 库和 Sikuli 之间的通信关系如下,借助 Robot Framework 提供的 XML-RPC 协议的 Remote 服务进行通信,通过 Remote 调用方式来连接用 Java 语言实现的 Sikuli API 操作,正是由于有了 XML-RPC协 议的远程调用,使得不管是 Python 语言、Java 语言或者其他语言都可以调用 Sikuli的Java API
- 关于 Remote 的调用方式,在后面还会继续详细讲解
另外,从 SikuliLibrary 的源码中我们也可以分析出其调用的方式,在 SikuliLibrary 的 Python 源码 sikuli.py 中有如下几个重要的 Python 函数
- __init__函数中定义了初始化操作,并且指定了默认 mode 为 OLD 模式,OLD 模式下 Sikuli 对应的 Java API 进程会在 init 初始化的时候跟随一起启动
- start_sikuli_process 函数中定义 Sikuli Java API 进程的启动过程,从源码中可以看到,启动时是通过执行 java -jar SikuliLibrary.jar 命令的方式来启动 SikuliLibrary 的 Java API 进程,通过 connect_remote_library 函数来连接启动好的 Java Remote 服务,然后通过 run_keyword 函数来执行 Ride 上传入的关键字操作
- sikuli.py 的部分源码如下: