新版本已经发布. 请大家搜索 appcrawler 新版本
以下内容有过时
appcrawler 1.1.2 版本
http://pan.baidu.com/s/1skowOVV
仅限社区内测, 不要外传. 如遇 Bug 请轻骂
开源申请已经提. 还未正式发布. 所以先发个打包好的 jar 包给大家先试用下. 收集下改进意见.
目前我们自己也是在探索中
工具基于 Appium 设计, 所以有一定的使用门槛. 请做好心理准备.
brew install node
npm install -g appium
真机或者模拟器均可. 确保 adb devices 可以看到就行
启动 appium
#ios测试默认连接4724默认端口
appium --session-override
#android测试默认连接4730默认端口
appium --session-override -p 4730
下载 appcrawler 工具, 解压. 只要有 java 即可
#使用默认规则运行
appcrawler -a xueqiu.apk
#查看帮助文档
appcrawler --help
#配置文件的方式运行
#Android测试
appcrawler -c conf/xueqiu.json -p Android
#iOS测试
appcrawler -c conf/xueqiu.json -p iOS
-c 参数表示是配置模板. 其他参数会在模板的基础上应用指定配置, --capability 指定的参数会覆盖模板中的 capability 配置
bin/appcrawler -c xueqiu.json -p ios --capability udid="[你的udid]" -a Snowball.app
bin/appcrawler -c xueqiu.json -p android -a http://xxxxxxx/xueqiu.apk
通过修改配置文件. 可以实现细节的控制. 具体细节说明可参考 conf 下的雪球 app 的自动遍历示例.
在当前目录下会生成一个包含输出结果的目录, 以时间命名. 包含了如下的测试结果
界面唯一性:每个 screen 都有一个唯一的 id, 这样可以类比为普通的接口测试中的 url.
android 的 url 默认为当前的 activity 名字.
iOS 没有 activity 概念, 默认使用当前页面 dom 的 md5 值的后五位作为标记. 如果页面不变. 那么这个 md5 值也不会变.
也可以自己指定某些特征作为 url, 比如 title 或者某些关键控件的文本
控件的唯一性取决于这个 url 和控件自身的 id name tag text loc 等属性.
比如一个输入框 id=input, 在多个页面中都出现了.
如果 url 为空, 那么它只会被点击一次.
如果 url 设置为当前 activiy 的名字, 那么有多少页面包含它他就会被点击多少次.
url 的定义是一门艺术, 可以决定如何优雅的遍历.
遇到什么控件触发什么操作, 用来做引导输入, 是一种触发机制.
rule 方法有三个参数. 元素的 id 或者 name 属性.第二个参数为输入. "click"会执行点击操作. 其他都会被当成文本输入.
第三个参数为这个规则被应用多少次. 默认是无限. 比如登录时的输入,可以设置为 1 次. 大部分情况默认即可.
"elementActions":[
{
"action":"click",
"idOrName":"已有帐号?立即登录",
"times":0
},
{
"action":"click",
"idOrName":"登录",
"times":0
},
{
"action":"156005347XX",
"idOrName":"account",
"times":0
},
{
"action":"xxxxxxxx",
"idOrName":"password",
"times":0
}
]
android 默认是 back 键,不需要设定.
iOS 上没有 back 键, 需要自己指定, 通过 xpath 定位方式指定遍历完所有控件应该点击什么控件返回.
"backButton":[
"//*[@name='nav_icon_back']",
"//UIAButton[@name='取消']",
"//UIAButton[@name='Cancel']",
"//UIAButton[@name='关闭']",
"//*[@value='首页']",
"//UIAButton[@name='首页']"
],
控件黑名单为 black 方法. 他会绕过 id name 或者 text 中包含特定关键词的控件.
url 黑名单可以绕过特定的 activity 或者 window
"blackList" : [ "消息", "聊天室" ]
适用于在一些列表页或者 tab 页中精确的控制点击顺序
selectedList 表示默认要遍历的元素特征
first 表示优先遍历元素特征
last 表示最后应该遍历的元素特征
统一使用 XPath 来表示
"firstList":[
"//android.widget.ListView//android.widget.TextView",
"//android.widget.ListView//android.widget.Button"
],
"selectedList":[
"//*[@enabled='true' and @resource-id!='' and not(contains(name(), 'Layout'))]",
"//*[@enabled='true' and @content-desc!='' and not(contains(name(), 'Layout'))]",
"//android.widget.TextView[@enabled='true' and @clickable='true']",
"//android.widget.ImageView[@clickable='true']",
"//android.widget.ImageView[@enabled='true' and @clickable='true']"
],
"lastList":[
"//*[contains(@resource-id,'group_header_view')]//android.widget.TextView"
],
支持黑名单, 最大遍历深度, 和重命名 url, 重新设定初始 url
"defineUrl":"//*[contains(@resource-id, '_title')]",
"baseUrl":".*Main.*",
"maxDepth":3,
"blackUrlList":[
"StockMoreInfoActivity",
"StockDetailActivity",
"UserProfileActivity"
],
发现的崩溃截图示例
所有遍历过的控件和布局会汇总为一个思维导图
QQ: 177933995
ui 遍历 这个赞赞赞。
目前可否遍历 webview?
不明觉厉啊
这个赞!有时间好好研究下
想问下这个针对那些需要权限的页面是否能遍历到呢,还有目前 app 中可能嵌入动画比较多,这个用起来是否能正常遍历呢
谢谢分享,考虑的挺全面。
对如何实现挺感兴趣,截获接口请求用 socket 服务做代理吗?新老版本界面对比是图片对比还是结构对比,是一次跑 2 个版本还是和指定版本跑下来的结果做对比?
之前使用 Uiautomator 做了一个遍历的工具,最多执行到 3 层,再多逻辑就不好控制,
研究一下你这个
思寒 什么时候开源能通过啊,想学习一下代码呢 .
appcrawler 这个工具下载解压后需要和 Java 放一块吗?还有需要配置 appcrawler 的环境变量吗?那个 APK 是我可以使用任意的吗?能有一些具体操作的截图就更好了,谢谢楼主!
#9 楼 @seveniruby 在这种遍历里面,是不是一定要有引导规则在里面
略屌,坐等开源
有空玩玩看
@seveniruby
思寒 等開源,然後能問個不相關的嗎?製作這樣的工具之前,都要先確定自己的設計目標嗎?還有要考量甚麼?
最近在弄公司網頁軟體自動化測試框架,不知道是不是到現在只有看過單體測試文件的關係,總覺得自己不是在架構整個系統,是配合軟體在拼拼圖。
立马去尝鲜,期待开源~
#17 楼 @wkx101 技术和工具都是用来解决问题的. 做工具之前就已经想清楚了. 当时提出了设想. 组内的领导和同事也都赞成. 所以我就开始动手做了, 然后就越做越多.
加了一堆的功能. 也是刚刚开始使用没多久. 当时的背景如下
问题有了方法就来了
自动输入被我关闭了.这个特性有点危险. 只支持自定义规则输入.
结构 Diff 和接口拦截还未实现完
自动遍历, 指出 android 和 ios, 真机和模拟器, 已经做到了. 可以生成截图和思维导图.
自动识别不同屏幕尺寸的兼容性问题也能做到, 只是还需要时间.
目前我自己也没太多精力做这个. 这次发出来只是先告一里程碑. 给感兴趣的同学做个参考. 我也趟了很多坑, 算是给大家一个经验吧.
mark,谢大神分享。
error: Logcat capture failed: spawn "/Users/eric/Library/Android/sdk/platform-tools/adb" ENOENT Appium 也是蛋疼,难不成我 ANDROID_HOME 白加到 PATH 里的
期待开源和 windows 版本
你在 soho 么 公司隔壁就是雪球。。
#21 楼 @shenkai600 这是你 appium 的配置. 跟 appcrawler 无关. 得自己解决了. 你可以运行 appium-doctor 检查下.
先赞 + 收藏 慢慢悦读,之后尝试。 感谢分享
赞,回头试试看能不能把它整合到 STF 框架中去!
轻轻撸过,拿来看看,回头好评
—— 来自 TesterHome 官方 安卓客户端
#26 楼 @xubin98246 STF 在你们公司运用的如何
#28 楼 @seveniruby 目前还在试用验证阶段,主要集中于以下几个功能:
说白了就是把原来的安卓执行机接到这个平台上,通过远程调试跑 appium 脚本,再增加了一些环境自动重连和重置的机制,目前看效果还行,管理上轻松了很多,但稳定性仍在观察改进。
收集了部门中很多稀有机型,省的其他测试和开发人员到处找设备,效率上改进不少。近期准备在上面再添加批量应用安装和跑简单的 monkey(或者你这遍历工具)的功能,搞个小型的兼容性云测平台。
也很简单,找几台虚拟机,上面安装了很多性能\安全\稳定性测试相关的工具,然后部分手机也是,这样测试人员需要的时候登上来就可以直接开始用了。
#28 楼 @seveniruby 另外,这个遍历工具有没有办法处理代码动态生成的 view,或者提供坐标点击的功能?我们的应用中有很多这种 view,比如密码输入的安全键盘,根本识别不了。
#30 楼 @xubin98246 他只是封装自 appium. 所以 appium 支持它就应该可以支持. 代码动态生成的 view 应该是支持的. 但是安全键盘就不行. 需要借助其他的手段辅助.
#31 楼 @seveniruby 哈哈 由于没有源码,没法定制此需求,现在只能人肉辅助==
赞!!!
#32 楼 @xubin98246 我已经做了一个插件机制了. 可以用 java 自己写插件. 不过我可以在输入引导那增加一个外部的命令调用
#34 楼 @seveniruby 嗯,最好是在规则引导中加上外部命令调用,比较灵活,如果进一步能支持 appium 脚本调用,就更强大了。还有,SlidingMenu 这种侧边栏菜单,我之前看到仅进入了一个菜单子项,其它的都没能遍历到,有办法优化吗?
#36 楼 @xubin98246 这个需要优化的. 暂时可以通过指定遍历规则顺序和引导输入可以遍历到.
现在的能在 windows 上运行吗?怎么跟 appium 结合起来?
#38 楼 @aa3673436 文档里面提了. 里面有 windows 的.bat 启动文件. 不过我没测试过. 我是 mac
#29 楼 @xubin98246 我们就是在 centOS7 上搭建的。 目前 10 台是比较稳定的。
#41 楼 @xubin98246 机器配置能达到,adb 的性能不一定可以吧...
#41 楼 @xubin98246 我是按照官方推荐的基础上提高了一个档次配的。
有一个小疑问:思寒你怎么避免重复遍历某一个控件的?
#45 楼 @cryingdream94 我把每个界面和控件的唯一性都用一个 url 来表示. 是否需要点击是根据这个 url.
给控件命名的方式决定了是否重复遍历. 是否点击过的判断是根据控件的名字. 控件的名字在框架中是支持自定义的. 所以如果你把一个控件命名为 tag_id_text 的组合, 那么只要 text 不一样, 就会挨个点击. 如果你命名为 tag_id 那么基本就会点击一次. 如果控件的名字是 tag, 那么同类型的控件就只会被点击一次.
目前的命名方式是 url=activity_tag_id_text 所以文本按钮会挨个点击. 不同界面中的相同按钮也会点击. 这个方式会比较完善的覆盖大多数的功能操作. 想减少点击量或者增加点击量. 只需要重定义这个命名方式就行了
#41 楼 @xubin98246 @anikikun 你们现在单台机器支撑了多少台设备.
@xubin98246 有没有好的让截图更快的办法. 支撑 iOS 和 Android. 目前发现遍历的截图过程挺慢的.
#48 楼 @seveniruby 我们的截图就很快,iOS 和 android 都可以。android 用 minicap,ios 用一个第三方的 jar 包
@seveniruby【目前的命名方式是 url=activity_tag_id_text 所以文本按钮会挨个点击. 不同界面中的相同按钮也会点击】
那怎么避免出现环路?
假设界面 A 只有 button A,界面 B 只有 buttonB。buttonA 点击接入界面 B,buttonB 点击会进入 A 界面。。很极端的情况..TT。。。
#47 楼 @seveniruby @anikikun 我现在一台 i5 4g 的 mac 外接两个 20w 的 13 口 hub,连了 20 多台设备。
—— 来自 TesterHome 官方 安卓客户端
#10 楼 @seveniruby 关于支持新老版本的界面对比,如果不基于 appium(考虑到稳定性欠佳),如何获取界面的 DOM 结构是否有方案?
#51 楼 @xubin98246 20w 是什么意思, 一个设备能连接 20 个设备, 已经不少了
#50 楼 @cryingdream94 如果命名合适 不会出现环路的. 按照我的 url 定义方式
A.a click
B.b click
A.a clicked
所以无论那个按钮只会点击一次. 如果想让业务路径覆盖的好. 还可以这样定义 url, 把 url 设置为只记录一定深度的 activity 序列. 比如 4 层.
A.a click
A.B.b click
A.B.A.a click
A.B.A.B.b click
A.B.A.B.A.a url 深度为 4 层. 简化为 A.B.A.a 已经被点击过 不会点击
#60 楼 @seveniruby libimobiledevice
#57 楼 @seveniruby 功率,自带的电源的 usb hub。刚发现 20 台还是不太行,mac 的内存爆了 ,4g 物理内存耗尽,还用了 6.6g 虚拟内存。也就运行了不到一星期而已。
#62 楼 @xubin98246 这个需要 你自己去改,我的那个只是提供了获取的方式,每次获取到截图的二进制信息转化为 BufferImage 展示出来,你不展示出来,可以保存的图片,频率自己控制
#54 楼 @xubin98246 这个针对 android,ios 呢?
#66 楼 @chenhengjie123 他的速度应该在 1s 以内吧,原理用的是 instruments,所以很快。
赞赞赞~我要好好学习下
@seveniruby 謝謝。細嚼慢嚥仔細想了一下,所以這道謝回得晚了。這篇文章多看幾次,想做的事情也慢慢充實起來,只是不知道自己在學還是在模仿。然後現在看下來,有個相關問題想問,測試結果產生完了之後,由人工進行驗證該結果是否正確?因為我現在也在想要抓甚麼來做測試結果比較。我弄的是線上閱讀器,都是圖片,沒文字可以抓取。
想试一下效果,结果运行时遇到一个问题:ANDROID_HOME 是有配置正常的,Appium 客户启动时是可以获取到的,然后在使用命令运行就会报错。请思寒指教
./appcrawler -c ../conf/xueqiu.json -p android
@seveniruby 百度网盘 Chrome 不让下载,直接报病毒!
赞,最近正想做相关的东西,大概什么时候能开源,好想看看
我的平台是 mac os x + iOS 请问要如何使用你这个小工具。
clydeiMac:~ cly$ /Users/cly/appcrawler/bin/appcrawler -c xueqiu.json -p ios
Error: xueqiu.json not exist
Try --help for more information.
我是这样操作的
MacOS 的简单运行
链接:http://www.showfrank.com/wordpress_zh/?p=431
@seveniruby json 文件里的很多字段在 appcrawler --help 找不到(比如 resultDir);能不能提供详细点的字段描述?
@seveniruby 那你提供下 javadoc 文档吧
期待开源版本和 windows 下版本,没 MAC 环境的飘过。。。
感谢分享,
期待开源看源码学习
#29 楼 @xubin98246 你好,我想问下 stf 搭建的问题,
我遇到了问题,请问你们如何解决的,Device database cannot match device
#89 楼 @yrguo_iflytek 也遇到这个还没解决的坑。
1、表现是能看到设备连接上了,但进去了页面上没有显示设备图片,界面操作在手机端也不响应。
2、后台有打印 “Device database cannot match device”,但不知道是否和该问题有关系!
3、楼盖的好高啊...
#89 楼 @yrguo_iflytek 你这设备是一直这样,还是偶尔出现这种情况?必现的话感觉没什么救,偶现的话通过 adb 重启下手机上的 minirev 服务:
1、ps |grep minirev 杀掉已经起来的服务;
2、adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minirev 重启下服务 忘了,会自动重启该服务的
赞。期待开源。在做 UI 自动化脚本录制时,我们只能采集操作的绝对坐标,在想是否能结合自动遍历 UI 控件来定位控件情况从而生成更好的脚本。
#92 楼 @xubin98246 一直这个情况。不是偶然出现的。必现的话有解决办法吗?
是否有 windows 运行的版本??求教……
@seveniruby
我们这有个直播类 app,试了下遍历。遇到了如下问题,帮看看哈?
很高大上的感觉,支持
#97 楼 @zhangzhao_lenovo 需要定义自己的遍历规则文件. 另外你可以贴下你的执行命令. 出错的原因是 app 支持设定 back 按钮, 如果找不到指定的 back 按钮. 就会使用 android 默认的后退按键. android 默认不需要设定. 感觉是你参数用错了
google 了下查到这个结果:
ubuntu 圖片瀏覽器打開提示
Not a JPEG file: starts with 0x89 0x50
經查明發現是程式里 create 的是 PNG 格式,輸出保存成了 jpg 造成的
@seveniruby
"
控件的唯一性取决于这个 url 和控件自身的 id name tag text loc 等属性.
比如一个输入框 id=input, 在多个页面中都出现了.
如果 url 为空, 那么它只会被点击一次.
如果 url 设置为当前 activiy 的名字, 那么有多少页面包含它他就会被点击多少次."
思寒 这个规则能否再说明下。确实没看明白..
#13 楼 @seveniruby windows 下,使用 Cygwin 可以。昨天尝鲜,也够折腾的
#102 楼 貌似存在一个问题, firstlist,selectedlist, 和 elementActions 中的配置没有按先后顺序遍历组件。
比如发消息 elementActions 中写 messageedittext 和 sendButtion , 测试过程中出现过 前找到 sendbuttion 而后才 messageedittext,而预期应该是 反过来。
#104 楼 @zhangzhao_lenovo 你可以把 log 发给我. 理论上不会, 他就是从 elementActions 里面顺序遍历匹配 我的邮箱是 1516491904@qq.com
#30 楼 @xubin98246 我可以先把代码给你开放权限. 你算是 testerhome 的核心成员了. 告诉我邮箱即可
#105 楼 @seveniruby THX 问题已经搞定了。 还是控件的唯一性的问题。 defineUrl 定义的标签在 messageedittext 的页面里不存在 ,所以第二次执行时按重复的也就没执行到。。。
另外试用过程中 貌似觉得 截图的速度似乎是有些瓶颈的。
@seveniruby 有没有偶现过控件添加 blacklist 不管用的状况?
#107 楼 @zhangzhao_lenovo 截图慢, 还没法异步去做. 所以最近我都取消了. 在还未发布的新版本里我用 dom 结构的文本取代了截图. 在配置文件里面有了 saveScreen, 设置为 false 即可.
这个是页面中所有的控件都能获取,然后自动执行一遍么?
#109 楼 @seveniruby 请问对于需要滑动才能显示出来的控件是怎么处理的?
#111 楼 @darren_dp 目前默认会自动滑动尝试找新的元素. 如果是特殊的滑动. 需要自己去自定义行为.
#112 楼 @seveniruby
找到一个持续截图的 lib 。
https://github.com/rtyley/android-screenshot-lib
#113 楼 @zhangzhao_lenovo 你做过测试吗, 速度如何. 我使用的是截图是 appium 自己的. 所以很慢. 但是架构上是合理的. 考虑到跑 case 的时候环境不一定是直接走 adb 线. 额外的截图方案一般需要做下适配. 我想先保持目前架构上的清晰. 不同的截图方案用工具自身提供的插件来实现.
我之前试过一些录屏方案. 结果录屏会影响内存. 长时间还容易不稳定. 所以录屏的方案也放弃了.
#114 楼 @seveniruby 这个工具怎么配来调插件?
录屏好像 5.0 以上 google 有 api 接口了。4.x 的都还得先 root。感觉更重量了
#112 楼 @seveniruby 请问,这个遍历 就是用 XPATH 把需要遍历的元素表示出来,然后用 appium 的 findElements 方法遍历吗?
#116 楼 @darren_dp 是的. 已经内置了基本的遍历规则.
#115 楼 @zhangzhao_lenovo 是啊. 就怕加入的功能太重.
请问 对于 webview 页面较多的 apk 还能正常执行 吗 ?
#120 楼 @gengasterisk appium 支持. 所以这个工具也是支持的
求解 appium 要如何获得当前 activity 的信息?
#121 楼 @seveniruby 大神~什么时候可以开源?
IDevice 这个接口用来 Record Screen 还不错,我之前实践时可以设置 limit 60s 为一个周期,进行 pull 和 remove,视频 1mb 左右大小
#124 楼 @shenkai600 哪个框架的 idevice 啊
#125 楼 @seveniruby ddmlib 里面的
是否有 windows 运行的版本??求教……
@seveniruby 从 Appium 的日志分析,Inspector 工具的 Refresh 操作是通过 BootStrap 里面的 source 实现的,并没有调用 chromedriver 和 android-hybrid.js,就直接获取到 WebView 的内容了。请教 Appium 如何获取 Hybrid App 里 webivew 的页面元素呢,是在哪部分实现的?非常感谢!
关于何时能开源有什么好消息吗!
#130 楼 @shenkai600 我已经先把代码发给小部分人了. 正式的开源这个不太容易. 代码要好看. 文档要齐全. 不然会被喷. 所以会谨慎点.
#131 楼 @seveniruby 太想学习这个源码~能给开个权限吗。只学习,不外传。
#132 楼 @darren_dp 我只发给社区里面活跃的成员. 7 月份之前肯定会开源的. 作为新人你不妨再等等. 反正工具目前还是可用的. 明天我会发个新版本出来.
#131 楼 @seveniruby 能否给个权限,想把录屏折腾下。。
#134 楼 @shenkai600 加 QQ 群 177933995.
赞赞!。有几个问题想问一下,问题比较多,多包涵。
看了优酷上的视频, 想知道 DFS 中的回环是怎么处理的
还有个问题是: 返回是怎么处理的. Android 上当遍历到首页的时候, 按 Back 就退出了.
不明觉厉。。。
—— 来自 TesterHome 官方 安卓客户端
如果 activity 中元素是变化的,即点击或其他后出现了新的元素,遍历是否能遍历到这些元素并进行相应操作?
可以
如果 1 可以,当前 activity 的 md5 发生变化后,工具认为是新的 activity 还是旧的?后续遍历是否还是进入该 activity?
新增加的元素仍然计算入当前的 activity
业务逻辑中如果发生 activity 跳转,即 原先路径为 A->B->C, C 中的某个业务触发后发生了 C->A,此时 B 的遍历是否还会继续?
*会继续. 这个是可以定制化等. 界面路径是有个 URI 的定义规则.
通过制定规则可以决定是否会继续遍历. *
业务中有可能会发生完全一模一样的界面,且 activity 名称相同,我们的工具是如何来区别这 2 个功能页面的?
通过 URI. URI 的定义有点新颖. 我以后会详解.
当前性能如何?遍历一个 app 大致需要多少时间?
一个小时一两千左右的点击动作.
如果出现类似扫码和拍照界面,我们是继续操作还是跳出?
通过黑名单避免跳进.
跳进了也会自动调用 back 返回的.
如果 6 成立,发生了类似"从相册中选择"的事件,是否支持切换回被测应用?
支持
具体遍历时,在 Android 上如果需要有滚屏去显示更多的元素并针对这些元素进行操作,是否支持类似的遍历?
支持自动滚屏.
#142 楼 @seveniruby 谢谢回答, 不过我还是没太明白. 如果重新返回 App 的话, 也仍然在那个界面, 那么要如何返回 DFS 当中的上一层呢?
win7 64 位这样提示:
点赞!目前做的项目中也写了个自动化遍历。学到了。
----有关于判断重复页面,我的方法是通过 Activity 中全部控件和控件文本的一个序列,进行序列比对。设计时考虑的问题是存在 Activity 名称相同,但实际内容不同的情况。本来也是和 @tbya 一样,对于只通过 ActivityName 进行页面判重有疑问。细想一下,如果重复进入同一 ActivityName 的页面,在获取元素后,发现存在不同文本(或其他属性)的控件,那么这个 Activity 又会继续遍历这些新的控件。实际的遍历效果相当于发现了一个新的 Activity。
----@seveniruby 如果 Activity 中元素是变化的,除了增加新元素之外,有的元素可能还没遍历到,就已经消失。像这种情况的话,Activity 包含的遍历事件是在什么时机进行更新呢?
我在用它遍历微信和 QQ 邮箱 iOS 版本 时,发现它的文本输入功能只对打开 app 时的第一个界面有效,像微信和 QQ 邮箱都是在第二层界面才有帐号登录功能,配置中的规则就无效,请问这个有解决方法吗?
#149 楼 @seveniruby 不行,因为 appcrawler 会先返回上一层界面,再检测文本输入框,导致第二个界面之后的文本框都无法自动输入,可能是个 bug,你试试
#149 楼 @seveniruby 找到问题了,配置文件里面把 idOrName 为 “关闭” 和 “取消” 的项移到最后就可以了,否则每次操作其它就自动退出界面了。
有几个问题请教下:
可以试试
#149 楼 @seveniruby 请问一下,最后的思维导图,是有第三方项目支持的吗?
#152 楼 @sundaxian first last 机制来控制顺序 没在 elementActions 定义的按钮被点击, 估计是被自动遍历到了吧. 或者 id 和 name 相同
#154 楼 @darren_dp 不需要, 直接生成思维导图
#156 楼 @seveniruby 通过 遍历 apk 可以做到 布局解析不?
#155 楼 @seveniruby 好的 我在看看,thx
android app 遍历到 h5 页面的时候报错退出了,get page source error,请问该怎么处理这个问题,谢谢
@seveniruby 控件命名方式怎么定义?我看 demo 里没有这块的设置,也没有相关文档
@seveniruby 一般 APP 新版安装启动后都有新功能简介的窗口需要 X 次拖动或点击关闭,自动化安装 APP 后一直停留在 APP 启动界面,且不同 APP 结束启动动画方式各不相同,这个工具目前好像解决不了第一屏动画问题,请问有什么通用的方法解决这个问题么?
@seveniruby 话说 win7 64 位下面报错有解么。。。。-__.-
刚刚在 Mac 上试用了下 Android 的,有几个需要注意的地方:
shell
chmod 777 appcrawler
shell
./bin/appcrawler xxxx
整体上看是非常不错的工具,期待开源学习。
@seveniruby 我 64 位的 win7,应该用什么版本的 java 呢。。求入群—______.—
@seveniruby 折腾了下,感觉遍历规则比较难制定,能不能比较详细的说明怎么制定规则
#162 楼 @seveniruby 你好,新版本大概什么时候发,能否加下 QQ 交流:2016-398-208
#51 楼 @xubin98246 卧槽,20 台。稳定吗?或者说,当其中有 6~7 台在被同时调试的时候,运作正常吗。
@seveniruby 能否分享源码,最近有个需求,既然这里有现成的也不用重复造轮子了,有了源码,遇到问题也方便改:-)
不错的工具,学习并收藏
好厉害哟
楼主好厉害啊,赞啊
有谁能告诉我,怎么获取当前的 ActivityName 呢?
支持 Android?
你好,我测试了 iOS app,发现好多情况都是有很多 dom,但是基本没有截图,请问下截图的时机是什么时候呢?还有就是 app1 点击了按钮跳转到 app2,之后程序就死掉了。是因为 instrument 只能针对一个 app 的原因么?
@seveniruby 有个小问题,测试时候发现如果是二维码/条码这样的标题,保存的 dom 可能就是 xxx/xxx/xxx-二维码/条码_xxx-条码 - 条码.dom 这样会导致文件失败,java.io.FileNotFoundException: xxx/xxx-二维码/条码_xxx-条码 - 条码.dom (No such file or directory).而结束遍历。
#176 楼 @guaixiaomei 截图超过 10s 就超时不截图. 第二个是如果当前界面没变化. 也会跳过截图.
#177 楼 @guaixiaomei 这个是 bug. 新版本里面已经做了改进了. 近期会放出来.
@seveniruby
windwos 下运行批处理会出现命令行超长的错误,需要修改下批处理文件:
set "APP_LIB_DIR=%APPCRAWLER_HOME%\lib*"
set "APP_CLASSPATH=%APP_LIB_DIR%"
这样就可以在 windows 下正常运行了,但问题是每次运行一段时间会报错:
start screenshot
[31m- App Crawler *** FAILED ***[0m
[31m java.io.IOException: 文件名、目录名或卷标语法不正确。[0m
[31m at java.io.WinNTFileSystem.canonicalize0(Native Method)[0m
[31m at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)[0m
[31m at java.io.File.getCanonicalPath(File.java:618)[0m
[31m at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1079)[0m
[31m at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1038)[0m
[31m at Crawler.saveScreen(Crawler.scala:694)[0m
[31m at Crawler.doAppiumAction(Crawler.scala:720)[0m
[31m at Crawler.clickElement(Crawler.scala:454)[0m
[31m at Crawler.crawl(Crawler.scala:549)[0m
[31m at Crawler.crawl(Crawler.scala:558)[0m
[31m ...[0m
这是什么情况?
@seveniruby 没搜到啊……
#181 楼 @seveniruby 相对 1.1 版本,1.1.2 有些啥变化吗?
请问下黑名单,blacklist 和 blackurllist 具体有什么区别么?我在 iOS 上配置了一些关键字,发现最终还是去点击了,并不是黑名单都生效,是有什么限定条件么?
厉害,开源就是要创新拓展,解决疑难杂症
#135 楼 @seveniruby 我已经申请了加入 QQ 群,等待验证通过。
思寒,V 五
在使用 json 配置文件时,除了 androidCapability 这个 Key 中的属性可以生效以外,其它的 key 都无法生效,比如在配置文件中配置 maxTime,或者 maxDepth 遍历层级深度,都无法生效,这种问题,有人遇到过吗?
期待兼容 Macaca