当前位置:网站首页>Initial attempt at UI traversal
Initial attempt at UI traversal
2022-08-10 02:15:00 【51CTO】
对于测试人员,UI 遍历已经很普遍了,比如说 Monkey, UICrawler 等等,都可以进行 UI 遍历.那我们怎么按照顺序去遍历一个 app 呢.下面介绍一个360 开测平台上用 uiautomator 做的 UI 遍历.

实现步骤
需要的参数:包名、启动类名、遍历截止类名、遍历时间、遍历总步数、遍历中需要登录的账号、登录密码.
实现思路:
①. 启动当前的 apk
②. 添加界面变化监听
③. dump界面组件元素
④. 排列界面组件元素
⑤. 比对界面元素
⑥. 操作界面组件元素,截图绘制
⑦. 遍历结束,停止UI遍历
详细说明

NUM 1

初始化参数配置


NUM 2
监听界面变化,这里我们添加 AccessibilityService 进行界面变化的监听,主要监听界面的三个变化,
TYPE_WINDOW_STATE_CHANGED, TYPE_WINDOW_CONTENT_CHANGED, TYPE_VIEW_CLICKED 窗口变化, 窗口内容变化,点击事件变化监听.

我们做一些初始化的判断:
1、包名是否正确

2、类名是否获取成功

- 软件盘弹出来了,关掉软件盘输入


NUM 3-4
dump 界面组件元素,我们在这里只 dump 一些我们可以操作的界面元素,比如说可以点击的,可以滑动的界面元素.
在 dump 的过程中,我们可以按照一般的 app 出现的特殊情况进行一个排序,比如列表的话,我们只取在界面范围内的元素,ViewPage ,我们可以优先取出来:

判断列表在点钱界面有几个子界面可以 dump:

判断当前的控件是否显示在可见屏幕范围内:

保存数据:


NUM 5
比对界面元素,判断当前要操作的组件.

我们怎么比对当前界面操作的元素呢:这里分为两种比对方式
1、MD5 比对, 在存储的串中,当前操作的MD5是否和当前界面生成的MD5是否相同.

2、比对图片的相似度,每点击一次,比对一个图片相似度,如果存在相同的部分,直接抽取数据进行排列组合生成一个新的 list


NUM 6
操作界面元素


NUM 7
停止UI遍历
停止条件:遍历时间和设置时间相同, 遍历步数和设置的步数相同, 返回手机屏幕界面,遍历结束


效果
SCREENSHOT

边栏推荐
- 商业模式及其 SubDAO 深入研究
- 嵌入式Qt-实现两个窗口的切换
- Interdepartmental Communication Skills
- 【UNR #6 C】稳健型选手(分治)(主席树)(二分)
- 万字总结:分布式系统的38个知识点
- 什么是一网统管?终于有人讲明白了
- Docker interview question 2--get the number of database connections and docker-compose
- C# 四舍五入 MidpointRounding.AwayFromZero
- Entity FrameWork Core教程,从基础应用到原理实战
- C# rounding MidpointRounding.AwayFromZero
猜你喜欢

万字总结:分布式系统的38个知识点

DHCP——动态主机配置协议

使用 GoogleTest 框架对 C 代码进行单元测试

HCIP——综合交换实验

Pagoda measurement - building LightPicture open source map bed system

type-C 边充电边听歌(OTG) PD芯片方案,LDR6028 PD充电加OTG方案

RedHat红帽RHEL7安装与使用,VMware Workstation16 Pro虚拟机的安装与使用

数据建模已死,真的吗?
![[Turn] Typora_Markdown_ picture title (caption)](/img/67/589eed8de86bff9fc017ae7c409410.png)
[Turn] Typora_Markdown_ picture title (caption)

对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告
随机推荐
color socks problem
【CAS:41994-02-9 |Biotinyl tyramide】Biotinyl tyramide price
分析 20 个 veToken 生态系统协议 这种代币模型为何受欢迎?
@PostConsturct注解作用及特点
Pyscript,创建一个能执行crud操作的网页应用
删除表空间数据文件
数据建模已死,真的吗?
hint: Updates were rejected because the tip of your current branch is behind hint: its remote counte
Sikuli's Automated Testing Technology Based on Pattern Recognition
UI遍历的初步尝试
你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
微信账户体系科普:什么是UnionId、OpenId与wxopenid?
Unity vertex animation
Prometeus 2.31.0 新特性
type-C 边充电边听歌(OTG) PD芯片方案,LDR6028 PD充电加OTG方案
【Swoole系列3.5】进程池与进程管理器
GB28181 sip和RTSP(Real-Time Streaming Protocol)实时流控制协议
小程序实现搜索功能续
万字总结:分布式系统的38个知识点
【Grpc】报错:status = StatusCode.UNIMPLEMENTED details = ““