轉自:
http://blog.csdn.net/tu_tustudio/article/details/8313976
前一段做到手機軟件的自動化,找朋友諮詢了一下,答覆說用的比較多的是monkeyrunner和adb工具。於是就試了試。先試了下有源碼的公司項目,這個比較容易,啓動的activity和控件id一類的在源碼裏面都有呢。於是想試試只有apk包的,就拿youni來試試吧。
Youni是盛大公司產品,可以免費發短信(對方也得是youni會員),實際使用層面,和qq不覺得有啥不同,測試了一下,倒是真的走的短信接口。咱就來試試發發短信。
後面會提到的兩個工具都是sdk自帶的,位置在:android-sdk\tools,至於手機是用的ZTE中興N880S,別砸磚,哥們比較窮,所以手機比較挫,youni的程序是從豌豆莢上下載後在pc上安裝到手機的。
好了,咱先寫一個id引用方式操作界面的腳本,在寫腳本之前,得先看看界面,分析一下操作步驟:
第一個界面:
001.png
這是主界面,進入這個界面,我們需要知道他的package和activity,進入界面後,要點擊那個新消息,所以還得知道這個控件的id,點擊後,就進入第二個界面:
002.png
在這個界面上,需要操作的控件有三個:發送的號碼,短信內容和發送按鈕。
小結一下,我們需要得到五個東西:
1. 主界面的[package和activity];
2. 主界面的[新消息] 控件id;
3. 第二個界面的[發送的號碼] 控件id;
4. 第二個界面的[短信內容] 控件id;
5. 第二個界面的[發送按鈕] 控件id;
來,咱來取得這個東東,先啓動工具hierarchyviewer.bat(android-sdk\tools),在啓動前把其他的連接手機的工具暫時關閉,避免影響,啓動後看看:
003.jpg
得到了第一項:主界面的[package和activity];
Package=com.snda.youni
Activity= com.snda.youni.YouNi
哈哈,這下可以啓動程序了。點擊[Load View Hierarchy],進入另外一個界面,來找找那個新消息控件:
004.jpg
先設置20%縮放,這樣拉動viewtree的時候比較容易看到哪個控件被選中了;然後在縮略圖裏麪點擊那個新消息的位置,光標停留在上面的時候,會顯示真實的控件樣子,仔細看,是不是看到了新消息幾個字;選上了以後,拉動一下viewtree,被選中的控件很顯眼,因爲會彈出一個描述,放大放大,就是下面這個樣子:
005.jpg
可以肯定了,就是這個控件了,第二項:主界面的[新消息] 控件id=new_chat,順帶看看這個控件的其他屬性,比如:mLeft,mTop,mBottom,mWidth,mHeight,如果你的腳本是直接點擊,就可以參考這些屬性了,左面往右一點就能點擊到控件了。
手機上點擊控件[新消息],進入第二個界面,點擊[Load View Hierarchy],找尋後三項,有點慢,彆着急,等等。後面三項很容易找到了。
第二個界面的[發送的號碼] 控件id= btn_send
第二個界面的[短信內容] 控件id= recipients_editor
第二個界面的[發送按鈕] 控件id= edit_text
好了,我寫兩個版本吧,一個是用id來引用的,另外一個是絕對定位操作的,供大家參考:
第一個版本:id引用控件
優點:跟屏幕分辨率無關
缺點:超級慢
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice from com.android.monkeyrunner.easy import EasyMonkeyDevice from com.android.monkeyrunner.easy import By
package = 'com.snda.youni' activity = 'com.snda.youni.YouNi' runComponent = package + '/' + activity
device = MonkeyRunner.waitForConnection('N880_LOWCOST') device.startActivity(component=runComponent) easy_device = EasyMonkeyDevice(device) MonkeyRunner.sleep(3.0) easy_device.touch(By.id('id/new_chat'), MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/edit_text'), MonkeyDevice.DOWN_AND_UP) device.type('sms content') easy_device.touch(By.id('id/recipients_editor'), MonkeyDevice.DOWN_AND_UP) device.type('13316612345') device.press('KEYCODE_BACK', 'DOWN_AND_UP') easy_device.touch(By.id('id/btn_send'), MonkeyDevice.DOWN_AND_UP) device.press('KEYCODE_BACK', 'DOWN_AND_UP') device.press('KEYCODE_BACK', 'DOWN_AND_UP')
result = device.takeSnapshot() result.writeToFile('C:\cankao\shot1.png','png') |
第二個版本:絕對定位操作
優點:速度快
缺點:跟屏幕分辨率有關,分辨率不同代碼不同,需要等比適配
#主進程進入youni發送短信,絕對定位版本(480X800) from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice from com.android.monkeyrunner.easy import EasyMonkeyDevice from com.android.monkeyrunner.easy import By
package = 'com.snda.youni' activity = 'com.snda.youni.YouNi' runComponent = package + '/' + activity
device = MonkeyRunner.waitForConnection() device.startActivity(component=runComponent) MonkeyRunner.sleep(3.0)
device.touch(160,759,'DOWN_AND_UP') MonkeyRunner.sleep(2.0)
device.touch(240,700,'DOWN_AND_UP') device.type('sms content') MonkeyRunner.sleep(1.0) device.touch(211,150,'DOWN_AND_UP') device.type('13316612345') MonkeyRunner.sleep(1) device.press('KEYCODE_BACK', 'DOWN_AND_UP') MonkeyRunner.sleep(1.0) device.touch(450,700,'DOWN_AND_UP') MonkeyRunner.sleep(1.0) device.press('KEYCODE_BACK', 'DOWN_AND_UP') MonkeyRunner.sleep(1) device.press('KEYCODE_BACK', 'DOWN_AND_UP')
result = device.takeSnapshot() result.writeToFile('C:\cankao\shot1.png','png') |
好了,就這麼多了,代碼很簡單,沒啥好講的,怎麼運行?這都要問?好吧,打開android\tools\monkeyrunner.bat,進入jython的命令解釋器,直接把你的代碼一行行貼進去敲回車,或者保存上面的代碼,擴展名可以用py,直接執行這個py文件就可以了。
GOD BLESS U!