当前位置: 首页 > news >正文

使用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,内容如下:

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请求看看具体的错误信息。

http://www.dtcms.com/a/353023.html

相关文章:

  • 解释器模式及优化
  • HIVE的Window functions窗口函数【二】
  • flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践
  • 性能测试-jmeter实战6
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(21):文法+单词第7回3
  • 学习嵌入式的第二十八天——线程
  • 趣味学Rust基础篇(变量与可变性)
  • RCLAMP0504M.TBT电子元器件Semtech 低电容、四通道TVS二极管阵
  • Web漏洞
  • More Effective C++条款12:理解抛出一个异常与传递一个参数或调用一个虚函数间的差异
  • 火焰传感器讲解
  • 函数指针的简化
  • 毕业项目推荐:27-基于yolov8/yolov5/yolo11的电塔缺陷检测识别系统(Python+卷积神经网络)
  • MCP模型库深度解析:AI智能体工具调用生态的多元化与规模化发展
  • SciPy科学计算与应用:SciPy图像处理入门-掌握scipy.ndimage模块
  • 1 vs 10000:如何用AI智能体与自动化系统,重构传统销售客户管理上限?
  • 从高层 PyTorch 到中层 CUDA Kernel 到底层硬件 Tensor Core
  • fortran notes[2]
  • More Effective C++ 条款11:禁止异常流出析构函数之外
  • 自学嵌入式第二十九天:Linux系统编程-线程
  • 零后端、零配置:用 AI 编程工具「Cursor」15 分钟上线「Vue3 留言墙」
  • 从“找不到”到“秒上手”:金仓文档系统重构记
  • 深度学习-----详解MNIST手写数字数据集的神经网络实现过程
  • Linux系统使用ADB同时连接多个Android设备
  • 一、Mac(M1)本地通过docker安装Dify
  • 【Day 35】Linux-主从复制的维护
  • C语言中的static vs C++中的static:相同关键字,不同境界
  • golang13 单元测试
  • KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
  • uniapp中 ios端 scroll-view 组件内部子元素z-index失效问题