appcrawler

一.环境搭建:(前提是当然得有Java环境)

1.appcrawler的最新jar包(最新的功能多,兼容性比较高),我用的是 appcrawler-2.1.0.jar ,

下载地址如下:百度网盘: [https://pan.baidu.com/s/1bpmR3eJ]

2. appium ,用来开启session服务并定位元素的,也可以使用 appium GUI(桌面版),但是我使用跑了一半就崩溃了,内存不足,所以推荐使用命令行版本的

下载方式:

(1)在命令行下执行npm --registry http://registry.cnpmjs.org install -g appium (推荐这种,npm的国内镜像)

(2)检查appium所需的环境是否OK(这步很重要):进入Cmd命令行,输入appium-doctor 显示正常则成功

3.Android SDK,主要是为了使用tools文件夹下的 uiautomatorviewer.bat 来定位元素,获取元素的xpath,用于准备工作前期。

二.执行步骤:

1.手机安装好最新的安装包,不需要登陆(避免不能遍历登陆前的页面内容,且登录后再进行遍历会出现activity不一致的报错,即和launchActivity不一致)

2.开启appium服务

在命令行中输入: appium ,提示: 则开启成功

3.在放 appcrawler-2.1.0.jar 的文件夹下执行以下命令:

Java -jar appcrawler-2.1.0.jar -a jingdata.apk -c config.yml --output wyy/

即可自动启动APP,并自动遍历点击元素

因为遍历的深度比较大,在覆盖比较全面的条件下,我这边测试会有496条case左右,基本要跑1个小时左右。

最后自动生成的报告如下:


5.png

三. 如何写配置文件 config.yml (这才是运行的核心所在)

参数说明:

Java -jar appcrawler-2.1.0.jar 用来启动appcrawler

-a 后面跟安装包的名字 (用于自己手机没有安装包的时候的使用)

-c 后面跟自定义的配置文件的路径和名字

-output 后面跟输出的报告所在的文件夹,如果没有写,则会自动生成一个以时间为文件夹名字的报告文件

参数说明:

firstList:优先遍历元素

urlWhiteList/blackList:白名单/黑名单

baseUrl:设置一个起始url和maxDepth, 用来在遍历时候指定初始状态和遍历深度

maxDepth:默认的最大深度10, 结合baseUrl可很好的控制遍历的范围

enterWebView:是否遍历WebView控件

urlBlackList:url黑名单.用于排除某些页面

urlWhiteList:url白名单, 第一次进入了白名单的范围, 就始终在白名单中. 不然就算不在白名单中也得遍历. 上层是白名单, 当前不是白名单才需要返回

logLevel:日志级别

saveScreen:是否截图

reportTitle:报告名字

screenshotTimeout:屏幕超时时间

currentDriver:当前设备(Android/iOS)

resultDir:结果文件夹名,给定后,将不动态命名

tagLimitMax:ios的元素tag控制

tagLimit:给tag

maxTime:最大运行时间

showCancel:应该是控制是否展示注释

capability:用于配置appium

androidCapability:Android专属配置,最后会和capability合并

iosCapability:iOS专属配置

xpathAttributes:用来设定可以用那些种类型去定位控件

defineUrl:用来确定url的元素定位xpath 他的text会被取出当作url因素(没理解)

appWhiteList:app白名单,如果跳转到其他app,需要设定规则,是否允许停留在次app中

headFirst:是否是前向遍历或者后向遍历

defaultBackAction:默认的返回动作(没看到例子,貌似不特指的话,是click)

backButton:给一些返回控件,用于返回动作使用

selectedList:默认遍历列表,如果不是指定的类型,而是确定控件,会分别点击控件

lastList:最后遍历的元素

blackList:排除某些控件

triggerActions:制定规则(action、xpath、times)

autoCrawl:自动抓取,看源码指定true后运行crawl(conf.maxDepth)命令 (crawl——清空堆栈 开始重新计数)应该是appcrawler的主要方法

asserts:断言,用于是否失败的判断

testcase:测试用例,看appcrawler日志,每次都是首先运行用例才会往下执行

beforeElementAction:貌似没什么人用,字面意思在元素动作之前

afterElementAction:与beforeElementAction的待遇差不多

afterUrlFinished:也是很冷门的待遇

monkeyEvents:monkey的点击数

monkeyRunTimeSeconds:monkey运行时间 given是条件 或输入 when是触发条件和动作 then是断言

4、一次ctrl+c生成报告,两次ctrl+c是强行退出

5、终端输入Scala进入Scala解释器,输入:q或:quit退出解释器

6、遍历的深度应该怎么设置好,总是跳到其它页面,就回不到当前页面继续遍历了,看文档 通过黑白名单

7、设置一个起始url和maxDepth, 用来在遍历时候指定初始状态和遍历深度

<pre style="margin: 0px; color: rgb(51, 51, 51); font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">四. 遇到的问题有哪些?如何解决</pre>

1.登录:

因为APP的登录页面是用户名+验证码,由于该页面按钮众多且有验证图标,需要滑动解锁很复杂,所以选用了账号密码登录的方式

(1)设置 账号密码登录 按钮为白名单,即必须点击,此时一定会编辑进入账户名密码登录页面,配置如下:

urlWhiteList:

  • //*[contains(@resource-id, "login_36kr_ll") and @clickable='true']

必须遍历账号密码登录的按钮

(2)设置账号密码登录中,用户名和密码元素的触发器,当定位到这两个元素时,输入用户名和密码,配置如下:

triggerActions:

主要解决登录的问题,当遇到登录输入框时,输入内容,比testcase更好用

  • action: "177*******"

xpath: "//*[@resource-id='com.android36kr.investment:id/login_36kr_phone_edit']"

times: 1

  • action: "123456"

xpath: "//*[@resource-id='com.android36kr.investment:id/login_36kr_pass_code']"

times: 1

(3)设置账号密码登录中,输入用户名和密码后,按照遍历顺序,接下来有一个忘记密码的点击事件开启了新页面,为了避免登陆的多余操作,将 忘记密码 这个元素设置为黑名单,不进行遍历,配置如下:

urlBlackList:

  • //*[contains(@resource-id, "login_36kr_forgot_pass") and @clickable='true']

忘记密码,避免登陆时按照遍历顺序影响登陆

2. 聊天详情页

因为是线上包,为了避免点击交换名片,直接发送联系方式给线上用户,所以 将 交换名片的按钮设置 为 黑名单

3.聊天详情页

聊天详情页的项目卡片点击后重新进入到项目页面,导致重复遍历,所以将项目卡片的可点击元素设置为 黑名单

4.头像部分

点击头像会调起相机,导致运行到此处就 shutdown ,所以设置所有可点击的头像部分都为 黑名单,运行就正常了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容