zoukankan      html  css  js  c++  java
  • appium 定位弹出框时报错

    今天在做APP自动化时,发现定位弹出框无法定位,无奈,百度去找.发现了一篇不错的博客,故转载过来,供大家参考.后续会验证这个方法的可行性.

    本博客转自:http://blog.csdn.net/qq744746842/article/details/50284239

    最近在尝试做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);

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

    这里写图片描述

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

    我这边已通知开发改了,待后面验证后,再继续更新本博客.

  • 相关阅读:
    zepto源码--插入节点--学习笔记
    zepto源码--width,height--学习笔记
    zepto源码--$.map,$.each,$.grep--学习笔记
    zepto源码--isEmptyObject,isNumeric,inArray,trim--学习笔记
    zepto源码--filtered, contains,funcArg,setAttribute,className,deserializeVale--学习笔记
    zepto源码--qsa--学习笔记
    webstorm开发微信小程序
    第三方博客
    git最基础操作一
    vue-输入框change事件并获取值
  • 原文地址:https://www.cnblogs.com/star12111/p/8605659.html
Copyright © 2011-2022 走看看