自动化工具 基于 Appium 的 App UI 遍历 & Monkey 工具 (支持操作步骤回放)

Justin · 2018年05月06日 · 最后由 TesterWa 回复于 2023年01月29日 · 7667 次阅读
本帖已被设为精华帖!

UICrawler

https://github.com/lgxqf/UICrawler

基于 Appium 1.8.1 开发的 App UI 遍历 & Monkey 工具 (Java 版 )

QQ 技术交流群 : 728183683

环境搭建及基本使用说明: https://testerhome.com/topics/14490 (感谢网友 harsayer 倾力之作)

2.0 版 功能描述

1.UI 遍历及以下功能 Android/iOS

  • 基于深度优先的原则,点击 UI 上的元素。当发现 Crash 时会提供操作步骤截图及相应的 Log. * Android 提供 logcat 的 log. iOS 提供系统 log 及 crash 相应的 ips 文件
  • 元素遍历结束或按下 Ctrl + C 键会生成 HTML 测试报告。测试报告中汇集了测试统计、log 及截图的相应信息
  • 同一个元素只会点击一次 (白名单中的元素可能会被多次点击)
  • 支持对输入框的文本输入 (需在文件中进行配置 INPUT_TEXT_LIST)
  • 统计每个 Activity 点击数量 (Android)
  • 支持滑动动作
  • 支持根据关键字和控件类型触发 Back key(Android)

2.Monkey 功能及以下事件 Android/iOS

  • 随机位置点击
  • 通过黑名单控制不想点击的区域
  • 特殊位置点击 (需在文件中进行配置)
  • 特殊位置长按 10 秒 (需在文件中进行配置)
  • 任意方向及长度的滑动
  • 触发 Home 键 (Android Only)
  • 触发 Back 键 (Android Only)
  • 重启 app
  • 及以下手势操作 (位置随机) * 双击 双指放大 双指缩小 拖拽

3.微信小程序

  • 微信小程序 Monkey (iOS & Android)
  • 微信小程序 UI 遍历 (Android only)

4.其它功能

  • 运行时间限制
  • 每次点击都会生一个一截图,截图中被点击的位置会用红点标注,方便查找点击位置
  • 当检查到 Crash 时,为每个 Crash 提供单独的操作步骤截图和 mp4 格式的视频文件
  • 生成整体操作步骤视频,方便重现发现的问题
  • 性能数据采集,执行时添加-e 参数
  • Android : 每秒采集一次 CPU 和 Memory 数据 生成 perf_data.txt 并写放到 influxDB(需单添加-x 参数,且 influxDB 要单独安装)
  • iOS: 要求以 appium --session-override --relaxed-security 启动 appium, 之后会生成 XCode instrument 能直接读取的性能数据 详见 https://appiumpro.com/editions/12

5.待开发功能

  • 将性能数据通过 grafana 显示
  • 支持遍历顺序控制
  • 根据执行步骤重现 bug
  • 划动半屏 划动一屏
  • 黑名单支持 XPath

运行工具

1.下载 Jar 包

UICrawler.jar

2.下载配置文件

config.yml

3.根据待测试 App 修改配置文件中下列各项的值 详情见 Config.md

Android

  • ANDROID_PACKAGE
  • ANDROID_MAIN_ACTIVITY iOS
  • IOS_BUNDLE_ID
  • IOS_BUNDLE_NAME
  • IOS_IPA_NAME Monkey 配置项可选, 详情见 Monkey 配置

4.启动 appium

appium --session-override -p 4723
-p 设定appium server的端口 , 不加参数默认为4723

5.1 运行元素遍历 (必须有 yml 配置文件)

java -jar UICrawler.jar -f config.yml -u udid -t 4723
-u 指定设备udid
-t 指定appium server的端口(此项为可选项,默认值是4723)

5.2 运行 Monkey 功能

java -jar UICrawler.jar -f config.yml -u udid -t 4723 -m

5.3 运行微信小程序测试,需修改 MINI_PROGRAM_NAME 的值,并按照下面的值设置 CRITICAL_ELEMENT 中相应的值,才会启动微信进入小程序

