1. 程式人生 > >appium 定位彈出框時報錯

appium 定位彈出框時報錯

無法 tomato -s 原因 code 技術 應該 自定義 vra

今天在做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 定位彈出框時報錯