# UIGO **Repository Path**: autoframe2021/UIGO ## Basic Information - **Project Name**: UIGO - **Description**: 📱 零代码快准稳 UI 智能录制回放平台 🚀 像素级自动兼容任意宽高比分辨率屏幕,毫秒级自动精准等待网络请求,录制回放快、准、稳!用户包含腾讯,应微信团队邀请分享了 零代码测试工具与实践(API•单元•UI) - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://github.com/TommyLemon/UIGO - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 19 - **Created**: 2024-07-02 - **Last Updated**: 2024-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

UIGO

📱 零代码快准稳 UI 智能录制回放平台 🚀

像素级自动兼容任意宽高比分辨率屏幕,毫秒级自动精准等待网络请求,录制回放快、准、稳!

录制回放 快速上手 在线工具

---

## UIGO - 📱 零代码快准稳 UI 智能录制回放平台 🚀 **像素级自动兼容任意宽高比分辨率屏幕,毫秒级自动精准等待网络请求,录制回放快、准、稳!**
适用于 一次录制到处回放、反复回归界面操作、App UI/功能 自动化测试、
帮助开发快速复现和排查 bug、方便判断 bug 原因出在前端还是后端 等,
**大量减少耗时费力又无聊的重复手工操作,大幅提高手工和自动化测试效率,**
**强力杜绝 测试和开发、前端和后端 关于缺陷单踢皮球等各种低效扯皮内耗!**
**用户包含腾讯,应微信团队邀请分享了 零代码测试工具与实践(API•单元•UI)** ### 支持功能 * **零代码 录制和回放 触屏、按键、键盘、数据 等** * **支持 16:9 标准屏、19.5:9 全面屏等各种设备屏幕** * **支持原生页面、内置 H5 网页、浏览器加载网页等** * 支持 Android 真机、Studio/Genymotion 等模拟器 * **单双指点击、长按、滑动、缩放各种像素级精细操作** * **自动精准等待、模拟 HTTP API 的请求和响应数据** * **不同机型录制回放偏差基本仅在 3 像素、2 毫秒 内** * **可从任意界面开始和停止录制、回放,绕过登录问题** * 可自动对关键步骤截屏,方便对比回放与录制差异 * **可自动和手动选择 View 及触摸区域、贴靠方式等** * 可保存录制步骤相关数据到后端数据库及从后端下载 * 可用管理端网页浏览检索用例和远程控制录制回放 * 附带 UnitAuto-机器学习零代码自动化单元测试 * 中文和英语双语文案,根据系统语言设置自动切换 ### 特点优势 相比各种 UI 录制回放/自动化测试 的 其它平台/工具/框架:

1.它们录制过程各种别扭难用反人类,甚至还需要开发/维护用例脚本、每个用例都写一大堆代码频繁部署等;
**UIGO 不需要写任何代码,录制几乎是按和人正常操作完全一样的方式,操作简单易用,录制回放快、准、稳!**

2.它们很难兼容各种不同宽高比分辨率屏幕,720P, 1080P 等 16:9 屏幕录制最多只能较好地在 16:9 屏幕回放,
即便手写代码或图像比对等也很难在列表项 View id/图标 重复控件精准定位,经常点错位置导致大量回放失败;
**UIGO 则能很好地支持 16:9, 19.5:9 等各种不同屏幕录制,然后在 720P, 1080P, 2K, 1080X2340, 1440X3200
等各种 不同机型、不同系统、不同屏幕 基本都能很好地精准回放,偏差基本仅在相当于一根头发丝的 3 像素内!**

3.它们要到处人为设置/调整操作步骤等待时间,还总是要么等太久、要么还没返回就过早执行下一步导致出错,
因为几乎无法保证网络请求在精准时间内返回,所以总是界面没加载完就滑动、弹窗没显示就点了"确定"位置等;
**UIGO 则会自动精准等待 App 发送的各种 HTTP API 网络请求,偏差基本在 2 毫秒内,比眨眼一次还要快 50 倍,
像专业的测试工程师一样精准高效地等待数据和 UI 都加载好并执行 点击、长按、滑动、缩放 等每一步对应操作!**

