85489510 发表于 2012-4-25 12:46:51

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)
>>>

lanse_rain 发表于 2012-4-26 14:41:47

可以在真机上运行啊
改一下,试试:
device.press('KEYCODE_MENU','DOWN_AND_UP')

lanse_rain 发表于 2012-4-26 14:41:54

可以在真机上运行啊
改一下,试试:
device.press('KEYCODE_MENU','DOWN_AND_UP')

sundaoping 发表于 2012-4-27 16:44:43

除了Monkeyrunner,大家还在用什么工具进行Android自动化测试?Robotium这个工具能否在没有源码的情况下进行测试?我这边按照指导书,在没有源码只有apk的情况下测试,老是出现“Test run failed: Unable to find instrumentation info for: ComponentInfo{com.calculator/android.test.InstrumentationTestRunner}

sundaoping 发表于 2012-4-27 16:45:55

对了,楼主在用Monkey或者Monkeyrunner的时候,这个Log怎么看啊?感觉除了错之后打印出的Log好多,不知道该怎么看,怎样通过Log查到出错的原因

85489510 发表于 2012-4-27 16:53:13

额,难道我用的手机是特例吗。。

我只要在monkeyrunner.bat命令行模式下输入任何动作的命令就会出 Error se
nding XXX even t错误。

但是如果把脚本写在py文件里面整文件运行就可以。
现在问题又来了,在用py文件运行的时候,脚本里面不能有monkeyrunner.sleep(XX)出现,只要一sleep后面就出错了。

85489510 发表于 2012-4-27 16:53:54

额,难道我用的手机是特例吗。。

我只要在monkeyrunner.bat命令行模式下输入任何动作的命令就会出 Error se
nding XXX even t错误。

但是如果把脚本写在py文件里面整文件运行就可以。
现在问题又来了,在用py文件运行的时候,脚本里面不能有monkeyrunner.sleep(XX)出现,只要一sleep后面就出错了。

sundaoping 发表于 2012-4-27 18:03:12

回复 7# 85489510


    我这边使用sleep没有问题的

85489510 发表于 2012-4-27 19:00:59

你是用的手机还是模拟器啊。

如果用的是手机的话,你在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次跑得下来不。

xszhu123 发表于 2012-6-1 20:27:45

顶!!!!!!!!!!!!!!!!!!!!!!!!!

xiaonian 发表于 2012-6-15 14:36:10

可以控制真机,我就写过monkeyrunner简单的脚本。

猫星人 发表于 2014-8-8 10:05:17

一直可以。。。

张亚洲 发表于 2014-8-10 10:59:16

不管哪个自动化运行都会报错的,所以要学会分析解决问题, monkeyrunner一般情况下是 真机没有root权限的问题,或者不能获取控件ID的问题, 剩下的就是你的脚本问题了。

cuikejie123 发表于 2016-5-28 18:59:48

可以正常控制真机啊一直都是用真机
页: [1]
查看完整版本: Monkeyrunner 能控制真手机吗?不是模拟器! 求真相!