任何人都知道用于抓取Android应用程序GUI的好工具吗?我找到了这个,但不知道如何运行它......
2 回答
就个人而言,我认为使用MonkeyRunner和AndroidViewClient制作一个简单的 GUI 爬虫并不难。
此外,您可能想研究uiautomator和UI 测试
好是一个相对的术语。我没有使用过Robotium,但在这些圈子中提到了很多。
编辑 - 根据评论请求添加示例。
使用 MonkeyRunner 和 AndroidViewClient,您可以创建视图层次结构。我认为 AndroidViewClient 有一个内置的机制来做到这一点,但我自己写的。此代码尝试生成类似于 Linux 树命令使用的布局。和变量用于设置每行前面space
的line
“前缀”。当然,这段代码使用深度优先的递归遍历。
def printViewListDepth(view, depth=0):
space = '|' * int(not depth == 0)
space += (' ' * 2 * (depth-1)) + '|' * int(not depth-1 <= 0)
line = '_' * int(not depth == 0) * 2
text = view.getText()
text = text[:10] + int(len(text) > 10) * '...'
print " [*] %s%s%s %s %s" % (
space, line, view.getUniqueId(),
view.getClass().replace('android.widget.', ''), text)
for ch in view.children:
printViewListDepth(ch, depth+1)
您使用AndroidViewClient 返回的a调用printViewListDepth
如下:ViewClient
printViewListDepth(viewClient.root)
请注意,在上述实现中View
,通过删除“android.widget”来截断类。并且 a 的文本View
被截断为 10 个字符。您可以更改这些以满足您的需要。
编辑抓取 GUI
使用 AndroidViewClient 可以查询 View 是否可点击,someView.isClickable()
. 如果它是可点击的,你可以在它上面调用一个触摸事件,someView.touch()
. 假设大多数按钮点击打开了一个不同的活动,你需要想出一种机制来回到你从哪里来进行递归。
我想这可以通过一些努力来完成,但您可能希望从调用 BACK 按钮按下等简单的事情开始,device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
. 您可能需要处理出现的特定于应用程序的特殊情况,但这应该会让您有一个不错的开始。
您可以查看Testdroid App Crawler 这在 Testdroid Cloud 中作为项目类型提供,您可以在 15 个免费设备上轻松运行它。