安卓 Android 自动化傻瓜式教程-java版(appium)
mhr18 2024-10-14 11:11 24 浏览 0 评论
还在说你不会安卓自动化,看了这篇文章,你就能迅速掌握appium的自动化了
不要感觉环境依赖安装麻烦,这些早晚你都是需要安装失业的,顺着文档挨个执行,你肯定能成功,时间最多1d,快的话半天
1、依赖基础环境安装准备
- Java JDK安装,环境变量配置
- Android SDK安装,环境变量配置
- Node js 安装(appium组件依赖node js完成脚本解析)
- Appium Desktop 安装
- 安卓模拟器安装(夜神模拟器)
2、Java开发工具安装
- idea安装
- maven安装
3、Demo开发测试
- 夜神模拟器安装有道计算器
- 开发自动化代码测试
下面是具体安装过程,有安装的可以略过直接往后看
1.1 Java JDK安装,环境变量配置
搜索进入官网,Oracle,按照指示下载(版本推荐JDK8)
一般都都选择64位
https://www.oracle.com/java/technologies/downloads/#java8-windows
Java SDK安装
- 下载后直接双击安装
- 添加环境变量,按 windows + R键,输入:sysdm.cpl
然后点击确认
- 将路径更换为自己java安装路径
JAVA_HOME
D:/***/jdk1.8.0_144
新建再CLASSPATH,注意前面的逗号和分号不能丢掉
CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
找到path环境变量,点击新建
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
验证是否成功,win+R 输入cmd,然后输入 java -version 验证java环境是否安装成功
显示以下内容表明安装成功
1.2、Android SDK安装,环境变量配置
下载链接:https://www.androiddevtools.cn/
可以下载zip或者exe(exe安装时,记住安装路径)
安装完后,进入安装路径,打开这个SDK Manager
勾选
一般根据默认推荐安装即可。
如果自选,必选项:
Android SDK Tools:基础工具包,版本号带rc字样的是预览版
Android SDK Platform-tools:从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里
Android SDK Build-tools:Android项目构建工具
SDK Platform:对应平台的开发工具,需要下载Android xxx(API xx)的版本里面已经包含了
Android xxx(API xx) :可选的各平台开发工具,一般选择最新版本即可
Extras目录:
Android Support Repository:主要是方便在gradle中使用Android Support Libraries,因为Google并没有把这些库发布到maven center或者jcenter去,而是使用了Google自己的maven仓库
Google Web Driver:被测APP里有用到H5的话就需要勾选,
Intel x86 Emulator Accelerator(HAXM installer):windows平台的Intel x86模拟器加速工具,配合Intel x86 atom/atom_64 System Image使用可加快模拟器的运行速度
下面是我的安装勾选效果
勾选后点击安装
接着配置Android SDK环境变量
- ANDROID_HOME 设置,变量名:ANDROID_HOME。变量值:sdk安装路径。
- Path 设置,同样在环境变量页面,系统变量中,找到Path,分别添加tools安装路径、platform-tools安装路径、Android新版API安装路径,均在SDK目录下。
- 验证安装是否成功,在cmd中输入adb,验证sdk是否安装配置成功。 出现图示为安装成功
1.3、node js安装
前往 https://mp.toutiao.com/profile_v4/graphic/publish , 下载然后安装
安装完后,检测版本(我这个是安装了多个版本的node,安装了nvm)
1.4、appium desktop安装
- 从github安装,https://github.com/appium/appium-desktop/releases
- 或者从 https://pan.baidu.com/s/1jGvAISu#list/path=%2F 网盘获取,我下载的是1.7.1版本
- 然后确认安装路径无误后,保存
1.5、安卓模拟器安装
- 模拟器安装
前往 https://www.yeshen.com,下载最新版本,直接安装即可
安装完成后,前往 https://m.amtc.cn/rj_list/100230.html 下载一个 有道计算器,
然后直接让apk的计算器安装包拖进夜神模拟器,直到计算器安装完成
- 模拟器adb版本替换为Android SDK adb 版本
把Android SDK目录下\platform-tools的adb.exe拷贝到Nox\bin目录(夜神模拟器的安装目录),然后删除当前目录下的nox_adb.exe,再将拷贝过来的adb.exe改名为nox_adb.exe
2、Java开发工具安装
2.1 idea安装,
https://www.jetbrains.com/idea/
2.2 maven安装
https://maven.apache.org/download.cgi
下面是具体Demo开发过程
3、Demo开发测试
- 新建maven项目
新建工程后,新建AppiumTestDemo类
package app;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;
public class AppiumTestDemo {
private AppiumDriver appiumDriver;
public static AndroidDriver<MobileElement> androidDriver;
public static AppiumDriverLocalService service;
@BeforeClass
public void setup() throws Exception {
// 手动启动appium service
connectDirect();
// 通过代码启动appium service
// startAppiumWhenConect();
}
private static void startAppiumWhenConect() {
service = AppiumDriverLocalService.buildDefaultService();
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability("platformName", "Android");
cap.setCapability("deviceName", "127.0.0.1:62001");
cap.setCapability("platformVersion", "7.1.2");
cap.setCapability("appPackage", "com.youdao.calculator");
cap.setCapability("appActivity", "com.youdao.calculator.activities.MainActivity");
System.out.println("DesiredCapabilities_init");
service.start();
System.out.println("DesiredCapabilities_init_done");
androidDriver = new AndroidDriver(service, cap);
}
private void connectDirect() throws MalformedURLException {
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(CapabilityType.BROWSER_NAME, "");
cap.setCapability("platformName", "Android"); //指定测试平台
cap.setCapability("deviceName", "127.0.0.1:62001"); //指定测试机的ID,通过adb命令`adb devices`获取
cap.setCapability("platformVersion", "7.1.2");
//将上面获取到的包名和Activity名设置为值
cap.setCapability("appPackage", "com.youdao.calculator");
cap.setCapability("appActivity", "com.youdao.calculator.activities.MainActivity");
// //A new session could not be created的解决方法
// cap.setCapability("appWaitActivity", "com.meizu.flyme.calculator.Calculator");
// //每次启动时覆盖session,否则第二次后运行会报错不能新建session
// cap.setCapability("sessionOverride", true);
appiumDriver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), cap);
}
@Test
public void plus_youdao() throws Exception {
Thread.sleep(3000);
int width = appiumDriver.manage().window().getSize().width;
int height = appiumDriver.manage().window().getSize().height;
int x0 = (int) (width * 0.8); // 起始x坐标
int x1 = (int) (height * 0.2); // 终止x坐标
int y = (int) (height * 0.5); // y坐标
// 左滑4次
for (int i = 0; i < 4; i++) {
appiumDriver.swipe(x0, y, x1, y, 500);
Thread.sleep(1000);
}
// 新手规则
appiumDriver.findElementById("com.youdao.calculator:id/guide_button").click();
// 增加线程休眠,避免后续的webView获取不到数据
Thread.sleep(1000);
for (int i = 0; i < 6; i++) {
appiumDriver.findElementByXPath("//android.webkit.WebView[@text='Mathbot Editor']").click();
Thread.sleep(1000);
}
String btn_xpath = "//*[@resource-id='com.youdao.calculator:id/view_pager_keyboard']/android.widget.GridView/android.widget.FrameLayout[%d]/android.widget.FrameLayout";
// 123 * 8
appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
appiumDriver.findElementByXPath(String.format(btn_xpath, 18)).click();
appiumDriver.findElementByXPath(String.format(btn_xpath, 19)).click();
// *
appiumDriver.findElementByXPath(String.format(btn_xpath, 10)).click();
// 111
appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
appiumDriver.findElementByXPath(String.format(btn_xpath, 17)).click();
// -
appiumDriver.findElementByXPath(String.format(btn_xpath, 15)).click();
appiumDriver.findElementByXPath(String.format(btn_xpath, 8)).click();
Thread.sleep(3000);
}
@AfterClass
public void tearDown() throws Exception {
appiumDriver.quit();
}
}
根据代码提示添加依赖包,或者手动添加
<dependencies>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.2</version>
</dependency>
</dependencies>
- 启动appium服务,如下,配置host后,点击启动
如下图,表示服务启动成功
- 启动Java代码,运行安卓模拟器里面的计算器进行计算,点击test
- 运行效果
相关推荐
- 【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报
-
近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...
- 医院信息系统突发应急演练记录(医院信息化应急演练)
-
信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...
- 一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序
-
简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...
- docker搭建系统环境(docker搭建centos)
-
Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...
- 基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)
-
SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...
- Java21杀手级新特性!3行代码性能翻倍
-
导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...
- 一文读懂JDK21的虚拟线程(java虚拟线程)
-
概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...
- 效率!MacOS下超级好用的Linux虚拟工具:Lima
-
对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...
- 所谓SaaS(所谓三维目标一般都应包括)
-
2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...
- ORA-00600 「25027」 「x」报错(报错0xc0000001)
-
问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...
- 安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)
-
前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...
- 编译安卓源码(编译安卓源码 电脑配置)
-
前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...
- 360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“
-
2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...
- Syslog 日志分析与异常检测技巧(syslog发送日志配置)
-
系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...
- 从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)
-
数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle基目录 (50)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (53)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)