我从源代码构建SDK。 我想使用以下脚本:
img=MonkeyRunner.loadImageFromFile(path='/home/alsu/monkeyrunner/device.png')
img_1=device.takeSnapshot()
img_1.sameAs(img, 1)
但是发生了这个错误:
File "/home/semc/monkey/out/host/linux-x86/sdk/android-sdk_eng.semc_linux-x86/tools/test.py", line 23, in <module>
if img_1.sameAs(img,1):
at com.android.monkeyrunner.MonkeyImage.sameAs(MonkeyImage.java:138)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.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.ClassCastException: java.lang.ClassCastException: org.python.core.PySingleton cannot be cast to com.android.monkeyrunner.core.IMonkeyImage
请帮忙。
答案 0 :(得分:3)
MonkeyImage.sameAs()刚刚被破坏 - 无论你传递给它什么都没关系,你会得到那个错误。
解决方法:使用convertToBytes():
new_snap = device.takeSnapshot()
old_snap = MonkeyRunner.loadImageFromFile(control_dir + '/' + test_name + '.png')
#if new_snap.sameAs(old_snap) == True:
new_bytes = new_snap.convertToBytes('png')
old_bytes = old_snap.convertToBytes('png')
if new_bytes == old_bytes:
print 'Test ' + test_name + ' PASSED'
else:
print 'Test ' + test_name + ' FAILED'
更新:2011年10月27日:比较快照部分
根据kaciula的评论,这是从快照中删除状态栏的代码:
device = MonkeyRunner.waitForConnection(emulator)
width = int(device.getProperty('display.width'))
height = int(device.getProperty('display.height'))
density = device.getProperty('display.density')
if density == .75:
density_dir = 'ldpi'
snap_rect = 0, 19, width, height - 19
elif density == 1.5:
density_dir = 'hdpi'
snap_rect = 0, 38, width, height - 38
elif density == 2.0:
density_dir = 'xhdpi'
snap_rect = 0, 50, width, height - 50
else:
density_dir = 'mdpi'
snap_rect = 0, 25, width, height - 25
new_snap = device.takeSnapshot()
new_snap = new_snap.getSubImage(snap_rect)
答案 1 :(得分:1)
SDKTools Revision 12存在同样的问题。
更新到SDKTools第15版为我解决了这个问题。
答案 2 :(得分:0)
抱歉这个问题。此更改应解决问题:
答案 3 :(得分:0)
我在其他地方遇到过类似的问题。而不是img_1.sameAs(img,1)尝试img_1.sameAs(img,1.0)。 sameAs()函数采用浮点值。它应该没关系,因为它是python ...但它是Jython - 一切都是最糟糕的python和java在一个地方; - )
答案 4 :(得分:0)
sameAs
工作正常,直到您将图像文件移动到其他文件夹并再次加载它。奇怪的错误......
稍后编辑:
我想我已经到底了。问题似乎是MonkeyRunner.loadImageFromFile()
在文件名不是有效文件名时没有给出错误。
例如,MonkeyRunner.loadImageFromFile("d:\p.png")
之类的内容可以正常使用,但MonkeyRunner.loadImageFromFile("d:\t.png")
之类的内容无效。原因很简单:\t
是一个特殊的序列。
解决方案是使用\\\
或/
作为文件夹分隔符。
答案 5 :(得分:0)
当我使用sameAs()
时,我也遇到了类似的问题。我的问题是由三个原因造成的:
两个图像的分辨率不同,因此sameAs
函数在运行时会中断。
图片路径错误。即使我使用了错误的路径,loadImageFromFile()
也从未向我们提及过。所以我们应该确定这条路是否正确。
SDK版本不佳。就我而言,我使用了SDK_r23。