로보트 륨을 사용하는 이상한 문제에 직면하고 있습니다. 사용시 solo.getCurrentViews()
화면에서 뷰를 가져옵니다. 그러나 일부 액티비티의 경우 뷰가로드되고 화면에서 뷰를 볼 수 없으며 숨겨져 있으며이를 표시하는 데 필요한 일부 사용자 작업이 필요합니다. 예를 들어, Amazon 홈 화면에서 제품 목록을 스크롤해야합니다. 초기 화면에는 3 개의 제품 만 표시됩니다. 그러나 solo.getCurrentViews()
은 모든 제품보기를로드합니다. 이제 화면에 표시된 세 가지 텍스트보기 이외의 TextViews를 클릭하면 오류가 발생하고 응용 프로그램이 종료됩니다. 그래서, 나는 어떻게 든 textview가 현재 화면에 보이는지 아닌지 조사해야한다고 생각합니다. 이것은 모든 뷰 객체에 적용됩니다. Robotium이 모든 뷰를로드하지만 현재 보이지 않는 뷰를 클릭하면 오류가 발생합니다.robotium을 사용하여 화면의 모든 textviews와 상호 작용할 수 없습니다.
0
A
답변
0
모든보기를 클래스 (또는 android.view 클래스!)로 캐스팅 한 다음 '시각적 속성'속성을 확인할 수 있습니다. 텍스트 뷰를 들어
:
TextView tv = (TextView) solo.getCurrentViews().get(i);
int visible = tv.VISIBLE;
0 - 화면에 표시; 기본값.
1 - 표시되지 않지만 레이아웃 중에 고려됩니다 (공백이 남아 있음).
2 -보기가 추가되지 않은 것처럼 완전히 숨김.
모든 컨트롤에 대해 동일한 작업을 수행하십시오.
0
그냥 알려주고 싶습니다. view.isShown() 메소드 검사를 사용하여 문제를 해결했습니다.
1
Solo.getCurrentViews()
은 모든보기를 반환합니다. 표시되는보기를 필터링하는 데 RobotiumUtils.removeInvisibleViews(solo.getCurrentViews())
을 사용할 수 있습니다.
또는 다음 코드를 사용하여 보이는 TextViews를 직접 필터링 할 수 있습니다.
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;
}
답변 주셔서 감사합니다. 뷰 객체의 isShown() 속성으로 해결했습니다. –