当前位置: 首页 > 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.xdnf.cn/news/1374229.html

相关文章:

  • STM32八大模式
  • 基于单片机空调温度控制测温ds18b20系统Proteus仿真(含全部资料)
  • 人机交互如何变革科普展示?哪些技术正成吸睛焦点?
  • 初春养生指南模板页
  • Rust 登堂 之 迭代器Iterator(三)
  • el-carousel在新增或者删除el-carousel-item时默认跳到第一页的原因和解决
  • betaflight configurator 如何正确烧写飞控
  • 基于muduo库的图床云共享存储项目(二)
  • Linux 云服务器内存不足如何优化
  • 【RAG】使用llamaindex进行RAG开发
  • 6 种无需 iTunes 将照片从 iPhone 传输到电脑
  • TDengine IPv6 支持用户手册
  • “java简单吗?”Java的“简单”与PHP的挑战:编程语言哲学-优雅草卓伊凡
  • KDMS V4 重磅升级,智能迁移赋能国产化替代!
  • android证书相关
  • 像WPS Office 一样处理pdf页面尺寸
  • AI 解决生活小事 2——用 AI 做一回新闻播客
  • 使用人工智能写一个websocket聊天页面
  • PDF补丁丁:开源多年,完全免费的多功能 PDF 工具箱
  • Agno Agent​​
  • 如何借助文档控件 TX Text Control 轻松优化 PDF 文件大小?
  • 计算机视觉(三):opencv环境搭建和图片显示
  • 主键索引和普通索引的区别
  • 基于 Qt 实现的动态流程图画板框架设计与实现
  • 在Windows系统上升级Node.js和npm
  • FastAPI + SQLModel 从 0 搭到完整 CRUD
  • STL库——vector(类模拟实现)
  • skywalking 原理
  • 当AI有了温度,三星正在重新定义生活的边界
  • 技术分析 | Parasoft C/C++test如何突破单元测试的隔离难题