Appium手机Android自动化

目录

介绍

什么是APPium?

APPium的特点

环境准备

adb(android调试桥)常用命令

appium图形化简单使用

连接手机模拟器

使用appium桌面端应用程序

​编辑

整合java代码测试

环境准备

引入所需依赖

书写代码简单启动

​编辑

Appium元素定位

id定位

介绍

代码测试

text定位

介绍

代码测试

className定位

x-path定位

[accessibility id定位](#accessibility id定位)

坐标定位

元素等待

手势操作滑动

appium常用api


介绍

什么是APPium?

APPium是一个开源测试自动化框架,适用于原生、混合或移动Web应用程序的自动化测试工具。 APPium使用WebDriver协议驱动iOS、Android等应用程序。

APPium的特点

支持多平台(Android、iOS等)

支持多语言(python、java、ruby、js、c#等)

APPium是跨平台的,可以用在OSX,Windows以及Linux桌面系统上运行。

APPium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么client用什么语言来实现都是可以的,这就是如何做到支持多语言的原因;

APPium基于WebDriver协议,并进行了扩展。这样的好处是可以直接继承WebDriver API,Selenium(WebDriver)各种语言的binding都可以直接拿来使用,省去了为每种语言开发一个client的工作量。

Appium的哲学:不需要重新编译或者修改应用;不被一种语言或者框架约束;不重复造轮子;开源免费

环境准备

本篇博客以java语言进行测试appium,所以本地电脑需要配置好jdk,其他环境android sdk和手机模拟器也是必须的

这里只提供android sdk和appium桌面版程序,jdk和手机模拟器可以百度找下

appium所需环境

下载好后解压android sdk

安装好android后配置下环境变量

来到android安装目录

点入到以下目录下

新增ANDROID_HOME环境变量

在path中新增变量

配置好后在cmd中输入adb

appium安装一路默认即可

adb(android调试桥)常用命令

一、常用简单的adb命令:

1、adb devices: 获取设备列表和设备的状态

2、adb get-state: 获取设备的状态(设备的状态有三种:device,设备连接正常;offline,连接出现异常,设备无响应;unknown,设备未连接;)

3、adb kill-server,adb start-server: 结束,启动adb服务

4、adb install -r: 覆盖安装应用(apk)

5、adb uninstall: 卸载应用(应用包名)

6、adb pull : 将设备上的文件复制到电脑上

7、adb push : 将电脑上的文件复制到设备上

8、adb reboot : 重启设备

9、adb connect : 远程连接设备

10、adb disconnect : 断开设备连接

二、adb shell pm基本的命令:

1、列出安装在设备上的应用

adb shell pm list package -s 列出系统应用

adb shell pm list package -3 列出第三方的应用

adb shell pm list package -i 列出来源

adb shell pm list package -f 列出包名和路径

2、列出应用apk的位置

adb shell pm path packagename 列出应用apk的位置

3、列出应用的详细信息

adb shell pm dump packagename 列出应用相关的信息

4、清除应用的缓存数据

adb shell pm clear packagename 清除应用的缓存数据

5、安装卸载手机应用:

首先将test.apk文件push到手机目录中比如/data/local/tmp

adb shell pm install /data/local/tmp/test.apk 安装

adb shell pm install --r /data/local/tmp/test.apk 重新安装

adb shell pm uninstall -k packagename 卸载,加k保留缓存数据

adb shell pm install -d apk 允许降级安装

三、adb shell am基本的命令:

1、启动一个 Activity:

adb shell am start -n activityname 启动一个 Activity

2、等待页面启动完成:

adb shell am start -W activityname 等待页面启动完成

3、先停止应用再启动:

adb shell am start -S activityname 先停止应用再启动

4、结束应用:

am force-stop packagename 结束应用

三、adb shell dumpsys基本的命令:

1、监控应用数据:

adb shell dumpsys cpuinfo cpu信息

adb shell dumpsys meminfo 内存信息

adb shell dumpsys power 电源信息

adb shell dumpsys battery 电池信息

adb shell dumpsys wifi wifi信息

adb shell dumpsys notification 通知信息

adb shell dumpsys activity 获取页面信息

四、关闭某项进程,以monkey为例:

杀死monkey进程:

ps | grep monkey 查看monkey进程的pid

kill pid 杀死monkey进程

五、最近12小时的资源情况:

dumpsys procstats --hours 12 最近12小时的资源情况

六、录制屏幕命令:

adb shell screenrecord /sdcard/demo.mp4 视频录制命令

可选参数:

1、限制录制时间:

参数: --time-limit

2、指定视频分辨率大小:

参数: --size

3、指定视频的比特率:

参数: --bit-rate

4、在命令行显示log:

参数: --verbose

七、截图命令:

adb shell screencap -p /sdcard/screen.png 截图并保存到指定位置

八、input命令:

adb shell input:

<可选参数>

#text 输入文本

#keyevent 输入事件

#tap 点击

#swipe 滑动<坐标><坐标为原地,则是长按>

九、关于获取当前页面的信息:

adb shell dumpsys activity top | findstr ACTIVITY 获取当前界面的Activity

adb shell dumpsys activity | findstr mFocusedActivity 获取当前页面的activity

十、生成当前页面的xml文本:

adb shell uiautomator dump [file] 获取当前页面的xml信息

text 控件中显示的文本内容

class 控件的类型

package 包名

content-desc 说明

checkable 是否允许check

checked check状态

clickable 是否允许click

enabled 控件状态

focusable 是否允许获取焦点

focused 是否获取到焦点

scrollable 是否允许滚动

long-clickable 是否允许长安

password 是否是密码控件

selected select状态

bounds 控件绘制的长宽及位置 四个数据,分成两组,分别是 左上坐标和右下坐标

十一、打印页面的log信息:

logcat -s ActivityManager 打印页面的log信息

十二、系统操作指令

adb shell getprop ro.product.model 获取设备型号

adb shell getprop ro.build.version.release 获取设备 Android 系统版本

adb get-serialno 获取设备的序列号(设备号)

adb shell wm size 获取设备屏幕分辨率

adb shell dumpsys activity |find "mFocusedActivity" 查看前台应用包名,适用于 Android 7.0 以下,必须先启动 app

adb shell dumpsys activity |find "mResumedActivity" 查看前台应用包名,适用于 Android 8.0 以上,必须先启动 app

appium图形化简单使用

连接手机模拟器

准备apk安装包,将apk安装包安装在手机模拟器上

启动cmd窗口,输入命令查看当前连接的应用

adb devices

连接相应的手机模拟器,每个手机模拟器的端口号也不同,这里以mumu模拟器进行测试,mumu模拟器端口为7555,其他模拟器端口如下

模拟器名称 端口号


逍遥游 21503

夜神模拟器 62001

海马玩模拟器 26944

网易mumu模拟器 7555

天天模拟器 6555

BlueStacks 5555

雷电安卓模拟器 5555

天天安卓模拟器 5037

安卓模拟器大师 54001

Genymotion 5555

连接模拟器

adb connect 127.0.0.1:端口号

使用appium桌面端应用程序

打开appium

在高级设置里面进行一些配置设置

调整后保存为预设

调整简单模式的主机为本地

启动服务器

点击启动检查会话

点击自动设定进行编辑

deviceName(设备地址),platformName(平台名)

appPacage名获取:

来到android sdk安装目录

输入cmd

输入命令

aapt dump badging apk文件目录

appActivity 主启动入口获取

在刚才的命令输入后往下翻找 找到 launchable-activity(并不是所有apk都是这个字段,也可能是其他的) 字段

{

"deviceName": "127.0.0.1:7555",

"platformName": "Android",

"appPackage": "com.tencent.mm",

"appActivity": "com.tencent.mm.ui.LauncherUI",

"automationName": "UiAutomator2",

"noReset": "True"

}

编辑后另存为预设

然后启动会话

可以看到模拟器的微信随着appium自动启动了

下面以测试抖音为例

appium桌面客户端上方的工具栏都是模拟真人操作手机的操作

通过appium客户端可以像浏览器的f12调试工具一样找到页面的各元素标签,从而进行操作

如果模拟器的app页面和appium显示不一样,那是appium是截图模拟器的app进行显示的,需要手动实时刷新

整合java代码测试

环境准备

jdk8+maven5.0以上版本

引入所需依赖

复制代码
<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>6.1.0</version>
</dependency>

书写代码简单启动

启动测试 启动速度可能会有些慢,根据个人电脑配置等因素而定

Appium元素定位

id定位
介绍

使用appium进行查看元素

这个就如同html标签中的id属性一样,但是android可以允许有多个相同的id(这就有点坑)

代码测试

测试点击评论按钮

启动测试

如果页面中有多个相同id,那么将元素都放到集合中,使用集合下标索引进行取元素点击

text定位
介绍
代码测试

使用文本定位点击经验

系统太卡不再贴录屏结果了,可以自己尝试

className定位
x-path定位
accessibility id定位
坐标定位

元素等待

手势操作滑动

由于前面博主引用的版本是6.1.0,所以这里需要自定义书写滑动代码

可以自行尝试,不再贴图,太卡了o(╥﹏╥)o 博主测试可以成功

appium常用api

相关推荐
工程师老罗21 分钟前
Java笔试面试题AI答之设计模式(5)
java·开发语言·设计模式
CopyLower24 分钟前
如何确保消息只被消费一次:Java实现详解
java·开发语言
全栈弟弟30 分钟前
高级大数据开发学习路线指南
java·大数据·linux·flink·spark
蜜桃小阿雯32 分钟前
JAVA开源项目 甘肃非物质文化网站 计算机毕业设计
java·开发语言·spring boot·spring cloud·java-ee·开源
feng68_33 分钟前
Java的格式化输出
java·开发语言
quokka5634 分钟前
SpringSecurity -- 入门使用
java·笔记·学习·spring
一只经常emo的程序员37 分钟前
JAVA的函数式接口是啥?
java·开发语言·spring·kafka·eclipse·系统架构·tomcat
程序员大金41 分钟前
基于SpringBoot+Vue+MySQL的特色旅游网站系统
java·前端·vue.js·spring boot·后端·mysql·tomcat
weixin_531804241 小时前
请解释Java中的内存模型及其与并发编程的关系。什么是Java中的CAS操作?它如何保证原子性?
java·开发语言·数据库
XuanRanDev1 小时前
如何确保Java程序分发后不被篡改?使用JNI对Java程序进行安全校验
java·安全