手把手教你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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章