五、Web自动化测试

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 的文档和介绍等信息

SeleniumLibrary 用户手册

安装 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 BackGo 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 用于自动化测试的优点如下:

  1. 可以测试不易识别或无法定位的对象,比如地图、Flash 和图表等
  2. 可以验证和识别图片
  3. 直接对图片进行操作,更加通俗易懂,容易维护
  4. 适用于 Window/Linux/Mac OS X 桌面应用,甚至是 iPhone 和 Android 模拟器的自动化测试

Sikuli 同样也有很大的缺点:

  1. 对于相似的图片或者按钮容易识别错误
  2. 由于只能对图像进行操作,因此不够灵活,一般只能用于辅助测试,比较适合于辅助 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 的部分源码如下:
    请添加图片描述
    请添加图片描述

5.2.4 SikuliLibrary 常用关键字介绍

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值