#小程序
MINI_PROGRAM:
  MINI_PROGRAM_NAME: 此处值为待测的小程序的名字
  MINI_PROGRAM_PROCESS: com.tencent.mm:appbrand1

CRITICAL_ELEMENT:
  #Android 微信
  ANDROID_PACKAGE: com.tencent.mm
  ANDROID_MAIN_ACTIVITY: com.tencent.mm.ui.LauncherUI

  #iOS 微信
  IOS_BUNDLE_ID: com.tencent.xin
  IOS_BUNDLE_NAME: 微信
  IOS_IPA_NAME: wechat

查看支持的参数

java -jar UICrawler.jar -h

    -a  Android package's main activity
    -b  iOS bundle id
    -c  Maximum click count
    -d  Maximum crawler UI depth
    -e  Record performance data
    -f  Yaml config  file
    -h  Print this usage information
    -i  Ignore crash
    -l  Execution loop count
    -m  Run monkey
    -p  Android package name
    -r  Crawler running time
    -t  Appium port
    -u  Device serial
    -v  Version
    -w  WDA port for ios
    -x  Write data to influxDB

一些常用命令

查看设备udid
Android:
  adb devices
iOS:
  instruments -s  devices
  idevice_id -l

Android 查看apk 和 Main activity
  ./aapt dump badging "apk"  | grep launchable-activity
  aapt 通常在android sdk的 build-tools目录下
  windows中将grep换成findstr
  "apk"是apk文件路径

配置文件主要可配置项

  • 截图数量控制
  • 黑名单、白名单
  • 限制遍历深度、次数、时间
  • 遍历界面元素的 xpath
  • 自动登录的用户名和密码及相应的 UI 元素 ID
  • 待输入文本列表及待输入的控件类型
  • Monkey 触发事件类型及比率

注意事项

  • iOS 设备一定要打开"开发者选项"里的 “Enable UI Automation” https://www.jianshu.com/p/a1d075b3472c
  • iOS 测试包必须是 debug 版的
  • 同时运行多台 ios 设备时要每台设备要设置不同的 IOS_WDA_PORT : 8001-8888

测试报告

共收到 140 条回复 时间 点赞
  • 支持这个工具
  • 对这些不是太了解,工具是否有可以定制预期结果?还是遍历后不 crash,就认为达到测试目的了?
  • ps: 顺便吐槽下,leader 说不做检查点的自动化没意义,只能呵呵, 真是头发不长,见识也不长.
仅楼主可见
wangchen_neuq 回复

谈不上什么改进,遍历的方法不同 appcrawler 做的还是比较完善的 我这个只提供比较基础的遍历功能。再者 app cralwer 我也没怎以用过。。。

谢谢支持:)

hellohell 回复

谢谢支持 这个工具只是简单的点击 UI 上的元素 发现因元素点击导致的 crash 问题 比较适用界面复杂 层次比较深的 app 至于预期结果能不能定制,我的回答是 预期结果就是不 crash :) 不 crash 也只能说明 app 基本上还算稳定 ,算是稳定性测试的辅助手段

Justin 回复

懂了;靴靴;

我们公司有个同事给我推了这个工具,这个工具是 github 上开源的吗?

abelsheng 回复

目前还在测试阶段 还没开源 以后会开源

9楼 已删除

支持,老早之前看到@quqing也写了一个 java 版本的,后来自己集合这 2 者也做了一个广度优先的版本

Justin #11 · 2018年05月07日 Author
Unmurphy 回复

有链接吗 发来看看 我也学习学习

Justin #12 · 2018年05月07日 Author

至于区别用了就知道了 实践出真知 哈

Justin #13 · 2018年05月07日 Author
wangchen_neuq 回复

BTW, 那些头发不长 见识不长 又不听别人意见的管理者 确实挺烦人的。。。

14楼 已删除
15楼 已删除
Justin #16 · 2018年05月09日 Author

appcrawler 的不太清楚 你可以参考 iosmoney 里面也有截图时加红点

forEach+random 搞定这个问题

Justin #18 · 2018年05月09日 Author

等过一阵放出了源码 你可以研究一下 就是调用 java 的下些库函数 在图片上画圆

期待楼主完善,之后可以申请加精

