一.环境

1.环境准备:安装安卓SDK + 真机 + appcrawler-2.1.3.jar

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

1.生成yml的demo:java -jar appcrawler-2.1.3.jar –demo

2.更改并运行yml配置文件:java -jar appcrawler-2.1.3.jar  -c example. yml

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

二.参数说明

1、java -jar appcrawler-2.1.0.jar –capability appPackage=xxxxxx,appActivity=xxxxxx 
2、命名启动appium:appium –session-override

3、配置文件使用:true和false是开启和关闭的意思 
logLevel:日志级别 
saveScreen:是否截图 
reportTitle:报告名字 
screenshotTimeout:屏幕超时时间 
currentDriver:当前设备(Android/iOS) 
resultDir:结果文件夹名,给定后,将不动态命名 
tagLimitMax:ios的元素tag控制 
tagLimit:给tag 
maxTime:最大运行时间 
showCancel:应该是控制是否展示注释 
capability:用于配置appium 
androidCapability:Android专属配置,最后会和capability合并 
iosCapability:iOS专属配置 
urlWhiteList/blackList:白名单/黑名单 
xpathAttributes:用来设定可以用那些种类型去定位控件 
defineUrl:用来确定url的元素定位xpath 他的text会被取出当作url因素(没理解) 
baseUrl:设置一个起始url和maxDepth, 用来在遍历时候指定初始状态和遍历深度 
maxDepth:默认的最大深度10, 结合baseUrl可很好的控制遍历的范围 
appWhiteList:app白名单,如果跳转到其他app,需要设定规则,是否允许停留在次app中 
headFirst:是否是前向遍历或者后向遍历 
enterWebView:是否遍历WebView控件 
urlBlackList:url黑名单.用于排除某些页面 
urlWhiteList:url白名单, 第一次进入了白名单的范围, 就始终在白名单中. 不然就算不在白名单中也得遍历. 
上层是白名单, 当前不是白名单才需要返回 
defaultBackAction:默认的返回动作(没看到例子,貌似不特指的话,是click) 
backButton:给一些返回控件,用于返回动作使用 
firstList:优先遍历元素 
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, 用来在遍历时候指定初始状态和遍历深度

  • WebDriver 
    1. 根据id class xpath进行定位
  • AppCrawler 
    1. 先getPageSoruce获取所有的元素列表 
    2. 根据xpath直接选择元素 
    3. 截图时增加对选择控件的高亮区分 
    4. 宽松策略的自动化机制

  • Page Source解读 
    Android 
    1. tag class 
    2. resource-id 
    3. content-desc 
    4. text 
    iOS 
    1. tag 
    2. name 
    3. label 
    4. value

  • xpath的定位 
    绝对定位 /xxx/ddd/dddd 
    相对定位 //android.widget.Button 
    查找 
    1. //* 
    2. //*[contains(@resource-id,’login’)] 
    3. //*[@text=’登录’] 
    4. //*[contains(@resource-id,’login’) and contains(@text,’登录’)] 
    5. //[contains(@text,’看点’)]/ancestor:://*[contains(name(),’EditText’)] 
    6. //*[@clickable=”true”]//android.widget.TextView[string-length(@text)>0 and string-length(@text)<20]

  • 多种方式匹配 
    xpath 
    1. //*[@resource-id=’xxxx’] 
    2. //*[contains(@text,’密码’)] 
    正则 
    1. ^确定¥ 
    2.^.输入密码 
    包含 
    1. 密码 
    2. 输入 
    3. 请

自动遍历过程 
信息的获取 
把当前app的界面dump为xml结构 
获取待遍历元素 
遍历范围selectedList 
过滤黑名单 小控制 不可见控件 blackList 
重新控件顺利firstList lastList 
跳过已点击 + 跳过限制点击的控件tagLimit 
跟进匹配的规则执行action 
循环上面的步骤

问题记录

  1. 设置登录账号、密码
triggerActions:
- action: "click"
xpath: "//*[@resource-id='com.xxx.myfinance:id/login_tv']"
times: 1
- action: "153xxxxxxxx"
xpath: "//*[@resource-id='com.xxx.myfinance:id/phone_edit']"
times: 1
- action: "123456"
xpath: "//*[@resource-id='com.xxx.myfinance:id/pwd_edit']"
times: 1
- action: "click"
xpath: "//*[@resource-id='com.xxx.myfinance:id/btn_submit']"
times: 1
 2.  编辑EditText

方式一:

 triggerActions:
- action: "10000"
xpath: "//*[@class='android.widget.EditText']"
times: 1

备注:times只能写1,否则EditText控件一直在那复制剪切 
不适用需要多次输入的EditText

方式二:

testcase:
name: "sui guan jia"
steps:
- when:
xpath: //*[@resource-id='com.feidee.myfinance:id/cash_amount']
action: ${random.int[100,1000]}
times: 0
then: []

备注:可点击的EditText获取不到

clickedIndex=-1 action=Ready
xpath=//*[@resource-id=\"com.feidee.myfinance:id/action_bar_root\" and @index=\"0\"]/*[@resource-id=\"android:id/content\" and @index=\"0\"]/*[@index=\"0\"]/*[@resource-id=\"com.feidee.myfinance:id/common_toolbar\" and @index=\"0\"]
!!! CANCELED !!!

