Monkeyrunner 能控制真手机吗?不是模拟器! 求真相!
Monkeyrunner 能控制真手机吗?不是模拟器!为什么那些press, touch,drag的命令在模拟器上运行OK,但在真手机上运行就出错?
此外,用recorder连接真手机进行录制,进行点击之类的操作的时候也会出一样的错。
是我哪里弄错了吗?还是Monkeyrunner 能不能控制真手机?还是只能在模拟器上运行?
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
>>> device = MonkeyRunner.waitForConnection()
下面这句会出错:
>>> device.press('KEYCODE_MENU',MonkeyDevice.DOWN_AND_UP)
120424 15:40:38.501:S Error se
nding press event: KEYCODE_MENU DOWN_AND_UP
120424 15:40:38.501:S java.net.SocketException: Software caused connection abort: recv failed
120424 15:40:38.501:S at java.
net.SocketInputStream.socketRead0(Native Method)
120424 15:40:38.501:S at java.
net.SocketInputStream.read(SocketInputStream.java:129)
120424 15:40:38.501:S at sun.n
io.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
120424 15:40:38.501:S at sun.n
io.cs.StreamDecoder.implRead(StreamDecoder.java:306)
120424 15:40:38.501:S at sun.n
io.cs.StreamDecoder.read(StreamDecoder.java:158)
120424 15:40:38.501:S at java.
io.InputStreamReader.read(InputStreamReader.java:167)
120424 15:40:38.501:S at java.
io.BufferedReader.fill(BufferedReader.java:136)
120424 15:40:38.501:S at java.
io.BufferedReader.readLine(BufferedReader.java:299)
120424 15:40:38.501:S at java.
io.BufferedReader.readLine(BufferedReader.java:362)
120424 15:40:38.501:S at com.a
ndroid.chimpchat.ChimpManager.sendMonkeyEventAndGetResponse(ChimpManager.java:18
7)
120424 15:40:38.501:S at com.a
ndroid.chimpchat.ChimpManager.sendMonkeyEvent(ChimpManager.java:234)
120424 15:40:38.501:S at com.a
ndroid.chimpchat.ChimpManager.press(ChimpManager.java:134)
120424 15:40:38.501:S at com.a
ndroid.chimpchat.adb.AdbChimpDevice.press(AdbChimpDevice.java:322)
120424 15:40:38.501:S at com.a
ndroid.monkeyrunner.MonkeyDevice.press(MonkeyDevice.java:193)
120424 15:40:38.501:S at sun.r
eflect.NativeMethodAccessorImpl.invoke0(Native Method)
120424 15:40:38.501:S at sun.r
eflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
120424 15:40:38.501:S at sun.r
eflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
120424 15:40:38.501:S at java.
lang.reflect.Method.invoke(Method.java:597)
120424 15:40:38.501:S at org.p
ython.core.PyReflectedFunction.__call__(PyReflectedFunction.java:175)
120424 15:40:38.501:S at org.p
ython.core.PyObject.__call__(PyObject.java:355)
120424 15:40:38.501:S at org.p
ython.core.PyMethod.__call__(PyMethod.java:215)
120424 15:40:38.501:S at org.p
ython.core.PyMethod.instancemethod___call__(PyMethod.java:221)
120424 15:40:38.501:S at org.p
ython.core.PyMethod.__call__(PyMethod.java:206)
120424 15:40:38.501:S at org.p
ython.core.PyObject.__call__(PyObject.java:414)
120424 15:40:38.501:S at org.p
ython.core.PyObject.__call__(PyObject.java:418)
120424 15:40:38.501:S at org.p
ython.pycode._pyx5.f$0(<stdin>:1)
120424 15:40:38.501:S at org.p
ython.pycode._pyx5.call_function(<stdin>)
120424 15:40:38.501:S at org.p
ython.core.PyTableCode.call(PyTableCode.java:165)
120424 15:40:38.501:S at org.p
ython.core.PyCode.call(PyCode.java:18)
120424 15:40:38.501:S at org.p
ython.core.Py.runCode(Py.java:1197)
120424 15:40:38.501:S at org.p
ython.core.Py.exec(Py.java:1241)
120424 15:40:38.501:S at org.p
ython.util.PythonInterpreter.exec(PythonInterpreter.java:147)
120424 15:40:38.501:S at org.p
ython.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:89)
120424 15:40:38.501:S at org.p
ython.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:70)
120424 15:40:38.501:S at org.p
ython.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:46)
120424 15:40:38.501:S at org.p
ython.util.InteractiveConsole.push(InteractiveConsole.java:110)
120424 15:40:38.501:S at org.p
ython.util.InteractiveConsole.interact(InteractiveConsole.java:90)
120424 15:40:38.501:S at org.p
ython.util.InteractiveConsole.interact(InteractiveConsole.java:60)
120424 15:40:38.501:S at com.a
ndroid.monkeyrunner.ScriptRunner.console(ScriptRunner.java:193)
120424 15:40:38.501:S at com.a
ndroid.monkeyrunner.MonkeyRunnerStarter.run(MonkeyRunnerStarter.java:73)
120424 15:40:38.501:S at com.a
ndroid.monkeyrunner.MonkeyRunnerStarter.main(MonkeyRunnerStarter.java:189)
>>> 可以在真机上运行啊
改一下,试试:
device.press('KEYCODE_MENU','DOWN_AND_UP') 可以在真机上运行啊
改一下,试试:
device.press('KEYCODE_MENU','DOWN_AND_UP') 除了Monkeyrunner,大家还在用什么工具进行Android自动化测试?Robotium这个工具能否在没有源码的情况下进行测试?我这边按照指导书,在没有源码只有apk的情况下测试,老是出现“Test run failed: Unable to find instrumentation info for: ComponentInfo{com.calculator/android.test.InstrumentationTestRunner}
” 对了,楼主在用Monkey或者Monkeyrunner的时候,这个Log怎么看啊?感觉除了错之后打印出的Log好多,不知道该怎么看,怎样通过Log查到出错的原因 额,难道我用的手机是特例吗。。
我只要在monkeyrunner.bat命令行模式下输入任何动作的命令就会出 Error se
nding XXX even t错误。
但是如果把脚本写在py文件里面整文件运行就可以。
现在问题又来了,在用py文件运行的时候,脚本里面不能有monkeyrunner.sleep(XX)出现,只要一sleep后面就出错了。 额,难道我用的手机是特例吗。。
我只要在monkeyrunner.bat命令行模式下输入任何动作的命令就会出 Error se
nding XXX even t错误。
但是如果把脚本写在py文件里面整文件运行就可以。
现在问题又来了,在用py文件运行的时候,脚本里面不能有monkeyrunner.sleep(XX)出现,只要一sleep后面就出错了。 回复 7# 85489510
我这边使用sleep没有问题的 你是用的手机还是模拟器啊。
如果用的是手机的话,你在sleep 3秒之后还能press吗,
Monkeyrunner.sleep(4)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
Monkeyrunner.sleep(4)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
Monkeyrunner.sleep(4)
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
试试这样3次跑得下来不。 顶!!!!!!!!!!!!!!!!!!!!!!!!! 可以控制真机,我就写过monkeyrunner简单的脚本。 一直可以。。。 不管哪个自动化运行都会报错的,所以要学会分析解决问题, monkeyrunner一般情况下是 真机没有root权限的问题,或者不能获取控件ID的问题, 剩下的就是你的脚本问题了。 可以正常控制真机啊一直都是用真机
页:
[1]