学习了一下 appcrawler,奈何源码是 Scala 的,看起来比较吃力,非常期待您的 java 版 UIcrawler 源码,BTW,后续要是也能支持自己写插件就更好了,楼主加油!

在三星 s7 edge 上测试了一下,发现进入一个页面以后,要等待很长时间才会有下一步操作。

22楼 已删除
Justin #23 · 2018年05月10日 Author
knowway 回复

你的 S7 是 android 7 吗? 装 uiautomator2 server apk 了吗

Justin #24 · 2018年05月10日 Author

Good to know about that :)

Justin #25 · 2018年05月10日 Author
木头 回复

还在测试阶段 有些小 bug 还在加一些功能 6 月中旬前估计能开源

Justin #26 · 2018年05月10日 Author
木头 回复

插件目前还没考虑 不过以后可能会考虑加插件 谢谢你的建议

ITEM_WHITE_LIST
是表示有这些按钮的时候优先点它们吗?

执行报错,Android6.0,华为荣耀 7
为啥要往/system/bin/sh 上面写结果呢?
lz 帮忙看看有啥解决办法?

$ java -jar UICrawler.jar -f config.yml -u MYV0215818005565 -t 4723
14:47:33.227 [main] INFO  Crawler - /Users/waterhuang/Downloads/UICrawler/config.yml
14:47:33.231 [main] INFO  util.ConfigUtil - Reading config file /Users/waterhuang/Downloads/UICrawler/config.yml
14:47:33.344 [main] INFO  util.ConfigUtil - Config : PORT = 4723
14:47:33.344 [main] INFO  util.ConfigUtil - Config : MAX_CLICK_COUNT = 100000
14:47:33.347 [main] INFO  util.ConfigUtil - Config : ANDROID_PACKAGE = xxx.xx
14:47:33.347 [main] INFO  util.ConfigUtil - Config : ANDROID_MAIN_ACTIVITY = .xxx.xxxxxx
14:47:33.368 [main] INFO  util.Driver - ===== Method : prepareForAppiumAndroid   
14:47:33.524 [main] INFO  util.Util - adb -s MYV0215818005565 shell getprop | grep version.sdk  ---output is : /system/bin/sh: grep: can't execute: Permission denied
getprop: write: Broken pipe
14:47:33.525 [main] INFO  util.Driver - sdk version : re
Exception in thread "main" java.lang.NumberFormatException: For input string: "re"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.valueOf(Integer.java:766)
    at util.Driver.getSDKVersion(Driver.java:912)
    at util.Driver.prepareForAppiumAndroid(Driver.java:823)
    at Crawler.main(Crawler.java:98)
14:47:33.559 [Thread-1] INFO  Crawler - 0 elements are clicked
14:47:33.559 [Thread-1] INFO  Crawler - ==============list end==========
14:47:33.560 [Thread-1] INFO  util.XPathUtil - Method: getClickCount
14:47:33.570 [Thread-1] INFO  util.Util - Write to file report.html
14:47:33.571 [Thread-1] INFO  Crawler - 

------------------------------Test report :/Users/waterhuang/Downloads/UICrawler/MYV0215818005565-2018-05-11-14_47_33/report.html

大佬大佬,学习了

我 15 岁就出来打工,从以前的一无所有到现在的身无分文,我就是我,看到自己都上火。其实也不要为了眼前的境地而悲伤,也许明天更绝望了。

Justin #31 · 2018年05月11日 Author
water 回复

adb -s MYV0215818005565 shell getprop | grep version.sdk 这个是 linux 上运行的命令 你的电脑是 windows?

Justin #32 · 2018年05月11日 Author
water 回复

白名单的意义是 所有包含白名单文本的控件 有会被点击多次 (元素遍历会限制同一个元素只点击一次,白名单中的元素无些限制)

Justin #33 · 2018年05月11日 Author
Justin 回复

这个命令你直接运行 报错吗?

Justin 回复

我的是 mac

Justin 回复

单独运行这个命令是没问题的哦!可以成功返回:

adb -s MYV0215818005565 shell getprop | grep version.sdk
[ro.build.version.sdk]: [23]

帮忙解决一下撒~~否则你的工具在 mac 上用不了哎
mac 上面没有 /system/bin 目录哦!

