相关链接
官网:http://appium.io/
使用Java编写API文档:http://appium.github.io/java-client/
学习文档:https://www.cnblogs.com/fnng/p/4540731.html
个人站点:http://per-dyw.xyz/
技术展示
安装(仅Windows)
若电脑上未安装node.js,请先安装node.js
- 下载安装包,下载地址为:https://nodejs.org/en/download/
- 选择对应的版本,下载后,打开安装,一直下一步即可(可修改安装目录)
- 安装完成后,检测下path环境变量是否配置了Node.js,打开Windows命令提示符,输入命令"path",输出如下结果:
Android的SDK安装
相信Android开发人员都已安装好Android的SDK了,但Android的环境变量你设置了么?我本机的目录为:E:\Android\Sdk。
下面设置环境变量:“我的电脑” 右键菜单 —> 属性 —> 高级 —> 环境变量 —> 系统变量 —> 新建:
变量名 | 变量值 |
---|---|
ANDROID_HOME | E:\Android\Sdk |
找到 path 变量名—> “编辑” 添加:
变量名 | 变量值 |
---|---|
PATH | ;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools; |
安装 Appium Server
可以在Appium官方网站上下载操作系统相应的Appium版本,下载地址:https://bitbucket.org/appium/appium.app/downloads/,
若无法下载,也可使用提供的百度网盘下载地址:
链接: https://pan.baidu.com/s/1UdbSk02TzUS8BQKzOQFYfw 提取码: zus2
下载的 AppiumForWindows.zip 进行解压,点击 appium-installer.exe 进行安装。
[外链图片转存失败(img-P0g6TY8w-1568969362787)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(1)].png)
根据提示,一步一步进行安装,这里不再啰嗦。最终在会桌面上生成 Appium图标 , 双击启动,appium server 界面如下:
[外链图片转存失败(img-dxsEhT6G-1568969362788)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(2)].png)
最后,打开Windows命令提示符,输入“appium-doctor”命令,如果出现以下提示,说明你Appium所需要的各项环境都已准备完成。
[外链图片转存失败(img-9C6ADH0q-1568969362789)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(3)].png)
注:如果提示:“appium-doctor”不是内部或外部命令,找到Appium的安装目录,例如:
E:\Appium\node_modules\.bin
添加到环境变量path下面(参考Java环境的设置)
Appium-desktop
Appium-desktop是什么
Appium-Server有一两年没有更新了。Windows版在 2015 年底止步于的 AppiumForWindows_1_4_16_1.zip。
于是,新的工具 Appium-desktop 来了! 它来继续 Appium-Server的使命,当然, Appium-Server当前仍然是可用的。
注:Appium-Server最高支持模拟器Android版本为6.0,推荐使用 Appium-desktop。
下载与安装
下载地址:https://github.com/appium/appium-desktop/releases
根据自己的平台选择相关的包进行下载。本文以 Windows 为例,选择 Appium-windows-1.12.1.exe 文件进行下载,下载完成后,双击 exe 文件,等待安装完成即可。
启动运行
双击打开桌面上紫色的 appium 图标
[外链图片转存失败(img-ftguWpQd-1568969362789)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(4)].png)
点击 “启动服务器 V 1.12.1” 按钮启动服务
[外链图片转存失败(img-UsYYuao6-1568969362790)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(5)].png)
现在可以启动移动设备(真机或模拟器),编写Appium自动化测试脚本,可以通过 Appium-desktop 来运行测试。
连接真机测试
主要讲解如何连接真机进行测试。
- 手机通过USB连接电脑,选择传输文件(MTP)
[外链图片转存失败(img-qpXUTQpC-1568969362790)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(6)].png) - 打开开发者选项,允许USB调试,允许USB安装
[外链图片转存失败(img-31ApeuaI-1568969362791)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(7)].png) - 打开Windows命令提示符,输入"adb devices",可弹出电脑是否连接真机,获取到真机的devices
[外链图片转存失败(img-JynJ0Z2p-1568969362791)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(8)].png)
注:如果提示:“adb”不是内部或外部命令,找到adb的安装目录,例如:
E:\Android\Sdk\platform-tools
添加到环境变量path下面(参考Java环境的设置)
java-client安装与测试
此次主要讲解的是使用 Java 语言编写 appium 自动化测试脚本。
前提条件
- 安装 Java 环境
- 安装 IntelliJ IDEA 或 Eclipse (下面讲解的是Eclipse)
- 安装 Maven
Maven 安装 Java-client
- 启动Eclipse,创建Maven项目
[外链图片转存失败(img-ch1xAdQd-1568969362792)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(9)].png) - 导入 appium 的 Java-client
[外链图片转存失败(img-JmBqYhvB-1568969362793)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(10)].png) - 输入项目名称,id即可下一步
- 最后,pom.xml中的信息应如下:
[外链图片转存失败(img-xoTzAR4z-1568969362794)(https://per-dyw-images-1253993905.cos.ap-chengdu.myqcloud.com/Android/Appium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/clipboard%20(11)].png)
注:截止至4月26日为止,最新版本为7.0.0,最新版本号,可在github Java-client开源项目上查看。
开始测试
编写第一个Appium测试程序
启动APP
package com.test;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
public class TestLanuch {
private static String path = "E:\\Epoint\\epoint\\component\\FramePlugins\\workplatform\\release\\workplatform-release.apk";
public static void main(String[] args) throws MalformedURLException, InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "8ea41751");
capabilities.setCapability("automationName", "uiautomator2");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "8.0.0");
capabilities.setCapability("autoGrantPermissions", true);
capabilities.setCapability("app", path);
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.quit();
}
}
- deviceName:启动哪种设备,是真机还是模拟器,若是真机,填写"adb devices"获取的设备号
- automationName:使用哪种自动化引擎
- platformName:使用哪种移动平台
- platformVersion:指定平台的系统版本。例如指的Android平台,版本为8.0.0
- autoGrantPermissions:是否自动允许权限
- app:打包后,apk在本地的路径
- appPackage:应用的包名
- appActivity:应用启动页
注:若手机上本无此APP,使用参数app,不使用appPackage和appActivity,若手机上有此APP,使用appPackage和appActivity,不使用参数app。
登录APP
public static void testLogin(long time) {
if (timer == null) {
timer = new Timer();
}
timer.schedule(new TimerTask() {
@Override
public void run() {
if (driver.getPageSource().contains("com.epoint.workplatform:id/iv_cancel")) {
System.out.println("APP需要更新");
System.out.println("取消更新");
driver.findElement(By.id("com.epoint.workplatform:id/iv_cancel")).click();
if (timer != null) {
timer.cancel();
timer = null;
}
testLogin(2000);
} else if (driver.currentActivity().contains("MainActivity")) {
System.out.println("用户已登录过");
System.out.println(driver.getPageSource());
} else if (driver.currentActivity().contains("launcher.Launcher")) {
System.out.println("返回桌面");
} else if (driver.currentActivity().contains("GrantPermissionsActivity")) {
System.out.println("初次登录");
System.out.println("授予权限");
driver.findElement(By.id("android:id/button1")).click();
if (timer != null) {
timer.cancel();
timer = null;
}
testLogin(5000);
} else if (driver.currentActivity().contains("LoginActivity")) {
driver.findElement(By.id("com.epoint.workplatform:id/et_loginid")).sendKeys("dywei");
driver.findElement(By.id("com.epoint.workplatform:id/et_pwd")).sendKeys("11111");
driver.findElement(By.id("com.epoint.workplatform:id/btn_login")).click();
System.out.println("登录成功");
} else {
System.out.println("启动页时间太长");
System.out.println(driver.getPageSource());
}
}
}, time);
}
技术总结
测试脚本的编写并不局限于Java,支持多种语言,且可以实现一套测试脚本的编写完成Android端和iOS端的自动化测试,有兴趣的可以研究研究。
关注我的技术公众号,每个工作日都有优质技术文章推送。
微信扫一扫下方二维码即可关注: