Robotium 分享一个获取控件 id 较简单的方法

剪烛 · 2014年06月23日 · 最后由 JennyHui 回复于 2015年03月31日 · 5230 次阅读
本帖已被设为精华帖!

不说其他,直接上代码:
可以直接放在测试工程里用,记得改下包名。
5s 刷新一次,需要自行在 logcat 窗口中设置筛选条件 tag=getCurrentInfo 然后就~自行发挥吧

public class GetInfoTest extends ActivityInstrumentationTestCase2 {

    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "xxxxx.xxxxxxxx.xxxxxxxxxx.xxxxxxxxxx";
    private static Class launcherActivityClass;
    static {
        try {
            launcherActivityClass = Class
                    .forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    public GetInfoTest() throws ClassNotFoundException {
        super(launcherActivityClass);
    }
    private Solo solo;
    protected void setUp() throws Exception {
        solo = new Solo(getInstrumentation(), getActivity());
    }

    public void tearDown() throws Exception {
    }
    public void testGetInfo(){
        while(true){
            solo.sleep(5000);
            getCurrentInfo();
        }   
    }
    public void getCurrentInfo(){
        Log.v("getCurrentInfo", "current activity is "
                + solo.getCurrentActivity().getClass().getSimpleName());

        ArrayList<View> av = solo.getCurrentViews();
        Log.v("getCurrentInfo", "begin get view info");
        for (View view : av) {
            Log.v("getCurrentInfo", "* * * * * * *");
            int[] location = { 0, 0 };
            view.getLocationInWindow(location);
            Log.v("getCurrentInfo", "location:" + location[0] + ","
                    + location[1]);
            Log.v("getCurrentInfo", "name:" + view.getClass().getName());
            int id = view.getId();
            if (view instanceof TextView) {
                Log.v("getCurrentInfo", "text:" + ((TextView) view).getText().toString());
            }
            if (view instanceof ViewGroup) {
                Log.v("getCurrentInfo", "this view is a viewgroup");
            }
            if (id == -1)
                continue;
            if (null != view.getResources()
                    && null != view.getResources().getResourceEntryName(id))
                Log.v("getCurrentInfo", "id:"+view.getResources().getResourceEntryName(id)
                        + ",resourse:" + Integer.toHexString(id));
                Log.v("getCurrentInfo", "clickable:"+view.isClickable());
                Log.v("getCurrentInfo", "Enable:"+view.isEnabled());
        }

        ArrayList<WebElement> WebElementsList = solo.getCurrentWebElements();
        Log.v("getCurrentInfo", "begin get webelements");
        for (WebElement we : WebElementsList) {
            Log.v("getCurrentInfo", "classname is " + we.getClassName());
            Log.v("getCurrentInfo", "id is " + we.getId());
            Log.v("getCurrentInfo", "x is " + we.getLocationX());
            Log.v("getCurrentInfo", "y is " + we.getLocationY());
            Log.v("getCurrentInfo", "name is " + we.getName());
            Log.v("getCurrentInfo", "tag name is " + we.getTagName());
            Log.v("getCurrentInfo", "text is " + we.getText());
        }
    }
}


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 28 条回复 时间 点赞

妹纸很高产啊

剪烛 #28 · 2014年06月24日 Author

#1 楼 @kasi 都是用了好久好久的一个工具,只是拿出来了。可能对于手上设备不方便 root,或者不好打开 hierarchyviewer 的同学提供一个可能的方法

建议更近一步封装 变为傻瓜化

剪烛 #26 · 2014年06月24日 Author

#3 楼 @kasi 卡斯有啥思路?

封装为 jar 包或者 做成 ui 模式 方便人使用

这个思路很赞。目前都是以外部分析为主,从 app 内部入手会是个捷径。

#5 楼 @kasi 想想觉得好复杂

呵呵 其实并不复杂 这个是傻瓜化过程 给人更方便而已,唯一的坏处就是使用的人不知道原理

剪烛 #21 · 2014年06月26日 Author

#8 楼 @kasi orz 技术有限。比如说 UI 的模式,怎么搞呢?我如果用 adb 直接筛选信息,然后这些信息咋展示成 ui?

用几个控件 text label 外加几个 button 排列组合一下就好了 点击 button 出现界面 可以把所有的控件放到一个 view 里面

剪烛 #19 · 2014年06月26日 Author

#10 楼 @kasi java 做界面么?awt?

android 不是提供了界面么

剪烛 #13 · 2014年06月26日 Author

#12 楼 @kasi = =显示在 android 机器里?ORZ 我以为显示在 PC,我觉得显示在 PC 要方便些啊。毕竟工作都在 PC,而且显示在 Android 里边又不能拷贝啥的

pc 的话 可以考虑用 c# 或者 python java 的界面有点丑

剪烛 #15 · 2014年06月26日 Author

#14 楼 @kasi 好吧,我有理由去学 python 了

#15 楼 @shixue33 可以考虑用 pyqt4~我还能帮你找到个技术宅~

剪烛 #13 · 2014年06月27日 Author

#16 楼 @mingway_hu 0.0 这样好么?我才会 python 的最最最最基本的语法……

#17 楼 @shixue33 那大哥(单身)没事自己常拿 pyqt 写小工具玩~需要的话可以把他联系方式给你~

剪烛 #11 · 2014年07月10日 Author

#18 楼 @mingway_hu 啊啊啊啊啊啊啊,求联系方式!

#19 楼 @shixue33 孙博 (87991915)~

请问 ui 出来么?

#21 楼 @lihuazhang = =! 没有,还在调界面

mark 一下,

有点不理解 :(

#25 楼 @jennyhui :( 目前来看,如果不是获取自定义控件,没必要用这个方法了。

#26 楼 @shixue33 😄 好 先放着了~自定义控件 更不会了 囧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册