Justin #36 · 2018年05月14日 Author
water 回复

我就是在 mac 上开发的 也是在 mac 上测试的 没有这个问题啊 你用 env 查查 SHELL bash 的目录是什么?

Justin 回复

SHELL=/bin/bash

Justin 回复

真的不行啊…………

Justin 回复

请看下面的例子,进入 adb shell 之后,再执行 grep 就会报错,android 里面没有 grep 命令,报错跟我现在的情况一样的。而直接 adb -s MYV0215818005565 shell getprop | grep version.sdk 是不会报错,因为 Mac 上有 grep。
请帮忙解决一下呗!考虑一下 adb shell 里面不支持 grep 的手机的情况。

99-6-88-54:UICrawler waterhuang$ adb -s MYV0215818005565 shell getprop | grep version.sdk
[ro.build.version.sdk]: [23]
99-6-88-54:UICrawler waterhuang$ adb shell
shell@HWPLK:/ $ getprop | grep version.sdk
/system/bin/sh: grep: can't execute: Permission denied
getprop: write: Broken pipe
Justin #40 · 2018年05月14日 Author
water 回复

这个命令是在 mac 上运行的 不是在 adb shell 后运行的 | 是管道符 你可以查查相关资料

Justin #41 · 2018年05月14日 Author
water 回复

你是 Java9 吗? 我用的是 Java8

Justin 回复
java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Justin #43 · 2018年05月14日 Author
water 回复

OK, 我再改改代码 一会改完了告诉你 你试一下 看行不行

Justin 回复

但是实际结果就是在 adb shell 后台运行了 grep 结果报错。你这边能处理一下吗?例如先获取出来之后用 java 来截取版本。

Justin 回复

好的,多谢啦!早点开源出来我可以帮忙一起改

谢谢支持 下个月估计差不多能开源 还有一些 bug 没改完 功能上还需要完善一下 然后就可以开源了

Justin 回复

这个版本也太大了……要下一个多小时

Justin #49 · 2018年05月14日 Author

恩 因为加入了测试回放的功能 引入了一些包 所以比较大。。。

Justin 回复

能发到我邮箱吗?实在受不了十几 k 的下载速度了 312743168@qq.com

Justin 回复

或者 qq 发我?

Justin #52 · 2018年05月14日 Author

好 我发你 qq 邮箱

Justin 回复
java -jar UICrawler.jar -f config.yml -u MYV0215818005565 -t 4723
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:314)
    at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:268)
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:316)
    at java.util.jar.JarVerifier.update(JarVerifier.java:228)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
    at java.util.jar.JarFile.getInputStream(JarFile.java:450)
    at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:977)
    at sun.misc.Resource.cachedInputStream(Resource.java:77)
    at sun.misc.Resource.getByteBuffer(Resource.java:160)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:454)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

运行直接报这个错

Justin #54 · 2018年05月14日 Author
water 回复

