UiAutomator无法识别popupwindow的解决方法

来源:互联网 发布:空中乘务就业数据 编辑:程序博客网 时间:2024/05/16 10:27

问题


最近在尝试做Care Android自动化的时候,发现popupwindow按钮识别不到。类似于 这里写图片描述,UiAutomator仍然识别的是下一层的窗体。可能这个时候有些人就开始想,工具都识别不出来。看来这个就是注定搞不了。 实际上我们应该尝试的去分析下原因

分析


刚才前面说了,UiAutomator仍然识别的是下一层的窗体 很有可能的原因是焦点仍然处于下一层窗体的原因,带着这个问题我们自己来写个popupwindow的一个demo来验证这个问题就可以了。

这里就直接贴出popupwindow的代码(网上很多)。

// 一个自定义的布局,作为显示的内容        View contentView = LayoutInflater.from(mContext).inflate(                R.layout.pop_window, null);        // 设置按钮的点击事件        Button button = (Button) contentView.findViewById(R.id.button1);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(mContext, "button is pressed",                        Toast.LENGTH_SHORT).show();            }        });        final PopupWindow popupWindow = new PopupWindow(contentView,                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);        popupWindow.setTouchable(true);        popupWindow.setTouchInterceptor(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                Log.i("mengdd", "onTouch : ");                return false;                // 这里如果返回true的话,touch事件将被拦截                // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss            }        });        // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框        // 我觉得这里是API的一个bug        popupWindow.setBackgroundDrawable(getResources().getDrawable(                R.drawable.logo));        // 设置好参数之后再show        popupWindow.showAsDropDown(view);

上面的实现只是做到通过点击一个按钮后,弹出一个pipwindow,我们来试试用Uiautomator来识别下。

这里写图片描述

确实是识别不出来。那下来我们在contentView 后面加一句,让contenview处于焦点

View contentView = LayoutInflater.from(mContext).inflate(                R.layout.pop_window, null);contentView.setFocusable(true);

运行程序,再来尝试下识别看看。

这里写图片描述

好了识别成功了,说明就是一个焦点的问题导致的。所以只要让开发哥哥们加上刚才前面那句代码就可以了。

参考


浮层定位不到问题 这篇文章实际已经给出了答案,只是估计很少了回去看后面的回复。

0 0
原创粉丝点击