appium
有两种安装方式,一种是使用npm
命令行安装方式,另外一种是下载Appium Desktop
图形化界面安装。本文使用npm
命令行安装方式。
Windows 10
64位 专业版node
已经安装 (v.10.16.3
)Java
已经安装 (jdk1.8.0_77
)
JAVA_HOME
已经设置Android SDK
已经安装
ANDROID_HOME
已经设置为了命令行使用各种工具方便,我已经将以下内容添加到环境变量
PATH
中 :
%ANDROID_HOME%\tools
%ANDROID_HOME%\platform-tools
打开一个cmd
窗口,使用如下命令安装appium
:
npm install -g appium --registry=https://registry.npm.taobao.org
备注 :
- 全局安装
- 使用国内淘宝镜像以提高速度
安装完成后使用如下命令查看所安装的appium
版本 :
appium -v
结果输出 :
1.16.0
打开一个cmd
窗口,使用如下命令安装appium-doctor
:
npm install -g appium-doctor --registry=https://registry.npm.taobao.org
备注 :
- 全局安装
- 使用国内淘宝镜像以提高速度
安装完成后使用如下命令查看所安装的appium-doctor
版本 :
appium-doctor --version
结果输出 :
1.13.0
在cmd
窗口中,使用如下命令检测针对android
平台appium
安装是否就绪 :
appium-doctor --android
然后你会看到类似如下结果 :
info AppiumDoctor Appium Doctor v.1.13.0
info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
info AppiumDoctor ✔ The Node.js binary was found at: D:\Program Files\nodejs\node.EXE
info AppiumDoctor ✔ Node version is 10.16.3
info AppiumDoctor ✔ ANDROID_HOME is set to: D:\programs\Android\sdk
info AppiumDoctor ✔ JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_77
info AppiumDoctor ✔ adb exists at: D:\programs\Android\sdk\platform-tools\adb.exe
info AppiumDoctor ✔ android exists at: D:\programs\Android\sdk\tools\android.bat
info AppiumDoctor ✔ emulator exists at: D:\programs\Android\sdk\tools\emulator.exe
info AppiumDoctor ✔ Bin directory of %JAVA_HOME% is set
info AppiumDoctor ### Diagnostic for necessary dependencies completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor ### Diagnostic for optional dependencies starting ###
WARN AppiumDoctor ✖ opencv4nodejs cannot be found.
info AppiumDoctor ✔ ffmpeg is installed at: C:\Program Files\ImageMagick-7.0.9-Q16\ffmpeg.EXE. ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
WARN AppiumDoctor ✖ mjpeg-consumer cannot be found.
WARN AppiumDoctor ✖ bundletool.jar cannot be found
info AppiumDoctor ### Diagnostic for optional dependencies completed, 3 fixes possible. ###
info AppiumDoctor
info AppiumDoctor ### Optional Manual Fixes ###
info AppiumDoctor The configuration can install optionally. Please do the following manually:
WARN AppiumDoctor ➜ Why opencv4nodejs is needed and how to install it: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md
WARN AppiumDoctor ➜ mjpeg-consumer module is required to use MJPEG-over-HTTP features. Please install it with 'npm i -g mjpeg-consumer'.
WARN AppiumDoctor ➜ bundletool.jar is used to handle Android App Bundle. Please read http://appium.io/docs/en/writing-running-appium/android/android-appbundle/ to install it. Also consider adding the ".jar" extension into your PATHEXT environment variable in order to fix the problem for Windows
info AppiumDoctor
info AppiumDoctor ###
info AppiumDoctor
info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!
info AppiumDoctor
备注 :
以上结果第一部分是必要依赖部分,由以上结果可见,所有必要的依赖条件都满足了,这说明appium
在本机可以正常使用了。
这是一个由 appium 官方提供的测试应用。
假设该应用下载到本地以后,保存为d:\ApiDemos-debug.apk
。
基于Webdriver.io
创建一个测试脚本 :
npm init -y
npm install webdriverio
index.js
// javascript
const wdio = require("webdriverio");
const assert = require("assert");
const opts = {
port: 4723,
capabilities: {
platformName: "Android",
platformVersion: "8",
deviceName: "Android Emulator",
app: "d:\\ApiDemos-debug.apk",
appPackage: "io.appium.android.apis",
appActivity: ".view.TextFields",
automationName: "UiAutomator2"
}
};
async function main () {
const client = await wdio.remote(opts);
const field = await client.$("android.widget.EditText");
await field.setValue("Hello World!");
const value = await field.getText();
assert.equal(value,"Hello World!");
await client.deleteSession();
}
main();
注意这里使用的
android
平台版本为8
,这里要求下面使用的android
虚拟机跟这里一致。
打开一个cmd
命令行窗口,使用如下命令行启动appium
:
appium
注意上面的测试脚本中使用的
android
平台版本为8
,所以要求这里使用的android
虚拟机也是版本8
。
node index.js
可以观测到如下运行结果 :
D:\tmp\Appium>node index.js
2020-01-13T07:11:59.156Z INFO webdriverio: Initiate new session using the webdriver protocol
2020-01-13T07:11:59.163Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session
2020-01-13T07:11:59.164Z INFO webdriver: DATA { capabilities:
{ alwaysMatch:
{ platformName: 'Android',
platformVersion: '8',
deviceName: 'Android Emulator',
app: 'd:\\ApiDemos-debug.apk',
appPackage: 'io.appium.android.apis',
appActivity: '.view.TextFields',
automationName: 'UiAutomator2' },
firstMatch: [ {} ] },
desiredCapabilities:
{ platformName: 'Android',
platformVersion: '8',
deviceName: 'Android Emulator',
app: 'd:\\ApiDemos-debug.apk',
appPackage: 'io.appium.android.apis',
appActivity: '.view.TextFields',
automationName: 'UiAutomator2' } }
2020-01-13T07:12:15.130Z INFO webdriver: COMMAND findElement("class name", "android.widget.EditText")
2020-01-13T07:12:15.134Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element
2020-01-13T07:12:15.135Z INFO webdriver: DATA { using: 'class name', value: 'android.widget.EditText' }
2020-01-13T07:12:17.016Z INFO webdriver: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'adb1f252-017b-48d5-999c-d0592fd307c2',
ELEMENT: 'adb1f252-017b-48d5-999c-d0592fd307c2' }
2020-01-13T07:12:17.030Z INFO webdriver: COMMAND elementClear("adb1f252-017b-48d5-999c-d0592fd307c2")
2020-01-13T07:12:17.031Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/clear
2020-01-13T07:12:17.080Z INFO webdriver: COMMAND elementSendKeys("adb1f252-017b-48d5-999c-d0592fd307c2", "Hello World!", <object>)
2020-01-13T07:12:17.083Z INFO webdriver: [POST] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/value
2020-01-13T07:12:17.084Z INFO webdriver: DATA { text: 'Hello World!',
value:
[ 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' ] }
2020-01-13T07:12:18.570Z INFO webdriver: COMMAND getElementText("adb1f252-017b-48d5-999c-d0592fd307c2")
2020-01-13T07:12:18.575Z INFO webdriver: [GET] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c/element/adb1f252-017b-48d5-999c-d0592fd307c2/text
2020-01-13T07:12:19.275Z INFO webdriver: RESULT Hello World!
2020-01-13T07:12:19.282Z INFO webdriver: COMMAND deleteSession()
2020-01-13T07:12:19.286Z INFO webdriver: [DELETE] http://localhost:4723/wd/hub/session/e1483a67-07ec-40ca-a943-9b7df98c019c