这是什么鬼 :( , 莫非我打包有问题? 我试试啊

Justin 回复

我百度的结果就是打包的时候有问题

1.第一种解决:导入jcommander-1.48.jar包后运行.

下载路径为:http://download.csdn.net/detail/u010340178/9782044

2.创建项目的时候,选择JRE时要选择第二个,选择第一个就会报这样的错误。
Justin #56 · 2018年05月14日 Author

我加你 qq 你是谁? 哈哈哈

仅楼主可见
Justin #58 · 2018年05月14日 Author

OK 我 qq 发你我的微信 我不怎么用 qq

Justin #59 · 2018年05月15日 Author

最新版 Jar 包和配置文件已上传至 https://pan.baidu.com/s/1mNci6SWNHPuLj_mvrfgIbg#list/path=%2F

仅楼主可见
Justin #61 · 2018年05月16日 Author

目前还不支持其它地方 input

感觉整个流程操作动作,比较慢,能不能优化一下操作速度~

Justin #63 · 2018年05月29日 Author

UI 遍历时确实是慢,因为要界面分析,要截图还要保证 所有截图都能正确生成。 Monkey 的功能已经优化,比原来快了。 你可以下新版试试

Justin 回复

感谢~

楼主,我使用的是 appium-desktop 的,启动后执行你那个命令时报错,我看了下报的是"JAVA_HOME is no set currently,please set JAVA_HOME",但是我 java_home 是没有问题的,求解答!!

同一个公司的。。。我在线这边的

Justin #68 · 2018年05月29日 Author

你这是环境的问题啊 npm install -g appium-doctor 然后运行 appium-doctor 看看报什么错

Justin #69 · 2018年05月29日 Author
fdeferf 回复

你是在人大附近的 ZD 吗? 我在集团总部 哈

仅楼主可见
Justin 回复

楼主,有个问题,我这边跑 App,试了很多次,没有一次能完整的跑完遍历...

72楼 已删除
Justin #73 · 2018年05月30日 Author
Smile 回复

你的是什么 app 啊? 我下载来试试

仅楼主可见

下载太慢了,无论是网盘下还是迅雷,都是 20kb/s....

Justin #76 · 2018年05月30日 Author
Smile 回复

android 的是吧?

Justin #77 · 2018年05月30日 Author
黑山老妖 回复

百度网盘就这龟速。。。 你有什么好建议吗

Justin 回复

对对对~

Justin #79 · 2018年05月30日 Author
Smile 回复

等我有空试试 看看是什么效果 然后回复你

Justin 回复

直接放 git 上?

Justin #81 · 2018年05月30日 Author
Smile 回复

ANDROID_BOTTOM_TAB_BAR_ID: com.huxiu:id/footer_bar

ANDROID_CLICK_XPATH_HEADER: 'string-length(@text)<30'

两个值是这么设的吗?按这个设一下试试

qiu
求解这是什么原因

Justin #83 · 2018年05月30日 Author
301000232 回复

你的命令错了 删掉 udid : java -jar UICrawler.jar -f config.yml -u 设备 udid -t 4723

Justin 回复

确实是我命令弄错了,但是报一样的错诶

85楼 已删除
Justin 回复

看了下配置,都设置过了~😖

Justin 回复

楼主,如果在跑的过程中,手动操作了了 App,是不是就打乱了它的遍历步骤,还能继续往下走么?

Justin #88 · 2018年05月30日 Author
Justin 回复

这个错的意思是 udid 有误 找不到设备 你看看是 udid 设的值不对

Justin #89 · 2018年05月30日 Author
Smile 回复

会啊 你试试就知道了 但遍历的可能会不完整

Justin #90 · 2018年05月30日 Author
Smile 回复

我这几天忙 有空时我试一下 看看运行是什么效果 然后告诉你

Justin 回复

好哒好哒~

总是进入到入口 activity 后就退回到桌面,然后就一直不动

Justin #93 · 2018年05月31日 Author
301000232 回复

你有 mac 吗 在 mac 上试试 我是在 mac 上开发的 windows 上还没试呢

仅楼主可见
Justin 回复



楼主,今天一直遇到这个问题,然后还是没有遍历完整过...

这是什么问题 APP 已经启动成功了,为什么说 APP 包无效?然后一直在重复启动 APP。手机系统是:5.0.2
楼主求解

chen 回复

这个问题我稍后解决一下 xml 解析用的库的 win 上运行有问题 mac 上 OK 的

Justin #98 · 2018年05月31日 Author
Smile 回复

这个问题我正在解决 下周出新版

99楼 已删除

已发~

Justin #101 · 2018年05月31日 Author
Smile 回复

收到

Justin #102 · 2018年05月31日 Author

QQ 技术交流群 : 728183683

Justin #103 · 2018年05月31日 Author
chen 回复

你的配置文件发我一下 LGXQF@163.COM 注明是哪个 app

https://github.com/lgxqf/UICrawler/blob/master/doc/Config.md

NODE_NAME_EXCLUDE_LIST:
STRUCTURE_NODE_NAME_EXCLUDE_LIST:

@lgxqf 这两个没注释

Justin 回复

楼主今天调 iOS 跑的时候,出现下面的报错~

Justin #106 · 2018年06月01日 Author
Smile 回复

你需要先修改配置文件里的 bundle id 请先查看 github 上 关于配置文件的说明文档

Justin #107 · 2018年06月01日 Author
老马 回复

这个我现在还解释不清 呵呵 以后再加上

Justin 回复

楼主,我配了 iOS 的参数,下面是报错。。。

Justin #109 · 2018年06月02日 Author

ios developer 选项里的 enable UI autoamtion 功能打开了吗

Justin 回复

打开了~

Smile 回复

你的 WDA 没配好吧~~

112楼 已删除

我这里 ios 也跟 109 楼报一样的错

我的 Android 已运行启动 APP 的登录页面,就报错了

Justin #115 · 2018年06月05日 Author
chen 回复

该问题已解决 请下载最新的 jar 和 config.yml

Justin #116 · 2018年06月05日 Author

新版已经上传到百度网盘 , 遇到问题的朋友就先下载最新版 jar 和 config.yml

修改了 Windows 运行失败的问题
修改了 Windows 上 HTML 报告乱码的问题

老马 自动遍历工具 UICrawler 使用记录 中提及了此贴 06月05日 16:11

@lgxqf 有开源计划么

Justin #119 · 2018年06月05日 Author

初步计划是等工具稳定一些后 6 月底开源 目前还有好多细节需要完善

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.substring(String.java:1963)
at util.Driver.getSDKVersion(Driver.java:939)
at util.Driver.prepareForAppiumAndroid(Driver.java:849)
at Crawler.main(Crawler.java:115)
哪位大神指导这个怎么解决?

Justin #121 · 2018年06月05日 Author
王多余 回复

这个明显是你的设备 udid 传的不对 有问题在群里说吧

Justin 回复

完美~ 已加入=

支持自动滚动页面遍历所有元素吗

Justin #124 · 2018年06月19日 Author
Leo 回复

支持

用谷歌打开测试报告乱码是为什么呢,设置了谷歌的编码格式
这几种编码格式都试过,还是乱码,请问这是为什么,生成的测试报告在哪里可以修改编码格式呢

Justin #126 · 2018年06月25日 Author

用 HTML 编辑器打开 report.html 找到 UTF-8 改编码格式. 这个问题我记得已经解决了 你下载的什么时候的版本 是最新版吗

楼主,这些以源码已经开源了吗



楼主能帮看看这是什么错误吗

Justin #129 · 2018年07月02日 Author
yajunzheng 回复

你的 appium 要么设置有问题 要么就是版本太低了 用 1.8.1 试试

Justin 回复

谢谢楼主的回复,现在已经可以运行了,请问楼主可以发我源码研究研究吗

Justin #131 · 2018年07月02日 Author
yajunzheng 回复

目前还没开源 开源了就能看到了

仅楼主可见
Justin #133 · 2018年07月05日 Author
AItestwork 回复

没有微信群 只有 qq 群~

仅楼主可见
Justin #135 · 2018年07月05日 Author
Justin 回复

728183683 QQ 群里聊吧 平时工作忙 没太多时间聊微信

Justin #136 · 2018年08月03日 Author

Doc is updated to latest version, feel free to let me know if you any suggestion about this tool :)

Justin #137 · 2018年08月07日 Author

这个工具的 Monkey 功能有人用过吗?现在需要一些反馈,看看如何增强对 Monkey 功能的支持

138楼 已删除
Justin #139 · 2018年08月17日 Author

@seveniruby 怎么才能申请加精?

Justin 回复

当时没加精的原因就是没开源。现在是完全开源,还是部分开源?

思寒_seveniruby 将本帖设为了精华贴 08月17日 17:29
142楼 已删除
143楼 已删除
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08

想问问现在完全开源了吗

楼主,请问现在这个工具支持多个设备同时遍历吗?

Justin #148 · 2019年11月16日 Author
AllenLuosong 回复

一个进程 支持一个设备 没限制啊 限制源于 USB 口

仅楼主可见
仅楼主可见
Justin #151 · 2019年12月13日 Author

Good~

想问下 ios 环境怎么搭建

已申请入群,求通过~

Justin #154 · 2021年03月29日 Author

本人针对个人和公司提供有偿 UI 自动化技术、接口自动化技术、接口 mock 技术等培训及测试工具定制开发

有意者请联系 QQ:40690263

回复内容未通过审核,暂不显示
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册