這段時間一直在使用espresso 進行Android 自動化測試,說句實在話,真是不實際用一下有很多東西都不會明白吧。下來列舉兩個遇到的問題以及解決的方法吧
界面存在一個viewpager,viewpager中的內容是兩個Recyclerview並且他們的resourceId都是一致的,
這個時候,如果瞭解espresso的大概都能知道如果我簡單的通過onView=(withId(recyclerviewId))
的話,測試過程中就會拋出如下的異常
AmbiguousViewMatcherException:This matcher matches multiple views in the hierarchy
那麼這個問題要如何解決呢,其實也挺簡單的。因爲我們簡單對比下兩個recyclerView就會發現問題了,一個是VISIBLE,另一個則是INVISIBLE。所以我們可以通過下面的代碼來進行確定當前界面的RecyclerView.
onView(allOf(withId(recyclerViewId), isDisplayed()))
通過當前可見的來指定出對應的元素了。
解決完上一個問題,又出來一個新的問題了。有一個操作需要滑動到下一個RecyclerView界面,進行某個按鈕的點擊。代碼如下:
Commons.viewPagerSwipLeft(R.id.edit_performance_avatars_viewPager);
Commons.clickRecyclerViewElementByPos(R.id.fragment_avatars_recyclerView, position);
我做了一個簡單的封裝,上面的步驟應該看名字就能知道做了一個向左滑動的操作,再來點擊Recyclerview的某一個位置的按鈕。可是就這麼一個簡單的操作問題就來了。每次運行到點擊的時候又報了跟上面一樣的錯誤。
AmbiguousViewMatcherException:This matcher matches multiple views in the hierarchy
我再三的檢查了代碼,沒問題啊,但是通過看log發現兩個Recyclerview竟然當前的狀態都是VISIBILE。這個也太奇怪了。
通過再三的分析,發現調試的時候就可以運行成功,正式運行就失敗。最後終於發現原來是我的向左操作太快了,導致上一個滑動界面都未更新完,點擊就出問題了,所以我們在滑動的後面增加一個延時。增加sleep的方法需要實現IdingResource。具體可以查看