安装 Appium
Appium是开源的自动化测试框架,主要用于iOS,Android以及Windows apps等移动平台的自动化测试。官网的介绍说是它实现一套适用于移动端的WebDriver协议,所以使用Appium时用的还是依赖于Selenium,和Web自动化测试的主要区别就在Driver不一样。
举一个例子,如果我们需要用Google Chrome来跑Selenium的自动化测试,那么首先需要一个ChromeDriver。如果需要跑在IE上,那么需要一个IEDriver。那么现在需要在移动端比如Android里跑Selenium,这时候你需要一个Appium就够了,它担当了Driver的角色。Appium实现了一套标准的WebDriver,只要Appium服务起来之后,你的代码只需要和Appium交互,Appium会去告诉设备该干嘛干嘛。这里提到的设备可以是iOS或者Android,甚至是Windows Phone 和Firefox OS。
Appium 官网: http://appium.io/
安装方式一: 使用NodeJS 安装
首先到NodeJS官网下载安装最新的NodeJS,Windows下属于傻瓜安装。安装好之后你可以配置NodeJS的安装源,在国内一般都用taobao的镜像,速度还不错。
在个人目录下新建一个 .npmrc 文件,写入:
1 |
registry=https://registry.npm.taobao.org/ |
然后使用npm命令安装 Appium
1 |
npm install -g appium |
建议顺便安装一下appium-doctor,通过运行appium-doctor命令可以快速检查appium的环境问题。
1 |
npm install -g appium-doctor |
如果安装成功,那么就可以通过 appium
命令启动appium server。
关闭命令行或者按 Ctrl - C 就可以停止 Appium Server。
安装方式二: 使用Appium安装包
网上很多教程所引导的Appium安装包一般在百度网盘或者bitbucket里,其实这两者都不是最新的。最新版的安装包应该从官网下载,Appium 目前托管在github,正确的下载地址应该为:
最新版的Appium 桌面安装后启动是这样的。
功能上和老的版本没太大区别,但是日志和UI显示更加清晰,一旦错误发生让你更容易找到问题所在。
注意,你可以不安装Appium 桌面版,但是命令行版应该还是需要安装的,因为自动化测试运行时一般都是通过命令启动和关闭Appium,桌面版并不提供命令行功能,只是为了调试方便。
关于Appium的介绍,这里有一份非常好的文档:http://appium.io/slate/cn/master
必要的环境变量设置如果你已经安装了appium-doctor,那么你只要运行appium-doctor命令就可以知道你还需要设置哪些环境变量,比如:
不要慌,其实你只需要设置以下环境变量:
环境变量 | 值 |
---|---|
ANDROID_HOME | Android SDK 的安装位置 |
JAVA_HOME | JDK 或者 JRE 的安装位置 |
加入 PATH | %ANDROID_HOME%\tools |
加入 PATH | %ANDROID_HOME%\platform-tools |
加入 PATH | %JAVA_HOME%\bin |
加入 PATH | %ANDROID_HOME%\build-tools\??version?? (可选) |
最后一个环境变量是为了更方便地使用aapt这个工具,完成环境变量配置后你可以再次运行appium-doctor进行检查。不出意外,你应该能通过检查。
Node.js测试用例
"use strict";caps.js
require("./helpers/setup");
var wd = require("wd"),
_ = require('underscore'),
serverConfigs = require('./helpers/appium-servers');
describe("android simple", function () {
this.timeout(300000);
var driver;
var allPassed = true;
before(function () {
var serverConfig = process.env.npm_package_config_sauce ?
serverConfigs.sauce : serverConfigs.local;
driver = wd.promiseChainRemote(serverConfig);
require("./helpers/logging").configure(driver);
var desired = process.env.npm_package_config_sauce ?
_.clone(require("./helpers/caps").android) :
_.clone(require("./helpers/caps").android);
// desired.app = require("./helpers/apps").taobaoApp;
if (process.env.npm_package_config_sauce) {
desired.name = 'android - simple';
desired.tags = ['sample'];
}
return driver
.init(desired)
.setImplicitWaitTimeout(3000);
});
after(function () {
return driver
.quit()
.finally(function () {
if (process.env.npm_package_config_sauce) {
return driver.sauceJobStatus(allPassed);
}
});
});
afterEach(function () {
allPassed = allPassed && this.currentTest.state === 'passed';
});
it("should find an element", function () {
return driver
.elementByAccessibilityId('Graphics')
.click()
.elementByAccessibilityId('Arcs')
.should.eventually.exist
.back()
.elementByName('App')
.should.eventually.exist
.elementsByAndroidUIAutomator('new UiSelector().clickable(true)')
.should.eventually.have.length(12)
.elementsByAndroidUIAutomator('new UiSelector().enabled(true)')
.should.eventually.have.length.above(20)
.elementByXPath('//android.widget.TextView[@text=\'API Demos\']')
.should.exists;
});
});
exports.android = {
// browserName: '',
'appium-version': '1.7.2',
platformName: 'Android',
platformVersion: '5.1',
deviceName: 'emulator-5554',
appActivity:'com.taobao.tao.homepage.MainActivity3',
appPackage:'com.taobao.taobao'
// app: undefined // will be set later
};
部分转载至:https://betacat.online/posts/2017-05-03/setup-appium-automation-test-environment/