本篇是iOS App的自动化测试实战,使用的语言是javascript,Appium client是webdriverio,自动化测试框架(driver)是XCUITest。内容包括项目初始化、capability配置、使用Appium Inspector定位元素、手势测试等。
npm init
npm install webdriverio
./node_modules/.bin/wdio config
这里使用的App是Appium提供的官方的测试App,下载地址。
之前的步骤已经完成了wdio.config文件的初步配置,现在webdriverio就是client,要去连接启动Appium就需要一定的配置。
runner: 'local',
port: 4723,
path: "/wd/hub",
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实战(二)环境准备。
describe('first test', () => {
it('should connect Appium successfully', function () {
console.log("Connect Appium successfully")
});
})
./node_modules/.bin/wdio config/wdio.ios.conf.js
测试执行成功,Appium启动了XCode,打开的simulator并且安装了App,即说明client 连接Appium成功。
写UI自动化测试最重要的当然是元素定位啦,下面就讲一下如何使用Appium Inspector定位元素。
测试用例采用PageObject的组织形式,webdriverio的各种api的使用可以查询其官网。webdriverio是适用于web UI自动化和app UI自动化的,所以很多api是通用的,但也有很多是专用于app自动化的,查询文档请谨慎。下面讲两个比较特殊的。
get disabledButton() {
return $('~DisabledButton')
}
如果系统是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
./node_modules/.bin/wdio config/wdio.ios.conf.js
./node_modules/.bin/wdio config/wdio.ios.conf.js --mochaOpts.grep 'test TestApp'
test TestApp
是测试用例的里面的描述,不是测试文件的名字。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'"
}