Android自動化測試之陸金所搶標(biāo)(一)

  • 背景介紹:最近發(fā)現(xiàn)陸金所的網(wǎng)貸標(biāo)是越來越難搶了,無論是一手新標(biāo)還是二手債轉(zhuǎn)雖然一直刷新會持續(xù)的有顯示,但是正常速度一步一步的手動去提交總是失敗。大多數(shù)情況如圖:


    圖1

    連續(xù)刷了一兩個小時,終于成功的投了一次,于是就想著寫個腳本,讓手機(jī)自己去刷。在PC上類似的工具有按鍵精靈等等,手機(jī)版應(yīng)該也有,但是作為android開發(fā),如果能自己去實(shí)現(xiàn)這種自動刷的功能就相當(dāng)于使用專業(yè)所學(xué)解決實(shí)際遇到的困難,盡管實(shí)現(xiàn)起來可能會遇到一些問題,但是一步一步的總能解決。 之所以這么肯定,也是因?yàn)橹敖佑|過自動化測試相關(guān)的東西,處理過模擬點(diǎn)擊、模擬滑動、輸入等等。那么這個系列,就一點(diǎn)一點(diǎn)的討論一下Android上定制刷標(biāo)的腳本該怎么寫。

這里先梳理一下涉及到的工具和相關(guān)知識:

1.android自動化測試uiautomator
2.布局,ID,文本 等分析器 UI automator viewer
3.涉及到的adb相關(guān)命令
4.脫離Android studio,用apk跑腳本

單單實(shí)現(xiàn)功能,1,2在Android studio環(huán)境下運(yùn)行 test腳本就行, 但是腳本寫的好,想分享給別人使用的話就涉及到3和4,并且設(shè)備需要root, 本篇重點(diǎn)介紹1,2 把功能跑通先

Uiautomator相關(guān)及布局分析器

uiautomator是谷歌提供的自動化測試工具庫,使用它提供的api,可以很輕易的實(shí)現(xiàn) 模擬點(diǎn)擊、獲取控件、按后退鍵、滑動等操作。它的使用很簡單:
新建一個demo項(xiàng)目,在app gradle中添加

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.0'

然后在androidTest中新建一個腳本文件,添加一個@Test注解的方法,然后就可以拿到UiDevice對象,后續(xù)的很多操作如點(diǎn)后退等都可以用muiDevice 來調(diào)用

UiDevice muiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
muiDevice.swipe(x,x,x,x)//動屏幕
muiDevice.pressBack()// 按設(shè)備后退鍵

圖2.png
圖3.png

runScript方法中就寫我們的邏輯,運(yùn)行的時候注意是運(yùn)行圖2上方標(biāo)紅的LuJinSuoAppScript,同時runScript記得加@Test注解


詳細(xì)的使用后面用到再說,現(xiàn)在來看看布局分析器uiautomatorviewer

它是android SDK自帶的一個元素定位工具,通過它可以很輕松的獲取當(dāng)前屏幕上的所有控件的一些屬性,如id,text,description等等

安卓開發(fā)環(huán)境安裝好之后,*****\Sdk\tools\bin目錄下可以找到uiautomatorviewer.bat,運(yùn)行效果如圖:

主界面.png

開啟后點(diǎn)擊左上第二個按鈕“device Screenshot” 可以捕獲到手機(jī)當(dāng)前顯示的界面元素,通過右側(cè)節(jié)點(diǎn)視圖可以看到 我們的目標(biāo) ”會員交易“ 也在其中。
如果此時這個按鈕有id,我們可以使用

UiObject object = new UiObject(new UiSelector().resourceId(id));

來獲取UiObject 對象,調(diào)用它的點(diǎn)擊事件,但是沒有ID。
那么他有content-desc屬性,可以通過另一個api

UiObject object = new UiObject(new UiSelector().descriptionContains(”會員交易“));

來獲取,然后調(diào)用

object.clickAndWaitForNewWindow();

點(diǎn)擊進(jìn)去。到目前,腳本方法為:


code1.png

1.獲取了設(shè)備調(diào)用對象
2.找到會員交易按鈕,調(diào)用點(diǎn)擊
于是進(jìn)到如下頁面:

圖4.png

此時有兩種情況
1:列表不為空,表示有標(biāo)可以投
2:無數(shù)據(jù)(如圖),應(yīng)該循環(huán)刷新

先看2,刷新列表,其實(shí)就是拖動屏幕下滑一段距離,不是有獲取了device嗎,直接調(diào)用api:

muiDevice.swipe(P1,P2,P3,P4,P5);

五個參數(shù)分別是:起點(diǎn)x坐標(biāo),起點(diǎn)Y坐標(biāo),終點(diǎn)x坐標(biāo),終點(diǎn)y坐標(biāo),拖動的步伐(這個參數(shù)影響時常,越大時間越長,測試中我給的10)

muiDevice.swipe(muiDevice.getDisplayWidth() / 2, muiDevice.getDisplayHeight() / 3, muiDevice.getDisplayWidth() / 2, muiDevice.getDisplayHeight() * 254 / 255, 10);//中間滑動底下刷新

