AppCrawler運用總結

來源:互聯網
上載者:User

標籤:black   xxx   span   format   special   fir   webview控制項   sse   解釋   

一.環境

  • 環境準備:安裝安卓SDK + 真機 + appcrawler-2.1.3.jar
  • 產生yml的demo:java -jar appcrawler-2.1.3.jar –demo
  • 更改並運行yml設定檔:java -jar appcrawler-2.1.3.jar  -c example. yml

二.參數說明

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
 2.  編輯EditText
  • 1
  • 2

方式一:

 triggerActions:  - action: "10000"  xpath: "//*[@class=‘android.widget.EditText‘]"  times: 1  
  • 1
  • 2
  • 3
  • 4

備忘: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: []
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

備忘:可點擊的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 !!!
  • 1
  • 2
  • 3

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‘]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4 testcase 與 triggerActions 
自己試了一下,發現是先尋找testcase,再尋找triggerActions 
但是還是感覺邏輯關係有點混亂,或者沒有辦法支援複雜的邏輯關係,讓自己的case更有邏輯順序。

綜合考慮:2 和 4糾結了好久,試了個遍,可能是appcrawler自己的缺陷,所以放棄了這個工具。

又看到了新的工具AIMonkey: https://testerhome.com/topics/11719 
後面準備研究下

AppCrawler運用總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.