手把手教你monkeyrunner_youni發短信


轉自:

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!

 

 

 

 

發佈了87 篇原創文章 · 獲贊 23 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章