2017-11-23 13 views
0

아래 이미지와 같이 체크 박스가있는 넘침 메뉴가있는 UI에 대한 테스트를 작성하고 있습니다. 각 확인란의 상태를 확인하고 토글하고 싶지만 일치시키는 방법을 찾는 데 문제가 있습니다. 체크 박스와 레이블은 다른보기이므로 withText()의 확인란과 일치하지 않으며 hasSibling()도 작동하지 않습니다. 레이아웃은 메뉴 프레임 워크에 의해 생성되므로 확인란의 ID를 제어 할 수 없습니다 (둘 다 ID "체크 박스"가 있음).Espresso로 오버플로 메뉴에서 확인란을 선택하는 방법은 무엇입니까?

이 메뉴의 모습입니다 :

enter image description here

그리고이 일치하고있는 체크 박스를 토글 링에서 내 시도이다. NoMatchingViewException으로 실패합니다.

답변

0

그래서 레이블은 체크 박스의 계층 구조에서 한 수준 아래에 있으므로 확인란의 형제 자매도 마찬가지입니다. 체크 박스를 찾아 전환하려면 코드는 다음과 같습니다.

private static void toggleMenu(String label, boolean initial) { 
    openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); 
    ViewInteraction v = onView(allOf(instanceOf(CheckBox.class), hasSibling(withChild(withText(label))), isCompletelyDisplayed())); 
    if(initial) 
     v.check(matches(isChecked())); 
    else 
     v.check(matches(not(isChecked()))); 
    v.perform(click()); 
    openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); 
    v = onView(allOf(instanceOf(CheckBox.class), hasSibling(withChild(withText(label))), isCompletelyDisplayed())); 
    if(!initial) 
     v.check(matches(isChecked())); 
    else 
     v.check(matches(not(isChecked()))); 
    pressBack(); 
}