### 原理说明 被测项目不需要写任何用例脚本代码(逻辑代码、注解代码、配置代码等全都不要),
UIGO 会自动录制 UI 触屏操作、虚拟+实体按键操作、HTTP API 网络请求与响应、
Activity, Fragment, Dialog, PopupWindow 等各种组件(控件)元素的生命周期 等,
回放时根据录制触摸点所在被分割球划分的 上、下、左、右、居中、等比 等区域
以及 屏幕分辨率、状态栏高度、导航栏高度、键盘高度 等来自动计算出回放触摸点,
再加上 id(如果有) 相同且距离最近的 View 区域来辅助微调,高度精准回放触屏操作!
对 返回按键、键盘按键 甚至 输入框编辑过程的每个变化的字符 也都能精准无误地还原!

### 示例项目 [UIGO Android 简单测试 App](https://github.com/TommyLemon/UIGO/tree/master/UIAuto-Android) 直接 [下载](https://github.com/TommyLemon/UIGO/releases/download/0.9.0/UIAuto.apk) (第一次可能失败,返回报错 JSON,一般重试一次就可以)
[UIGO Android 复杂客户端 App](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp) 直接 [下载](https://github.com/TommyLemon/UIGO/releases/download/0.9.0/APIJSONApp.apk) (第一次可能失败,返回报错 JSON,一般重试一次就可以) #### 安装 App 必须授权 显示悬浮窗、读写文件存储 这两个权限 其它申请的权限也尽可能都勾选授权,如果不能提前授权,则在使用时弹出是否申请权限弹窗后再确认授权
https://github.com/TommyLemon/APIAuto/issues/61#issuecomment-1997047600
#### 早期零代码单机录制不同分辨率双机同时回放视频 https://www.bilibili.com/video/BV1CK4218788
#### 早期管理端网页工具零代码远程控制手机录制回放视频 https://www.bilibili.com/video/BV1wA4m137ha #### 早期仿微信朋友圈复杂 App 录制回放,弹窗、输入、网页、滑动、点击等 https://www.bilibili.com/video/BV1fH4y1E7gD #### 零代码录制回放 H5 移动端网页输入、滑动、点击等操作 https://www.bilibili.com/video/BV1TK421C7y4 ### 录制用例 1.按业务 App 提供的方式打开 UIAuto 管理首页,例如 APIJSONApp 是登录后点击首页标题,UIAuto-Android 是点击首页 [自动 UI 测试] 按钮
2.点击 Record 录制按钮 > 点击顶部悬浮长条中间的 Record 录制 按钮开始录制 > 正常操作 App > 完成一个用例过程后,点击半透明圆形 〇 悬浮球完成录制
3.(可选)点击右下角 post 按钮上传录制的操作和数据等到后端数据库,可先编辑底部的后端服务器 HTTP URL Host 地址为你自己部署的 APIJSON 后端服务
#### 录制注意事项 **1.按贴靠方式调整分割球位置及贴靠方式**
按下(MotionEvent.ACTION_DOWN 事件)对应 View 的屏幕 \[X, Y\] 坐标位置前,必须先完成这步(如果已经配置正确则跳过)
**分割球对应横纵两条分割线把屏幕分成了 左上、右上、左下、右下 4 个区域,对应数学上按坐标轴划分的 第 二、一、三、四 象限;**
点击顶部控制条左上角 # 按钮可切换单双分割球,相比单分割球可更精细地设置高级属性
**双分割球中间会出现一个长方形触控区域,默认点击位置按居中处理**,可点击切换 center 居中, ratio 等比, top 靠上, bottom 靠下, left 靠左, right 靠右;
分割球本身贴靠方式可以点击分割球来切换 top_left 左上, top_right 右上, bottom_left 左下, bottom_right 右下, ratio 等比,
ratio_top 靠上并垂直纵向等比, ratio_bottom 靠下并垂直纵向等比, ratio_left 靠左并水平横向等比, ratio_right 靠右并水平横向等比
**2.滑动要该快则快、该慢则慢**
**分页列表/网格等滑动尽量快速到底,保证不同宽高比分辨率屏幕上都能在同侧(↓ 从上往下、↑ 从下往上、→ 从左往右、← 从右往左)上显示一致;**
**点按内部 View 前可缓慢滑动保证目标出现在屏幕内,且手离开屏幕前先在同一位置稳住别动,保证不继续自动滚动(不同机型/系统对惯性滚动处理不一致导致偏差)**
**3.触控的 View 尽量都有 id,且尽量不要改动**
UIGO 会对有 id 的被触控 View 在回放时进行微调触控位置(不改变 UI 布局,仅微调触屏输入坐标位置),灵活适配不同屏幕尤其是不同品牌机型的 UI 差异
**4.最好开启托管服务器代理来录制 HTTP API 接口请求与响应流量,用于回放操作时同时回放数据**
保证回放到某个步骤和录制到同一步骤时布局一致,不会触控点按错位
**5.不要跳出 App,例如跳转外部浏览器或微信、支付宝等其它 App 来上网、登录、分享、支付等**
目前不支持跨 App 录制回放,当前 App 外的对应事件录制不到也回放不了,打算后续支持对接支持跨 App 录制回放/自动化测试 的项目,
目前碰到这个问题要么避开,要么等待或手动点 》按钮跳过等待来直接继续执行下一步

### 回放用例 1.参考 录制用例 1 来打开 UIAuto 管理首页 > 点击左下角 Remote 共享列表 按钮 > 点击打开其中一个和 App 及账号对应的用例,或者 录制用例 后直接进入用例详情界面
2.点击用例详情界面左下角 Replay 回放按钮,返回到用例对应开始录制的业务 App 界面,保证状态一致(都是刚进入后没有操作的界面,或者分页列表都下拉刷新过等)
3.点击顶部悬浮长条中间的 Replay 回放 按钮开始回放,观察每步操作前后,App 的 UI 展示、界面数据、界面跳转、弹窗显示、键盘输入等是否符合预期(和录制时表现一样)
#### 回放注意事项 **1.回放开始时 App 初始状态必须和录制时一致**
包括所在页面(最好都在首页)、列表/网格滚动距离(最好都是没滚动的初始值 0)、中英文等语言设置、字体大小和样式设置、缓存/调试等自定义配置 等
**2.系统的中英文等语言、字体大小和样式 等设置尽可能保持一致**
**3.最好开启托管服务器代理来回放录制时的 HTTP API 接口请求与响应流量数据**

### 快速上手 可先跳过这个步骤,先下载体验 App 安装包,安装后 按以下 录制用例、回放用例 文档来操作 #### 集成到被测项目 Android 客户端 App ##### 1.依赖 UnitAuto-Apk 把 [UnitAuto-Apk](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/UnitAuto-Apk) 导入到你项目 [app moudule 所在目录](https://github.com/TommyLemon/UIGO/tree/master/UIAuto-Android),[settings.gradle](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/settings.gradle) 中 ```groovy include ':UnitAuto-Apk' ``` [app moudule 目录](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/app),[build.gradle](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/app/build.gradle) 中 ```groovy dependencies { api project(':UnitAuto-Apk') } ```
##### 2.依赖 UIAuto 把 [UIAuto](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/UIAuto) 导入到你项目 [app moudule 所在目录](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp),[settings.gradle](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/settings.gradle) 中 ```groovy include ':UIAuto' ``` [app moudule 目录](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/app),[build.gradle](https://github.com/TommyLemon/UIGO/tree/master/APIJSONApp/app/build.gradle) 中 ```groovy dependencies { api project(':UIAuto') } ```
##### 2.初始化 UIAuto 在 [Application onCreate 方法](https://github.com/TommyLemon/UIGO/blob/master/APIJSONApp/app/src/main/java/apijson/demo/application/DemoApplication.java) 中初始化 ```java @Override public void onCreate() { super.onCreate(); UIAutoApp.STEP_TIMEOUT = 30*1000; // 一般为 HTTP API 网络请求超时时间 ms 毫秒值 UIAutoApp.getInstance().initUIAuto(this); } ```
##### 3.提供 UIAuto 管理界面入口 在 [AndroidManifest.xml](https://github.com/TommyLemon/UIGO/blob/master/APIJSONApp/app/src/main/AndroidManifest.xml) 中注册 [UIAutoActivity](https://github.com/TommyLemon/UIGO/blob/master/APIJSONApp/UIAuto/src/main/java/uiauto/UIAutoActivity.java) ```xml ``` 可在你项目的任何界面新增一个按钮或其它形式的入口,仅 DEBUG 模式下展示 ```xml