使用appium对安卓(使用夜神模拟器)运行自动化测试

环境安装

基本环境安装

安装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,内容如下:

javascript 复制代码
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请求看看具体的错误信息。

相关推荐
程序员杰哥21 小时前
Jmeter+Jenkins接口压力测试持续集成
自动化测试·软件测试·python·测试工具·jmeter·jenkins·压力测试
天才测试猿1 天前
测试用例如何评审?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Warren982 天前
Appium学习笔记
android·windows·spring boot·笔记·后端·学习·appium
测试老哥5 天前
Jmeter自动化性能测试常见问题汇总
自动化测试·软件测试·测试工具·jmeter·接口测试·压力测试·性能测试
测试19985 天前
Web自动化测试:测试用例流程设计
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
测试老哥7 天前
pytest+requests+allure自动化测试接入Jenkins学习
自动化测试·软件测试·学习·测试工具·职场和发展·jenkins·pytest
xt19892887 天前
pytest+yaml+allure接口自动化测试框架
自动化测试·pytest·接口自动化·框架封装
程序员三藏8 天前
Selenium+python自动化测试:解决无法启动IE浏览器及报错问题
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例