2013-09-26 30 views
0

我使用robotium時遇到了一個奇怪的問題,當我使用solo.getCurrentViews()時,我在屏幕上看到了視圖。但對於一些認爲視圖已加載的活動,我無法在屏幕上看到視圖,它們是隱藏的,需要用戶執行一些操作才能顯示它們。例如,在亞馬遜主屏幕中,我必須滾動瀏覽產品列表,在初始屏幕中只顯示3種產品。但是solo.getCurrentViews()加載了所有產品視圖。現在,如果我點擊屏幕上顯示的三個文本視圖之外的其他TextView,我會看到一個錯誤,並且應用程序退出。所以,我想我必須以某種方式檢查textview是否在屏幕上顯示。這適用於所有視圖對象。 Robotium加載所有視圖,但單擊當前不可見的視圖會導致錯誤。無法使用robotium與屏幕中的所有文本視圖進行交互

回答

0

您可以將每個視圖都投射到其類(或android.view類!),然後檢查其「VISIBLE」屬性。

對於TextView的:

TextView tv = (TextView) solo.getCurrentViews().get(i); 
int visible = tv.VISIBLE; 

0 - 可見在屏幕上;默認值。
1 - 未顯示,但在佈局過程中將其考慮在內(剩餘空間)。
2 - 完全隱藏,好像視圖尚未添加。

對所有控件執行相同操作。

+0

感謝您的回答,我用視圖對象的isShown()屬性解決了它。 –

0

只是想讓你知道,我通過使用view.isShown()方法檢查來解決問題。

1

Solo.getCurrentViews()將返回所有視圖。 您可以使用:RobotiumUtils.removeInvisibleViews(solo.getCurrentViews())來過濾可見視圖。

或者您可以使用以下代碼自行篩選可見的TextView。

public ArrayList<TextView> getFilteredTextViews() 
{ 
     ArrayList<TextView> textViewList = solo.getCurrentViews(TextView.class); 
     ArrayList<TextView> filteredTextViewList = new ArrayList<TextView>(); 
     for (TextView textview : textViewList) { 
      if (textview != null && textview.isShown()) 
         { 
       filteredTextViewList .add(view); 
      } 
     } 
     return filteredTextViewList; 
} 
相關問題