對於MonkeyRunner,有些人可能會想,既然是Android自動化測試,離不開測試腳本,那麼,我們可不可以錄制測試腳本呢,答案是可以的。
我們先看看以下monkeyrecoder.py腳本:
[html]
#Usage: monkeyrunner recorder.py
#recorder.py http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_recorder.py
com.android.monkeyrunner import MonkeyRunner as mr
com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
device = mr.waitForConnection()
recorder.start(device)
#END recorder.py
首先,連接你已經打開調試模式的ANDROID設備或模擬器,然後運行上面的腳本,例如在cmd窗口中執行命令: monkeyrunner monkeyrecoder.py
執行下面的代碼後,將運行錄制腳本的程序:
#Press ExportAction to save recorded scrip to a file
#Example of result:
#PRESS|{""name"":""MENU"",""type"":""downAndUp"",}
#TOUCH|{""x"":180,""y"":175,""type"":""downAndUp"",}
#TYPE|{""message"":"""",}
=================================================
這種腳本需要另外一個monkeyrunner的腳本來解釋執行。monkeyplayback.py
[html]
#Usage: monkeyrunner playback.py "myscript"
#playback.py http://mirror.yongbok.net/linux/android/repository/platform/sdk/monkeyrunner/scripts/monkey_playback.py
import sys
com.android.monkeyrunner import MonkeyRunner
# The format of the file we are parsing is very carfeully constructed.
# Each line corresponds to a single command. The line is split into 2
# parts with a | character. Text to the left of the pipe denotes
# which command to run. The text to the right of the pipe is a python
# dictionary (it can be evaled into existence) that specifies the
# arguments for the command. In most cases, this directly maps to the
# keyword argument dictionary that could be passed to the underlying
# command.
# Lookup table to map command strings to functions that implement that
# command.
CMD_MAP = {
""TOUCH"": lambda dev, arg: dev.touch(**arg),
""DRAG"": lambda dev, arg: dev.drag(**arg),
""PRESS"": lambda dev, arg: dev.press(**arg),
""TYPE"": lambda dev, arg: dev.type(**arg),
""WAIT"": lambda dev, arg: MonkeyRunner.sleep(**arg)
}
# Process a single file for the specified device.
def process_file(fp, device):
for line in fp:
(cmd, rest) = line.split(""|"")
try:
# Parse the pydict
rest = eval(rest)
except:
print ""unable to parse options""
continue
if cmd not in CMD_MAP:
print ""unknown command: "" + cmd
continue
CMD_MAP[cmd](device, rest)
def main(): www.2cto.com
file = sys.argv[1]
fp = open(file, ""r"")
device = MonkeyRunner.waitForConnection()
process_file(fp, device)
fp.close();
if __name__ == ""__main__"":
main()
=================================================
Usage:monkeyrunner playback.py "myscript"