#encoding utf-8
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
device=mr.waitForConnection()
device.installPackage("../samples/android-14/ApiDemos/bin/ApiDemos.apk")
device.startActivity(component='com.example.android.apis/.ApiDemos')
result=device.takeSnapshot()
result.writeToFile('./snapshotbegin.png','png')
mr.sleep(5)
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')
result=device.takeSnapshot()
result.writeToFile('./snapshotend.png','png')
imageTrue=mr.loadImageFromFile('./snapshotbegin.png')
test=imageTrue.sameAs(result)
mr.alert('%s'%test)
将以上代码存放在test.py文件中,在../sdk/tools/目录下打开cmd,执行monkeyrunner test.py
前几天运行正常的程序,今天再执行却报错:
D:\ADT\adt-bundle-windows-x86-20131030\sdk\tools>monkeyrunnerD:\Work\py\test.py
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to anexception
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions]Traceback (most recent calllast):
File "D:\Work\py\test.py", line 10, in <module>
result.writeToFile('./snapshotbegin.png','png')
at javax.imageio.ImageIO.write(ImageIO.java:1467)
at javax.imageio.ImageIO.write(ImageIO.java:1521)
atcom.android.chimpchat.core.ChimpImageBase.writeToFileHelper(ChimpImageBase.java:140)
atcom.android.chimpchat.core.ChimpImageBase.writeToFile(ChimpImageBase.java:86)
at com.android.monkeyrunner.MonkeyImage.writeToFile(MonkeyImage.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
java.lang.ExceptionInInitializerError:java.lang.ExceptionInInitializerError
140120 15:49:31.226:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyException.fillInStackTrace(PyException.java:70)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.lang.Throwable.<init>(Throwable.java:181)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.lang.Exception.<init>(Exception.java:29)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.lang.RuntimeException.<init>(RuntimeException.java:32)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyException.<init>(PyException.java:46)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.PyException.<init>(PyException.java:43)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.Py.JavaError(Py.java:495)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.Py.JavaError(Py.java:488)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyObject.__call__(PyObject.java:422)
140120 15:49:31.226:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyObject.__call__(PyObject.java:426)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyMethod.__call__(PyMethod.java:139)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.pycode._pyx0.f$0(D:\Work\py\test.py:26)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.pycode._pyx0.call_function(D:\Work\py\test.py)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyTableCode.call(PyTableCode.java:165)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.PyCode.call(PyCode.java:18)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.Py.runCode(Py.java:1275)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at org.python.core.__builtin__.execfile_flags(__builtin__.java:522)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.util.PythonInterpreter.execfile(PythonInterpreter.java:225)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.monkeyrunner.ScriptRunner.run(ScriptRunner.java:116)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:77)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions]Caused by: java.lang.ExceptionInInitializerError
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjavax.imageio.ImageIO.write(ImageIO.java:1467)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at javax.imageio.ImageIO.write(ImageIO.java:1521)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.chimpchat.core.ChimpImageBase.writeToFileHelper(ChimpImageBase.java:140)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.chimpchat.core.ChimpImageBase.writeToFile(ChimpImageBase.java:86)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atcom.android.monkeyrunner.MonkeyImage.writeToFile(MonkeyImage.java:84)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
140120 15:49:31.226:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] atjava.lang.reflect.Method.invoke(Method.java:597)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atorg.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] ... 14 more
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions]Caused by:java.lang.IllegalArgumentException: Can't load standard profile: GRAY.pf
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.awt.color.ICC_Profile$2.run(ICC_Profile.java:894)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.security.AccessController.doPrivileged(Native Method)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.awt.color.ICC_Profile.getStandardProfile(ICC_Profile.java:887)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:858)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjava.awt.color.ColorSpace.getInstance(ColorSpace.java:315)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjavax.imageio.ImageTypeSpecifier$Grayscale.<init>(ImageTypeSpecifier.java:700)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] at javax.imageio.ImageTypeSpecifier.createGrayscale(ImageTypeSpecifier.java:781)
140120 15:49:31.226:S [main][com.android.monkeyrunner.MonkeyRunnerOptions] atjavax.imageio.ImageTypeSpecifier.<clinit>(ImageTypeSpecifier.java:140)
140120 15:49:31.226:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] ... 24 more
D:\ADT\adt-bundle-windows-x86-20131030\sdk\tools>
经查出错的地方是
result=device.takeSnapshot()
result.writeToFile('./snapshotbegin.png','png')
请教了几个同事,尚远同学指出关键的错误提示“Caused by:java.lang.IllegalArgumentException: Can't load standard profile: GRAY.pf”,搜了一下有人说是jdk有问题,重装一下就好了。另外参考了http://blog.youkuaiyun.com/half_human55/article/details/3988438 ,最终发现是由于我的jdk路径下../jre/lib/cmm下面是空的,从同事那里拷了整个文件夹过来就好了