前言
appium官网 appium.io/docs/en/2.1…
github github.com/appium/java…
本文带你从零开始编写自动化脚本 保姆级 零基础 入门教程
零、node.js安装
node.js 用于安装appium服务端 和 运行 appium服务 是运行appium的前置条件
node.js 下载地址 nodejs.org/en/download
安装完成后 cmd 输入 node -v 校验是否安装成功
若返回版本号 说明 安装成功 接下来配置 国内的阿里镜像 我们需要用到npm指令
npm是node的包管理工具 用于下载我们要用到的appium 但是国内网络较差导致大部分网站无法访问 所以需要配置 阿里镜像 cnpm
配置 cnpm
在 cmd 输入 npm install -g cnpm -registry=https://registry.npm.taobao.org 等待安装完成 即可使用 cnpm 代替 npm
在 cmd 输入 cnpm -v 验证 cnpm是否安装成功
如果指令能正常执行 说明 cnpm 安装成功
接下来就可以用 cnpm 安装 appium
一、 appium 服务端 安装
打开 cmd 输入
cnpm 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
<repositories>
<!--jitpack.io-->
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
依赖
<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…
这里语法有点变动 但是文档好像还没更新 我重新写一个
//配置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…