App自动化测试Appium实战(三)iOS App自动化(javascript+webdriverio)

本篇是iOS App的自动化测试实战,使用的语言是javascript,Appium client是webdriverio,自动化测试框架(driver)是XCUITest。内容包括项目初始化、capability配置、使用Appium Inspector定位元素、手势测试等。

文章目录

  • 初始化测试项目
  • 下载被测应用
  • 配置wdio.config
  • 连接Appium
  • 使用Appium Inspector定位元素
  • 写第一个测试用例
    • Select element by accessibility id
    • Select element by predicate strings
    • 手势操作
  • 运行测试用例

初始化测试项目

  1. 新建一个node.js项目:npm init
  2. 在项目目录下安装webdriverio:npm install webdriverio
  3. 初始化wdio.config文件:./node_modules/.bin/wdio config
    按你的喜好选择各个选项内容,下图是我的一些choices,可做参考。
    App自动化测试Appium实战(三)iOS App自动化(javascript+webdriverio)_第1张图片

下载被测应用

这里使用的App是Appium提供的官方的测试App,下载地址。

配置wdio.config

之前的步骤已经完成了wdio.config文件的初步配置,现在webdriverio就是client,要去连接启动Appium就需要一定的配置。

  1. 配置runner、port、path和Appium启动时的配置一致
    runner: 'local',
    port: 4723,
    path: "/wd/hub",
  1. 配置capabilities,即建立session的内容
    capabilities: [
        {
            platformName: 'iOS',
            platformVersion: '13.6',
            automationName: 'XCUITest',
            deviceName: 'iPhone 11',
            app: '/Users/qycai/exercises/appium/appium/sample-code/apps/TestApp.app',
            clearSystemFiles: true,
        }
    ],

注:在配置前确保TestApp.app已下载,XCode已有对应的device和simulator,配置教程见:App自动化测试Appium实战(二)环境准备。

连接Appium

  1. 启动Appium server,确保host和port和capabilities里的配置一样;
  2. 在specs文件夹下建一个空的测试;
describe('first test', () => {
    it('should connect Appium successfully', function () {
        console.log("Connect Appium successfully")
    });
})

  1. 命令行执行:
    ./node_modules/.bin/wdio config/wdio.ios.conf.js
    注:为了之后好区分Android和iOS的配置,这里将文件名改为wdio.ios.conf.js

测试执行成功,Appium启动了XCode,打开的simulator并且安装了App,即说明client 连接Appium成功。

使用Appium Inspector定位元素

写UI自动化测试最重要的当然是元素定位啦,下面就讲一下如何使用Appium Inspector定位元素。

  1. 启动Appium server。
  2. 打开Inspector。App自动化测试Appium实战(三)iOS App自动化(javascript+webdriverio)_第2张图片
  3. 配置要测试的设备和应用参数,这里的参数和上文wdio.config的capabilities的内容一样。
    App自动化测试Appium实战(三)iOS App自动化(javascript+webdriverio)_第3张图片
  4. Start session,就会打开simulator和被测App。
  5. 然后就可以定位元素了,对Inspector的使用可以自行探索,比较简单,下图展示了部分常用功能:
    App自动化测试Appium实战(三)iOS App自动化(javascript+webdriverio)_第4张图片

写第一个测试用例

测试用例采用PageObject的组织形式,webdriverio的各种api的使用可以查询其官网。webdriverio是适用于web UI自动化和app UI自动化的,所以很多api是通用的,但也有很多是专用于app自动化的,查询文档请谨慎。下面讲两个比较特殊的。

Select element by accessibility id

    get disabledButton() {
        return $('~DisabledButton')
    }

Select element by predicate strings

如果系统是iOS10以上并且driver是XCUITest,就可以使用predicate strings定位元素。

    get showAlertButton() {
        const selector = `type == 'XCUIElementTypeButton' && name CONTAINS 'show alert'`;
        return $(`-ios predicate string:${selector}`)
    }

手势操作

iOS手势操作api list。

homeScreen.testGesture()
        driver.execute('mobile: doubleTap', {element: mapScreen.map});
        expect(mapScreen.hongKongLabel).toHaveText('Hong Kong')

然后就可以自己尝试写测试用例了,如果有想要参考博主的,可以下载:https://github.com/qycai/appium_first_project.git

运行测试用例

  1. 运行所有测试用例:
    ./node_modules/.bin/wdio config/wdio.ios.conf.js
  2. 执行也定测试用例:
    ./node_modules/.bin/wdio config/wdio.ios.conf.js --mochaOpts.grep 'test TestApp'
    这里test TestApp是测试用例的里面的描述,不是测试文件的名字。
  3. 将执行命令放到package.json
    运行的时候直接执行对应命令即可,例如:npm run testAppTest
  "scripts": {
    "testAll": "./node_modules/.bin/wdio config/wdio.ios.conf.js",
    "testAppTest": "./node_modules/.bin/wdio config/wdio.ios.conf.js --mochaOpts.grep 'test TestApp'",
    "apiDemosTest": "./node_modules/.bin/wdio config/wdio.android.conf.js --mochaOpts.grep 'test ApiDemos'"
  }

你可能感兴趣的:(移动app测试)