环境安装
基本环境安装
安装node.js
下载地址:Node.js — Run JavaScript Everywhere
安装Java JDK
下载地址:JDK Builds from Oracle
安装夜神模拟器
360上找下就能装,安装好后将夜神的bin目录,添加到系统变量的path中。
安装Android SDK
下载地址:AndroidDevTools - Android 开发工具 | Android Studio 下载 | android studio 下载 | download android studio | Android SDK 下载 | download android sdk | SDK Tools 下载 | download android sdk tools | Gradle 下载 | download gradleg
在上面的下载地址下载包:android-sdk_r24.4.1-windows.zip,解压。
然后运行:SDK Manager.exe,最少要安装一下platform-tools。
在系统的环境变量中添加:ANDROID_HOME
安装完platform-tools后,到platform-tools目录中找到adb.exe,复制这个文件到夜神的bin目录中,替换掉夜神的adb.exe和nox_adb.exe,这样才能连接上。
运行命令看看是否能连接上:
> adb devices
List of devices attached
127.0.0.1:62029 device
安装Appium
先安装服务
npm i -g appium
安装完后运行命令:appium,会有类似输出:[Appium] Welcome to Appium v3.0.1
再安装驱动
appium driver install uiautomator2
安装好驱动再运行命令:appium,会有类似输出:[Appium] - uiautomator2@4.2.9 (automationName 'UiAutomator2')
几个命令
查看设备
adb devices
List of devices attached
127.0.0.1:62029 device
连接设备
adb connect 127.0.0.1:62029 (就一个设备的情况,可以不用运行个)
查看安卓的版本
adb shell getprop ro.build.version.release
查看应用包名
adb shell dumpsys window
找到这行:mCurrentFocus=Window{55c62e4 u0 com.cadmanage.doctor/com.cadmanage.doctor.activity.LoginActivity},分别对应参数的:appPackage / appActivity
获取UI布局
adb shell uiautomator dump /sdcard/ui_dump.xml # 导出布局的xml到模拟器的存储
adb pull /sdcard/ui_dump.xml ./ # 从模拟器的存储将文件另存到电脑
编写测试(node.js)
安装依赖包
新建一个目录,在这个目录下运行:
npm init
安装webdriverio包:
npm i --save-dev webdriverio
编写测试文件
包安装好后,添加一个文件:test.js,内容如下:
const { remote } = require('webdriverio');const capabilities = {platformName: 'Android','appium:automationName': 'UiAutomator2','appium:deviceName': '127.0.0.1:62029', // 使用实际设备ID'appium:platformVersion': '7.1.2', // 指定安卓版本'appium:appPackage': 'com.cadmanage.doctor','appium:appActivity': '.activity.LoginActivity','appium:noReset': true, // 不重置应用状态
};const wdOpts = {hostname: process.env.APPIUM_HOST || '127.0.0.01',port: parseInt(process.env.APPIUM_PORT, 10) || 4723,logLevel: 'info',capabilities,
};async function runTest() {const driver = await remote(wdOpts);try {// 定位手机号输入框 (通过resource-id)const phoneInput = await driver.$('//*[@resource-id="com.cadmanage.doctor:id/et_phone"]');// 点击输入框await phoneInput.click();// 输入手机号await phoneInput.setValue('18000000003');// 稍作停顿以便观察结果await driver.pause(2000);} finally {// 关闭会话await driver.deleteSession();}
}runTest().catch(console.error);
运行测试:
启动模拟器,打开要测试的应用,运行命令:
node test.js
官方文档:安装 Appium - Appium Documentation
http请求示例:
appium本身是一个http服务,可以使用http协议请求,如:
POST http://127.0.0.1:4723/session
BODY:{"capabilities":{"alwaysMatch":{"platformName":"Android","appium:automationName":"UiAutomator2","appium:deviceName":"127.0.0.1:62029","appium:platformVersion":"7.1.2","appium:appPackage":"com.cadmanage.doctor","appium:appActivity":".activity.LoginActivity","appium:noReset":true},"firstMatch":[{}]}}
webdriverio,封装了这个请求有时候会把真实的错误原因隐藏,此时就可以直接用http请求看看具体的错误信息。