四、移动手机自动化测试

4.1 Appium 介绍

Appium 是一个开源、跨平台的自动化测试工具,可以用来测试 Native 及混合的移动端应用,Appium 可以支持 IOS、Android 及 FirefoxOS 平台

Appium 为了实现自身提出的理念:“不必局限于某种语言或者框架来写/运行测试脚本,以及一个移动自动化的框架不应该在接口上重复造轮子”,它把 IOS、Android 等自身提供的第三方框架都封装成了一套 API,即 WebDriver

API.WebDriver(SeleniumWebDriver,Appium 对此进行了扩展)指定了客户端到服务端的协议,通过这种客户端/服务端的架构可以使用任何语言来编写客户端向服务端发送恰当的 HTTP 请求,只要 client 能够发送 http 请求给 server,那么 client 用什么语言来实现都是可以的,这就是 appium 及 webdriver 如何做到支持多语言的

Appium 的核心是一个 Web 服务器,提供了一套 REST 的接口,它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端

Appium 官网
请添加图片描述

Appium 真正的工作引擎其实是第三方自动化框架:

  • iOS:苹果的UIAutomation
  • Android 4.2+:谷歌的UiAutomator
  • Android 2.3+:谷歌的Instrumentation
  • Instrumentation由单独的项目Selendroid提供支持。

4.1.1 Appium 中的常用术语

1. Session

Appium 自动化建立在一个 Session上 运行,客户端初始化一个 Session 来与服务端进行请求和交互,客户端会发送一个 POST 请求给服务端,请求中包含一个 JSON 对象,被称作 “desired Capabilities”,然后服务端就会开启一个自动化的 Session,并且返回一个 Session ID 给客户端,客户端的后续请求都会带上该 Session ID 给服务端做识别

2. Desired Capabilities

Desired Capabilities 是一些键值对的集合 (比如,一个 map 或者 hashmap),客户端将这些键值对发给服务端,告诉服务端需要怎么执行测试

比如,我们可以把 platformNamecapability 设置为 Android,告诉 Appium 服务端,我们想要一个 Android 的 Session,而不是一个 iOS 的;也可以设置 safariAllowPopupscapability 为 True,确保在 Safari 自动化 Session 中可以使用 JavaScript 来打开新窗口

3. Appium Server

Appium Server 是基于 Node.js 实现的,可以使用 NPM 直接安装

4.1.2 Appium 服务关键字

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Appium 服务相关参数的说明

请添加图片描述

4.2 Appium Library 库的使用

安装:

pip install robotframework-appiumlibrary

请添加图片描述

4.2.1 Open Application

在 AppiumLibrary 库中,Open Application 关键字用来打开一个待测试移动 APP

Open Application    http://localhost:4723/wd/hub    platformName=Android    platformVersion=9.0    deviceName=127.0.0.1:5555    app=/Users/chengrui/Documents/TestData/alipay_wap_main.apk    appPackage=com.eg.android.AlipayGphone    appActivity=com.eg.android.AlipayGphone.AlipayLogin
  • 连接本机已经打开的 Appium 服务端,打开待测试的支付宝 APP,指定测试平台为 Android,测试的手机 deviceName 为127.0.0.1:5555 ,需要打开的APP路径为 /Users/chengrui/Documents/TestData/alipay_wap_main.apk,APP 的包名为 com.eg.android.AlipayGphone,启动的 appActivity 为 com.eg.android.AlipayGphone.AlipayLogin

请添加图片描述

4.2.2 Input Text 和 Click Element

我们可以使用安卓 SDK 提供的 UI Automator Viewer 工具来进行特定界面的资源定位或 Log Source 关键字获取页面元素信息以获得 locator
请添加图片描述

也可以通过 xpath 的方式定位元素:
请添加图片描述

另外,还可以通过 accessibility_id 的方式定位元素,accessibility_id 对应到安卓 APP 后,其对应的属性为 content-desc
请添加图片描述

Open Application   http://localhost:4723/wd/hub    platformName=Android    platformVersion=22    deviceName=98YFBP522VSU    app=C:/Users/yongqing/Desktop/app-debug.apk    appPackage=com.example.calculator    appActivity=MainActivity
Input Text  accessibility_id=输入框   23
Input Text  id=com.example.calculator:id/factortwo  12
Click Button   计算

执行结果如下:

Starting test: RobotFrameworkTest1.TestSuite5.TestCase006
20170510 14:23:09.735 :  INFO : Typing text '23' into text field 'accessibility_id=
输入框'
20170510 14:23:09.735 :  INFO : msg:find accessibility_id=输入框
20170510 14:23:16.573 :  INFO : Typing text '12' into text field
'id=com.example.calculator:id/factortwo'
20170510 14:23:16.573 :  INFO : msg:find id=com.example.calculator:id/factortwo
20170510 14:23:22.799 :  INFO : '计算'.
20170510 14:23:22.901 :  INFO : Clicking element '计算'.
Ending test:   RobotFrameworkTest1.TestSuite5.TestCase006

4.2.3 Clear Text

Clear Text 关键字用来清除输入框的数据,接收一个参数[ locator ],这里的 locator 指的就是界面元素的定位方式
请添加图片描述

4.2.4 Get Element Location

Get Element Location 关键字用来获取一个 Element 的 Location 位置,接收一个参数[ locator ]
请添加图片描述

4.2.5 Get Current Context

Get Current Context 关键字用于获取当前的上下文,不需要接收任何参数
请添加图片描述

4.2.6 Get Contexts

Get Contexts 关键字用于获取当前所有的上下文,不需要接收任何参数
请添加图片描述

4.2.7 Switch To Context

Switch To Context 关键字用来在多个 Context 之间进行切换,接收[context_name ]一个参数

我们在手机端经常会调用到 H5 页面,并且会在页面中做切换,它就可以帮助我们完成页面的切换操作

通过上面讲到的 Get Contexts 关键字可以获取到所有的 Context,然后执行此关键字就可以直接做切换了
请添加图片描述

4.2.8 Get Element Attribute

Get Element Attribute 关键字用来获取某个元素的属性值,接收[locator |attribute]两个参数

  • 当匹配到了多个元素时默认只会使用第一个元素

请添加图片描述

4.2.9 Get Network Connection Status 和 Set Network Connection Status

Get Network Connection Status 关键字用来获取手机的网络连接状态

在获取到连接状态后,会返回不同的数字

Set Network Connection Status 关键字用来设置手机的网络连接状态
请添加图片描述
请添加图片描述

4.2.10 Element Attribute Should Match

Element Attribute Should Match 关键字用来判断元素的属性值是否和预期值匹配,接收[ locator | attr_name | match_pattern | regexp=False ]四个参数

  • 当通过 locator 识别到元素超过1个元素时,会默认选择第一个元素 attr_name 参数代表所选元素的属性的名称
  • match_pattern 参数代表预期匹配值
  • regexp 代表了匹配时是否通过正则表达式来进行匹配
    请添加图片描述

4.2.11 Element Name Should Be 和 Element Value ShouldBe

这是两个断言关键字,对元素 Element 的 name 和 value 的值进行直接断言处理

Element Name Should Be 关键字用来断言指定元素的名称是否和预期的一致,接收[ locator| expected ]两个参数

Element Value Should Be 关键字用来断言指定元素的 value 值是否和预期的一致,接收[ locator | expected ]两个参数

4.2.16 AppiumLibrary 库其他的常见自动化关键字

请添加图片描述
请添加图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值