前言
由于目前我们公司android测试还是纯手点 最近又闲的没事 领导让捣鼓下自动化测试 故研究研究
appium官网 appium.io/docs/en/2.1...
github github.com/appium/java...
阅读本文章 默认你了解android开发
如 android 环境 jdk 环境等 都不再赘述
如果 npm 由于网络问题无法访问 可使用 cnpm
一、 appium 服务端 安装
因为安装appium需要使用npm安装 所以需要先安装nodejs
我们选windows平台的 .msi 后缀的 安装即可
安装完node后 打开 cmd 输入
npm i --location=global appium
npm 就会开始自动获取appium相关包
这里等待几分钟等appium安装完毕
出现下图所示表示安装成功

验证下 在 cmd 直接输入
appium
出现下图所示 表示appium服务启动成功

这个时候可以通过浏览器访问验证一下
可以看到 如下提示 因为还没装驱动
{"status":9,"value":{"error":"unknown command","message":"The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource","stacktrace":""}}
在 cmd 里 按 ctrl + c 退出服务 准备安装驱动
二、 安装 UiAutomator2 驱动
1. 准备环境
1) android sdk
可以在这里下载 sdk管理工具
Android SDK platform tools developer.android.com/studio/rele...
不过这里推荐直接安装 android studio 来管理 sdk
android studio developer.android.google.cn/studio?hl=z...
我这里 android studio 安装的sdk路径是
C:\Users\Administrator\AppData\Local\Android\Sdk
所以配置环境变量就是
ANDROID_HOME -> C:\Users\Administrator\AppData\Local\Android\Sdk
2) jdk
这里 appium 要求 最低 jdk 9
openjdk openjdk.org/install/
如果 android studio 会自带一个openjdk 的版本
3) 模拟器 或 真机
这里我用真机 并且 打开 开发者模式
2. UiAutomator2 驱动安装
在 cmd 里输入
appium driver install uiautomator2
出现如图所示 说明安装成功

这里安装的时候执行了20遍命令才安装成功,这里查了一波资料 只要网络没问题 感觉就是随缘吧 ~
3. 重启 appium 服务
appium

可以看到 已经装载了 uiautomator2 驱动
三、编写测试脚本
这里官方支持 多种语言编写脚本 js, Python, Java, Ruby 等
由于我是android开发 我这里就用java编写脚本了
java-client github.com/appium/java...
1. 新建测试项目
这里用 IDEA 新建一个 Java 项目 这里我使用jdk17 (官方说 最低支持到jdk 11) 使用maven依赖
2. 导入 java-client 依赖
引入jitpack
xml
<repositories>
<!--jitpack.io-->
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
依赖
xml
<dependencies>
<!--appium java client-->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>9.0.0</version>
</dependency>
</dependencies>
这里最新版是9.0.0 这个包依赖有点多啊 耐心等待
3. 编写脚本
一个简单的案例 github.com/appium/java...
这里语法有点变动 但是文档好像还没更新 我重新写一个
java
//配置apk信息
UiAutomator2Options options = new UiAutomator2Options()
.setUdid("7XBNW18A26012407")//模拟器 或者 真机的 UDID
.setApp(apkUrl) //你电脑上apk包的路径
.setAppPackage("packageName") //包名
.setAppActivity("packageName.HomeActivity");//启动页
//配置android驱动 这里是手机连接到服务器的网络地址
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), options);
//获取弹窗xml
String dialogRes = driver.getPageSource();
System.out.println("弹窗元素: "+dialogRes);
//找元素 这里找 R.id.tv_confirm
WebElement tv_confirm = driver.findElement(AppiumBy.id("packageName:id/tv_confirm"));
//点击 R.id.tv_confirm
tv_confirm.click();
//重新获取页面xml
String layoutRes = driver.getPageSource();
System.out.println("页面元素: "+layoutRes);
//找账号输入框
WebElement et_login_account = driver.findElement(AppiumBy.id("packageName:id/et_login_account"));
//焦点
et_login_account.click();
//输入账号
et_login_account.sendKeys("123456@abc.com");
//收起键盘
driver.hideKeyboard();
//设置显式等待 等待登录按钮出现
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 设置最大等待时间为10秒
wait.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.id("packageName:id/btn_login"))); // 等待下一个元素出现
//找密码输入框
WebElement et_login_password = driver.findElement(AppiumBy.id("packageName:id/et_login_password"));
//焦点
et_login_password.click();
//输入密码
et_login_password.sendKeys("1234qwer");
//系统安全键盘 收起键盘无效 使用back
driver.pressKey(new KeyEvent(AndroidKey.BACK));
//设置显式等待 等待登录按钮出现
WebDriverWait wait2 = new WebDriverWait(driver, Duration.ofSeconds(10)); // 设置最大等待时间为10秒
wait2.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.id("packageName:id/btn_login"))); // 等待下一个元素出现
//找登录按钮
WebElement btn_login = driver.findElement(AppiumBy.id("packageName:id/btn_login"));
//点击 登录按钮
btn_login.click();
//设置显式等待 等待设备列表刷新完成
WebDriverWait wait3 = new WebDriverWait(driver, Duration.ofSeconds(10)); // 设置最大等待时间为10秒
wait3.until(ExpectedConditions.presenceOfElementLocated(AppiumBy.xpath("//*[@text='早上好']"))); // 等待下一个元素出现
//结束脚本
driver.quit();
这是一个 启动APP后 模拟输入 登录账户 然后等待首页数据刷新完成的脚本
- 这里的 UDID 可以通过
adb devices -l
获取 - AppiumBy.id("packageName:id/btn_login") 匹配id
- AppiumBy.xpath("//*[@text='早上好']") 匹配文本
- 获取元素定位 github.com/appium/appi...