環境安裝
基本環境安裝
安裝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請求看看具體的錯誤信息。