appium 定位弹出框时报错

Posted 让学习成为一种生活方式

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

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

技术分享图片

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

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

以上是关于appium 定位弹出框时报错的主要内容,如果未能解决你的问题,请参考以下文章

appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)

Appium 使用android_uiautomator定位元素时报错: The requested resource could not be found, or a request was rec

Pycharm中使用from appium import webdriver时报错:ModuleNotFoundError: No module named 'appium'(示例代码

Pycharm中使用from appium import webdriver时报错:ModuleNotFoundError: No module named 'appium'(示例代码

在 iPad 上的 UIWebView 中定位弹出框

appium---切换webview时报错