2013-07-02 132 views
0

我使用monkeyrunner和androidviewclient来抓取某些android应用程序的GUI(即,this)。顺便说一句,它工作得很好!问题是,有时当你点击一个可点击的组件时,它会打开你所在的页面,或者你之前在这个页面中。例如,您位于应用程序的主目录中,然后单击主页链接或应用程序徽标,然后转到同一页面(即应用程序的主目录!)。我想避免这种情况。换句话说,这可能导致无限循环点击。是否有任何想法或启发式来衡量两个活动页面之间的相似度。或者我应该问,什么指标都不错测量两页,内容的次数,或文本之间的相似性等Android:测量两个活动页面之间的相似度

回答

2

一旦你倾倒的树您可以保存它,然后使用一些距离针对新的转储进行计算。 例如:

# dump the tree 
tree1 = vc.dump() 
# do something, here, like touch to navigate 
someView.touch() 
# dump again 
tree2 = vc.dump() 
# calculate the distance 
d = distance(tree1, tree2) 

显然,关键是在如何选择的距离的方法。您可以将树转换为字符串,然后计算Hamming distance(如果长度相同)或Levenshtein distance(如果不相同)。

我在一些项目中一直使用这种方法。因为矩阵变得很大,所以你应该考虑应用后者的唯一方法是字符串的大小。 未来版本的AndroidViewClient将包括其中一些设施。

或者,您可以按照here所述做一些视觉比较。

+0

嗨, 当我打印树1我得到这个: [ 所以如果我想比较基于组件名称的两棵树可以吗?我想我也需要他们的内容! – Ehsan

+1

是的,你应该更深入一步,不仅要将列表转换为字符串,还要将其组件。 **提示**:'View .__ tinyStr __()'可能有帮助 –

+0

所以我应该在树或视图上使用__tinyStr __()?因为当我使用它一个视图它说AttributeError:ViewClient实例没有属性'__tinyStr__' – Ehsan

0

XMLUnit测试可能是你在找什么,http://xmlunit.sourceforge.net/

+0

我想你的链接是相当不错的,我想我可以改变我的意见到XML格式,并做了XML之间的比较,但在这里我更特别是对Android活动页面的好奇。和它们的格式 – Ehsan

+0

您不是在IDE中使用XML布局文件吗?我认为你已经并可以将当前活动的XML布局与新开放的XML布局进行比较。 – Chucky

+0

或者,您可以在MonkeyRunner/Android View Client中使用哪些点击控件?没有办法以编程方式指定“在此视图中,单击除这些特定按钮之外的所有内容”? – Chucky

相关问题