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 希望浏览器执行什么样的操作
从 Selenium 官网可以下载到各种浏览器运行需要的 Driver
从 http://www.seleniumhq.org/docs/ 地址可以查询到关于 Selenium 的文档和介绍等信息
SeleniumLibrary 用户手册
pip install robotframework-seleniumlibrary
在 SeleniumLibrary 库中,Open Browser
关键字用来打开一个指定的浏览器
Close Browser
关键字用来关闭一个已经打开的当前浏览器
Input Text
关键字用于模拟向一个输入框中输入文字内容
该关键字接收两个参数[ locator| text ]
Click Button
关键字用于模拟单击页面中的按钮
Click Element
关键字用于模拟单击一个通过 locator 定位到的具体元素,可以是通过 id 或者 name、xpath 等
Click Link
关键字用于模拟单击一个链接
Add Cookie
关键字用于模拟向本地浏览器中添加一个 Cookie 缓存,Cookie 也是我们在做 Web 自动化测试时经常需要用到的一个概念
Get Cookies
关键字用于获取浏览器中缓存的所有 Cookie
Delete Cookie
关键字用于删除浏览器中缓存的 Cookie
Get All Links
关键字用来获取所有页面上所有的 href 链接的元素对应的 id,链接对应的元素中没有 id 时,就以一个空字符串代替
做自动化测试时,我们经常遇到的就是上传文件了,这里我们可以使用 Choose File
关键字完成该操作
Get Text
关键字用来获取文本内容
Get Title
关键字用来获取浏览器网页的 title
Get Value
关键字用于获取某个元素标签对应的 value 属性,
Get Webelements
关键字用来获取所有获得的 WebElement 对象的列表
Get Webelement
关键字和 Get Webelements
类似,只不过 Get Webelement
只会返回匹配到的第一个 WebElement 对象
Get Window Titles
用来获取当前已经打开的浏览器窗口的所有 Title
Go Back
和 Go To
关键字分别用来模拟对浏览器进行后退和前进的操作
GoBack
关键字不需要接收任何参数Go To
关键字接收[ url ]一个参数,url 是一个需要跳转到的地址Get List Items
关键字用来获取页面中一个下拉列表中的所有下拉选项
Get Selected List Value
关键字用于获取页面中选中的一个下拉列表的 Value 值
Select From List By Value
关键字用来模拟从指定的下拉列表中选择指定的下拉列表选项
Sikuli 是一种图形化编程技术,或者也可以说是一种图形化的自动化测试工具,平时在屏幕上看到的任何画面,Sikuli 都可以使用图像识别的方式来进行操作
Sikuli 不需要像 WebDriver 那样通过查找元素的方式去对页面进行定位,而是使用屏幕截图的方式来定位页面的按钮等,Sikuli 用于自动化测试的优点如下:
Sikuli 同样也有很大的缺点:
pip install robotframework-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 不兼容?Robot Framework 的 SikuliLibrary 库和 Sikuli 之间的通信关系如下,借助 Robot Framework 提供的 XML-RPC 协议的 Remote 服务进行通信,通过 Remote 调用方式来连接用 Java 语言实现的 Sikuli API 操作,正是由于有了 XML-RPC协 议的远程调用,使得不管是 Python 语言、Java 语言或者其他语言都可以调用 Sikuli的Java API
另外,从 SikuliLibrary 的源码中我们也可以分析出其调用的方式,在 SikuliLibrary 的 Python 源码 sikuli.py 中有如下几个重要的 Python 函数