有谁知道抓取android应用程序GUI的好工具吗?我找到了this,但不知道如何运行它...
发布于 2013-06-28 00:43:17
就我个人而言,我认为用MonkeyRunner和AndroidViewClient制作一个简单的图形用户界面爬虫并不难。
此外,您可能希望研究一下uiautomator和UI Testing
“好”是一个相对的术语。我没有使用过Robotium,但在这些圈子里经常提到它。
编辑-根据评论请求添加示例。
使用MonkeyRunner和AndroidViewClient,您可以创建视图的层次结构。我认为AndroidViewClient有一个内置的机制来做这件事,但我自己写的。此代码尝试生成与Linux tree命令使用的布局类似的布局。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返回的ViewClient调用printViewListDepth,如下所示:
printViewListDepth(viewClient.root)请注意,在上面的实现中,通过删除“android.widget”,View的类被截断。并且View的文本被截断为10个字符。您可以更改这些设置以满足您的需要。
编辑图形用户界面爬网
使用AndroidViewClient,你可以查询一个视图是否可点击,someView.isClickable()。如果它是可点击的,你可以在它上面调用一个触摸事件someView.touch()。假设大多数按钮单击都会打开一个不同的活动,那么您需要想出一种机制来返回到原来的位置来进行递归。
我认为这可以通过一些努力来完成,但您可能希望从调用BACK按钮按下device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)这样简单的事情开始。当特定于应用程序的特殊情况出现时,您可能需要处理它们,但这应该会让您有一个良好的开端。
发布于 2013-06-28 03:31:44
你可以看看Testdroid App Crawler,它在Testdroid Cloud中是可用的项目类型,你可以很容易地在15个免费设备上运行它。
https://stackoverflow.com/questions/17348376
复制相似问题