標籤:post .sh 彈出框 bsp rri 原因 ret 外部 win
今天在做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 定位彈出框時報錯