1

그래서 최근에 내 기존 Android 프로젝트 중 하나에서 Espresso를 뒤범벅하기 시작했습니다.Espresso AutoCompleteTextView click

내 프로그램에서 AutoCompleteTextView을 찾을 때까지 모든 것이 꽤 순조롭게 진행되었습니다. 자동 완성 목록의 첫 번째 항목을 올바르게 클릭하는 방법을 이해하지 못하는 것 같습니다. 나는이 경우에 onView() 또는 onData()을 실제로 사용할 지조차 모르겠다.

답변

1

이 이전 질문에 감사 : Testing autocomplete textview using espresso tool

일리노이 단지에서 사용할 수있는 사람들을 위해 그것의 나의 버전을 게시 미래.

onData(instanceOf("Whatever your arrayadapter contains".class)).inRoot(RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))).perform(ViewActions.click()); 
-2

이 라이브러리 예제를 확인할 수 있습니다 그래서 나는 마침내 그것을 알아 냈 Library

+0

나는 이것이 에스프레소와 어떻게 관련이 있는지 보지 못한다. – user3050720

3

나는 받아 들인 대답보다 조금 더 깨끗한 방법을 발견했다고 생각합니다!

onData(equalTo("ITEM")).inRoot(RootMatchers.isPlatformPopup()).perform(click());

항복은 :

  • onData(x)이 드롭 다운 x 일치하는 데이터 객체를 렌더링를 찾을 것이다. 데이터는 AutoCompleteTextView에 제공된 Adaptor에 의해 제공되므로 Adaptor이 제공하는 모든 유형의 객체가 될 수 있습니다. 이는보기가 아닐 수도 있습니다. (withText, withId 등 ...) 대신 표준 hamcrest 코어 매처를 사용하는 것이 좋습니다 (equalTo, instanceOf 등 ...). 이 객체가 무엇이고 어떻게 일치하는지 알아 내려고 시도하는 것은 고통 스러울 지 모르겠지만 더 깔끔한 방법은 없습니다. 어댑터에 많은 항목이 있으면 뷰의 일부가 아직 계층 구조에 있지 않을 것입니다. 그래서 onView가 작동하지 않습니다! onData은 데이터와 일치하는보기를로드합니다. 체크 아웃 here (이 무엇 onData 반환) 및 here (이 일치하는 데이터를로드)
  • inRoot(RootMatchers.isPlatformPopup())는 그래서 드롭 다운 메뉴 그래서 우리는 우리가 원하는 것을 지정해야합니다. 당신의 활동에서 실행되는 기본 창보다는 다른 창에 밝혀 그 창을 검색하십시오. 허용 된 대답은 기본 창이 아닌 모든 창과 일치하는 것으로 보이는 RootMatchers.withDecorView(not(is(mActivityRule.getActivity().getWindow().getDecorView())))을 사용합니다.

어쨌든 누군가 다른 사람에게.