3

任何人都知道用于抓取Android应用程序GUI的好工具吗?我找到了这个,但不知道如何运行它......

4

2 回答 2

3

就个人而言,我认为使用MonkeyRunnerAndroidViewClient制作一个简单的 GUI 爬虫并不难。

此外,您可能想研究uiautomatorUI 测试

好是一个相对的术语。我没有使用过Robotium,但在这些圈子中提到了很多。

编辑 - 根据评论请求添加示例。

使用 MonkeyRunner 和 AndroidViewClient,您可以创建视图层次结构。我认为 AndroidViewClient 有一个内置的机制来做到这一点,但我自己写的。此代码尝试生成类似于 Linux 树命令使用的布局。和变量用于设置每行前面spaceline“前缀”。当然,这段代码使用深度优先的递归遍历。

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). 您可能需要处理出现的特定于应用程序的特殊情况,但这应该会让您有一个不错的开始。

于 2013-06-27T16:43:16.543 回答
0

您可以查看Testdroid App Crawler 这在 Testdroid Cloud 中作为项目类型提供,您可以在 15 个免费设备上轻松运行它。

于 2013-06-27T19:31:43.813 回答