我有一个Android应用程序,我想自动化/压力测试。 我在SCAR Divi中制作了基于图像的自动化脚本 并针对我在Bluestacks上安装的应用程序运行它。 我想把它改成Genymotion,因为Bluestacks太慢了。
我已经设置了环境 (genymotion +图像与我的应用程序+ adb安装和工作)。 我在python中重写了我的脚本并在MonkeyRunner中使用它,但是......
除了发送手势,点击和等待, 我错过了图像识别功能。 我发现我可以将2个屏幕截图与ImageMagic进行比较,但这不是我需要的。
我需要检查某个按钮,或者至少是否是屏幕上的特定颜色。 任何人都可以指出我正确的方向吗?
我真的很感激一些例子:(
答案 0 :(得分:5)
MonkeyRunner 确实提供了相当不错的基于图像的测试方法。我将在下方向您展示如何从当前显示的设备屏幕中获取子图像。然后,您可以保存此子图像和/或与参考图像
进行比较首先,您需要截取设备当前屏幕的屏幕截图
# Take a screenshot
image = device.takeSnapshot()
然后你可以拍一张子图像。例如,该子图像可以是某个屏幕上的按钮,以验证该屏幕上是否存在该按钮。为此,您可以使用以下方法。下面的元组(0,0,50,100)只是一个例子。你应该提供自己的。基本上它是所需子图像的(x,y,w,h)。
# Take the sub-image
sub_image = image.getSubImage((0, 0, 50, 100))
在该步骤之后,您可以保存图像和/或与参考图像进行比较。要与参考图像进行比较,您可以执行以下操作:
# Load the reference image for comparison
reference = MonkeyImage.loadFromFile(PATH_TO_REFERENCE_IMAGE)
if not sub_image.sameAs(reference, 0.9):
print "Images do not match!"
# do something
0.9是接受程度。如果两个图像匹配90%或更高,则将被视为已通过
希望这会有所帮助。如果您遇到任何问题,请告诉我!
答案 1 :(得分:0)
AndroidViewClient可让您获取整个屏幕或特定视图的屏幕截图。这些屏幕截图通常使用
写入文件View.writeImageToFile(self, filename, format="PNG")
但是,如果您有兴趣获取原始图像对象,PIL Image
(参见http://www.pythonware.com/products/pil/),则可以
image = device.takeSnapshot()
然后使用库中的可用methods and tools根据您的需要进行操作或分析。