演练:创建Android自动化测试

目标

  • 掌握如何定位手机应用控件
  • 掌握Android手机自动化测试流程

环境

  • 前提条件
    • 配置Android SDK环境
    • 安装Appium
    • 准备Android手机或者模拟器
  • 被测应用:Appium自带的应用API Demo

操作步骤

新建项目

打开CukeTest,【文件】—【新建项目】 项目模板选择【mobile】,分别输入【项目名】和【项目路径】,点击【创建】。

演练:创建Android自动化测试 - 图1

CukeTest会自动创建一个手机自动化测试脚本。要成功运行这个项目,请在项目目录下执行 npm install 命令安装项目依赖。

准备被测应用

测试客户端:https://github.com/appium/sample-code/tree/master/sample-code/apps/ApiDemos/bin 下载并安装到自己的手机。

编辑用例

打开文件,在【可视】界面中输入如下内容

演练:创建Android自动化测试 - 图2

对应的【文本】视图内容为:

  1. # language: zh-CN
  2. 功能: appim demo
  3. 使用CukeTestBDD的方式来做手机端的自动化测试样例。
  4. 场景: API Demo 页面跳转
  5. 假如点击App跳转到App页面
  6. 当在App页面中点击Action Bar
  7. 那么页面应该跳转到Action Bar页面,页面中应该包含"Action Bar Mechanics"

完善自动化测试代码

  1. 获取设备串号

    1. adb devices
    2. List of devices attached
    3. Y15QKCPH278J4 device
  2. 获取应用package并启动activity 命令行输入 adb logcat | findstr START 手动打开 Demo API 应用,从日志中获取。

    1. ...
    2. [android.intent.category.LAUNCHER] flg=0x10200000 cmp=io.appium.android.apis/.ApiDemos bnds=[16,640][188,832] (has extras)} from uid
    3. 10013 from pid 1943 on display 0 from pid 1943
    4. ...

    取到app的package 和 activity 为 io.appium.android.apis/.ApiDemos

  3. 修改driver定义代码

    打开 support\get_driver.js,分别修改 devicesName,appPackage,appActivity的内容。修改完成后为:

    1. const webdriverio = require('webdriverio');
    2. //设置被测应用参数
    3. let options = {
    4. desiredCapabilities: {
    5. platformName: "Android",
    6. deviceName: "Y15QKCPH278J4", //设备序列串号
    7. platformVersion: "5.1", //系统平台版本
    8. appPackage: "io.appium.android.apis", //package 名字
    9. appActivity: ".ApiDemos", //启动activity 名字
    10. resetKeyboard: true,
    11. noReset: true,
    12. unicodeKeyboard: true
    13. },
    14. host: "127.0.0.1",
    15. port: 4723
    16. }
    17. //根据参数配置创建WebDriverIO实例;
    18. function createDriver() {
    19. const client = webdriverio.remote(options);
    20. return client;
    21. }
    22. exports.driver = createDriver();
  4. 自动化测试代码 打开features/feature1.feature文件,点击 step 后面的灰色按钮,生成自动化脚本样例。

    演练:创建Android自动化测试 - 图3

    使用uiautomatorviewer 工具定位到客户端元素

    演练:创建Android自动化测试 - 图4

根据元素定位信息,完成对相关操作的代码实现”step_definitons/definitoins.js”:

  1. const { Given, When, Then } = require('cucumber')
  2. const assert = require('assert');
  3. const { driver } = require('../support/get_driver');
  4. const { $ } = require('webdriverio')
  5. //// 你的步骤定义 /////
  6. Given("点击App跳转到App页面", async function () {
  7. await driver.click('android=new UiSelector().text("App").index(2)')
  8. });
  9. When("在App页面中点击Action Bar", async function () {
  10. await driver.click('android=new UiSelector().text("Action Bar").index(0)')
  11. });
  12. Then("页面应该跳转到Action Bar页面,页面中应该包含{string}", async function (arg1) {
  13. let texts = await driver.getText('android=new UiSelector().textStartsWith("Action")')
  14. console.log(texts)
  15. return assert.ok(texts.includes(text))
  16. });

运行

  1. 启动appium

    1. appium
    2. [Appium] Welcome to Appium v1.8.1
    3. [Appium] Appium REST http interface listener started on 0.0.0.0:4723
  2. 运行项目 点击运行项目按钮,可以看到手机自动化运行。

    演练:创建Android自动化测试 - 图5