腾讯Android自动化测试实战3.3.2 ListView列表遍历
3.3.2 ListView列表遍歷
編寫Android端的自動化測試用例,最常見的控件有ListView,而要想測試ListView,就必然要涉及ListView的遍歷。
關于ListView的遍歷,可能首先想到的是類似如代碼清單3-20的實現方式。
代碼清單3-20 設想中的列表遍歷
for(int i=0;i<listView. getCount();i++){
??? listView.getChildAt(int index);
??? ……;
}
但是,在Android中,對于listView.getChildAt(int index)而言,如果子控件是在屏幕之外的話,那么是無法點擊的,因此要想點擊或測試屏幕之外的子控件,就需要不斷向上滑動。因此我們可以先遍歷當前屏幕內的子控件,然后翻一屏,再遍歷屏幕內的子控件,如此反復就可以遍歷ListView所有的子控件了。
對于ListView而言,通過getFirstVisiblePosition()和getLastVisiblePosition()可以獲取ListView在屏幕中第一個可見子控件及最后一個可見子控件在列表中的位置。當遍歷至當前最后一個子控件時,通過solo.scrollListToLine(listView, lastPosition)方法將列表滑至lastPosition所在的位置,即實現翻屏的效果。當遍歷至每個child子控件時,可以通過該子控件的布局結構來判斷該子控件是否為要查找的控件。另外,需要注意的是,正如前文所介紹的,scrollListToLine(listView, lastPosition)方法并不會直接產生上滑手勢,因此如果列表需要產生上滑動作才能加載更多的話,則還需要配合使用drag方法進行上拉加載更多。
如代碼清單3-21所示,遍歷列表,查找列表中子節點為RelativeLayout且子節點的標題為×××的子控件。
代碼清單3-21 遍歷列表并找到指定標題的child
public RelativeLayout findCardByType(int maxCount) {
??? // 獲取當前界面中的ListView
??? ListView listView = getCurrentListView();
??? int firstPosition = 0;
??? int lastPosition = 0;
??? RelativeLayout relativeLayout = null;
??? int currentPosition = 1;
??? labelAll:
??? for (int i = 0; i < length; i++) {
??????? firstPosition = listView.getFirstVisiblePosition();
??????? lastPosition = listView.getLastVisiblePosition();
??????? for (int j = 1; j <= lastPosition - firstPosition; j++) {
??????????? currentPosition++;
??????????? if (currentPosition >= maxCount) {
??????????????? break labelAll;
??????????? }
??????????? // 判斷該節點是否為relativeLayout
??????????? if (listView.getChildAt(j) instanceof RelativeLayout) {
??????????????? relativeLayout = (RelativeLayout) listView.getChildAt(j);
??????????????? // 這里可以對該relativeLayount進行判斷,例如獲取該//relativeLayout中的子控件,如果有標題則判斷標題等
??????????????? if (isSatisfied(relativeLayout)) {
?????? ?????????????break labelAll;
??????????????? }
??????????????? relativeLayout = null;
??????????? }
??????? }
??????? solo.scrollListToLine(listView, lastPosition);
??????? if (lastPosition >= listView.getCount()) {
??????????? // 當需要上拉加載更多時,調用drag實現的方法進行上拉加載更多
??????????? dragUpToShowAll(listView);
??????? }
??????? sleeper.sleep();
??? }
??? sleeper.sleep();
??? return relativeLayout;
}
總結
以上是生活随笔為你收集整理的腾讯Android自动化测试实战3.3.2 ListView列表遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《众妙之门——Web用户体验设计与可用性
- 下一篇: 《MacTalk•人生元编程》导读