如何在Android活动上获取所有可点击的视图

时间:2017-04-28 07:17:42

标签: appium uiautomator monkeyrunner

我想写一个App Crawler。为此,我想选择Android活动中可用的所有可点击按钮/图像/图标。然后逐个点击它们。我应该在这里使用什么,如何使用Appium,UIAutomator,MonkeyRunner?

1 个答案:

答案 0 :(得分:1)

AndroidViewClient/culebra可以帮到你。

这个几乎完全由culebra生成的脚本完成了你想要做的事情。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2017  Diego Torres Milano
Created on 2017-04-28 by Culebra v13.3.0
                      __    __    __    __
                     /  \  /  \  /  \  /  \ 
____________________/  __\/  __\/  __\/  __\_____________________________
___________________/  /__/  /__/  /__/  /________________________________
                   | / \   / \   / \   / \   \___
                   |/   \_/   \_/   \_/   \    o \ 
                                           \_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''


import re
import sys
import os


from com.dtmilano.android.viewclient import ViewClient

TAG = 'CULEBRA'

_s = 5
_v = '--verbose' in sys.argv


kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
vc = ViewClient(device, serialno, **kwargs2)
vc.dump()

def cic(view):
    if view.isClickable():
        print "should click on", view.getId()
        # view.click()

vc.traverse(transform=cic)

请注意,如果您单击某个视图并更改了屏幕,则可能需要再次调用vc.dump()以获取新树。

另外,请查看 culebra六角琴模式,它会执行类似于您想要的操作,详细解释in this post