3 appcrawler经常会出现一些错误: 
2018-05-12 10:53:27 ERROR [Crawler.crawl.203] crawl not finish, return with exception 
2018-05-12 10:53:27 ERROR [Crawler.crawl.204] Unable to launch the app: Error: Trying to start logcat capture but it’s already started! (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 0 milliseconds 
不太清楚,为什么会报错…… 总的感觉是getPageSoruce未获去到元素 
所以瞎改了

selectedList:
#android非空标签
- //*[@clickable='true']
#- //*[@clickable='true']//*[contains(name(), 'Text') and string-length(@text)>0 and string-length(@text)<10 ]
#通用的button和image
- //*[@clickable='true']//*[contains(name(), 'Button')]
- //*[@clickable='true']//*[contains(name(), 'Image')]
- //*[@clickable='true']//*[contains(name(), 'Layout')]
- //*[@class='android.view.ViewGroup']
- //*[@class='android.widget.EditText']

4 testcase 与 triggerActions 
自己试了一下,发现是先查找testcase,再查找triggerActions 
但是还是感觉逻辑关系有点混乱,或者没有办法支持复杂的逻辑关系,让自己的case更有逻辑顺序。

综合考虑:2 和 4纠结了好久,试了个遍,可能是appcrawler自己的缺陷,所以放弃了这个工具。

又看到了新的工具AIMonkey: https://testerhome.com/topics/11719 
后面准备研究下

AppCrawler运用总结的更多相关文章

  1. 测试工具之appcrawler的使用

    appcrawler 标签(空格分隔): appcrawler appcrawler 简介 一个基于自动遍历的app爬虫工具. 支持android和iOS, 支持真机和模拟器. 最大的特点是灵活性. ...

  2. AppCrawler自动化遍历使用详解(版本2.1.0 )

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  3. app遍历——appCrawler的使用

    1.appCrawler环境配置 1.1 apkinfo获取安装包的报名和mainActivity https://github.com/codeskyblue/apkinfo/releases 使用 ...

  4. appcrawler遍历工具常用方法

    Usage: appcrawler [options] -a, --app <value> Android或者iOS的文件地址, 可以是网络地址, 赋值给appium的app选项 -c,  ...

  5. APPcrawler基础原理解析及使用

    一.背景 一年前,我们一直在用monkey进行Android 的稳定性测试 ,主要目的就是为了测试app 是否会产生Crash,是否会有ANR,页面错误等问题,在monkey测试过程中,实现了脱离Ca ...

  6. AppCrawler自动化遍历使用详解(版本2.1.0 )(转)

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  7. Google AppCrawler初探

    AppCrawler是什么 你可以把它想成类似monkey一样的工具,调起你的应用程序并执行各种动作(点击,输入,滑动等)来通过这种方式 来查看各种情况下应用程序的状态 官方文档链接:AppCrawl ...

  8. Appcrawler 参数实战经验

    https://testerhome.com/topics/10574 https://yq.aliyun.com/articles/277985 https://github.com/sevenir ...

  9. AppCrawler安装使用

    百度网盘: https://pan.baidu.com/s/1bpmR3eJ mac下安装appium 真机或者模拟器均可. 确保adb devices可以看到就行 启动appium 启动appium ...

随机推荐

  1. Spring中的applicationContext文件详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. javaWeb开发中entityBean的习惯用法

    entity bean的作用是将与数据库交互的过程封装成对象,在servelet编写的过程中,只需要会写java,不必考虑与数据库交互细节. 实体类: 基本与数据库的表相对应,表示一个实在的对象. 例 ...

  3. C++ EH Exception(0xe06d7363)----抛出过程

    C++ EH Exception是Windows系统VC++里对c++语言的throw的分类和定义,它的代码就是0xe06d7363.在VC++里其本质也是SEH结构化异常机制.在我们分析用户崩溃的例 ...

  4. 使用terraform 进行gitlab 代码仓库批量迁移

      gitlab 的代码是在文件目录中,这个对于批量迁移很简单,只需要copy 文件夹(但是对于不同gitlab server 可能需要重新设置目录权限) 几个问题 大批量仓库tf resource问 ...

  5. nginx 添加用户认证

    nginx 添加用户认证  nginx 配置文件添加: 配置代理添加用户认证:server {   listen       ;   server_name localhost;   location ...

  6. LOJ6437. 「PKUSC2018」PKUSC [计算几何]

    LOJ 思路 显然多边形旋转可以变成点旋转,不同的点的贡献可以分开计算. 然后就变成了要求一个圆在多边形内的弧长. 考虑把交点全都求出来,那么两个交点之间的状态显然是相同的,可以直接把圆弧上的中点的状 ...

  7. DDL 语言

    数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化查询语言)的组成部分. SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数 ...

  8. 通过phoenix导入数据到hbase出错记录

    解决方法1 错误如下 -- ::, [hconnection-0x7b9e01aa-shared--pool11069-t114734] WARN org.apache.hadoop.hbase.ip ...

  9. 牛顿插值法(c++)【转载】

    摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...

  10. 地址栏从url输入到页面显示

    本文链接:https://blog.csdn.net/MiemieWan/article/details/85708052地址栏输入url, 要通过dns解析(浏览器是不能识别url地址的,需解析成i ...