再看有數(shù)據(jù)的情況:

image.png

image.png

此時,用布局器獲取到的listview的id為”com.lufax.android:id/list_view“,列表可能有一條或者多條數(shù)據(jù),所以應(yīng)該遍歷list_view子元素,找出所有的金額,對于滿足自己期望的項(xiàng)再調(diào)用點(diǎn)擊事件進(jìn)詳情,而金額的控件id是"com.lufax.android:id/tv_rate"。
一頓分析猛如虎啊,代碼就看下圖:


image.png

至此,腳本已經(jīng)完成了如下功能:
1.點(diǎn)擊進(jìn)二手標(biāo)列表
2.列表為空,自動刷新
3.列表不為空,判斷項(xiàng)目數(shù)額,符合:點(diǎn)擊進(jìn)入, 不符合繼續(xù)遍歷,直到下次刷新

接下來是詳情頁:


詳情頁

這個頁面會根據(jù)你進(jìn)入的時機(jī)出現(xiàn)不同的情況:
1.進(jìn)來的太晚,標(biāo)早沒了:直接彈框顯示無法投標(biāo)
2.進(jìn)來的太慢,右下角顯示請投別的標(biāo),但無彈框
3.正常情況,右下角顯示 立即投資按鈕
正對這三種情況,分別獲取 按鈕的ID,彈框的ID,做對應(yīng)判斷就行,這里不再詳細(xì)分析,文末會放源碼

最后重點(diǎn)來看看 投資確認(rèn)頁:


image.png

這個頁面按道理來說很簡單,找到 checkbox,模擬點(diǎn)擊,然后點(diǎn)擊 立即投資就完事了,然鵝,當(dāng)我繼續(xù)使用布局器獲取的時候出現(xiàn)了下面的問題,嘗試過重啟等(獲取布局的時候請關(guān)閉腳本工程),均無效,后面發(fā)現(xiàn)僅在確認(rèn)頁無法獲取布局,其他頁面正常。 目前尚不知道什么原因。


布局獲取失敗

好吧,布局器不能用了,那怎么找到這些按鈕的id,獲取到對象呢?這里涉及到下篇將要講到的adb命令,手機(jī)或模擬器連接電腦后,cmd中通過adb命令也是可以獲取到xml布局的 命令:

adb shell uiautomator dump /sdcard/確認(rèn)頁布局.xml

可以把手機(jī)當(dāng)前xml布局保存在文件 “確認(rèn)頁布局.xml”, 目錄是 手機(jī)上的/sdcard/,ok
adb相關(guān)命令下篇再討論,這里繼續(xù)分析,山路十八彎的拿到xml后打開一看


image.png

里面就找到上面的 勾選框,和立即投資
后面還有兩部,獲取方式也是一樣,最后輸入密碼的時候用setText APi就可以


image.png
image.png

image.png

好了,分析就到這里,當(dāng)然,代碼不太健壯,有很多異常情況需要加添代碼來處理。比如 :
1.多次點(diǎn)擊同一個項(xiàng)目,
2.進(jìn)入詳情后各種彈框,需要返回列表
3.初始界面不在主界面
4.刷新過程中登錄失效,需要重新登錄彈框等等

除了第4點(diǎn),其他的我基本都處理了,后續(xù)有興趣的可以繼續(xù)開發(fā)。

下面是源碼工程,打開后,自己登錄陸金所,停留在主頁面,然后run 這個腳本就行, 注意是run 腳本,不是run app哦

https://gitee.com/lunguoguo/UiautomatorTest.git

image.png

當(dāng)然上面的都是針對Android 開發(fā)人員才能進(jìn)行的, 并且手機(jī)不需要root
如果想把腳本給非技術(shù)人員來使用怎么搞呢,下篇繼續(xù)介紹!

注:文章和demo代碼僅為研究、學(xué)習(xí)。涉及到的app和相關(guān)平臺也只是用于舉例(本人不負(fù)責(zé)、不牟利)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:Ringoyan,騰訊測試開發(fā)工程師。先后為植物大戰(zhàn)僵尸Online,糖果傳奇等游戲擔(dān)任測試經(jīng)理,其負(fù)責(zé)的“...
    飯盒閱讀 2,878評論 2 41
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,325評論 0 17
  • 有一種女人,不會嬌滴滴的裝軟弱,不會哭啼啼的裝可憐,總是一副百毒不侵,刀槍不入的樣子。 她們不求人幫助,不靠人扶持...
    SuYuenCharme閱讀 137評論 0 0
  • 夢里驚魂?duì)柟忸櫍?避之不及恐自傷。 路遇汝父自不知, 曾聞逝去淚滿裳。
    好多年了閱讀 147評論 0 0
  • 意識覺醒這個創(chuàng)意挑戰(zhàn)真的很適合我,意識覺醒。我正處于意識覺醒階段,從以前的懵懵懂懂到現(xiàn)在開始有了追求,有了想法。 ...
    Jeudi閱讀 1,360評論 1 3

友情鏈接更多精彩內(nèi)容