2015-02-04 5 views
3

내 UI 테스트에서는 화면 맨 위에 두 개의 UiObject 텍스트를 설정하고 화면 맨 아래에 세 번째 UiObject를 클릭합니다. 일부 기기 (예 : 5.0을 실행하는 Nexus 6)에서는 완벽하게 작동합니다. 텍스트가 설정되고 화면 하단의 UiObject가 계속 표시되며 성공적으로 클릭됩니다.UiAutomator 테스트에서 키보드 검색 또는 표시 안 함

다른 장치 (예 : 4.4를 실행하는 Nexus 4)에서 UiObjects에서 setText를 호출하면 소프트 키보드가 표시되어 소프트 키보드가 화면 하단에있는 세 번째 UiObject를 가려서 클릭되지 않게합니다.

키보드를 닫으려고 UiDevice.pressBack()을 사용하는 것으로 생각했지만 키보드가 일부 장치에서는 보이고 다른 장치에서는 보이지 않는 것이 문제였습니다. 키보드를 표시하지 않는 장치를 다시 누르면 다른 동작이 발생하여 테스트가 실패하게됩니다.

나는 또한 해결책으로 UiDevice.pressEnter()를 사용하는 것을 고려했다. 나는 이것이 보이면 키보드를 없애고, 그렇지 않다면 아무것도하지 않을 것이라고 생각했다. 문제는 UiAutomator가 테스트를 실행할 때 "Enter"버튼이 없으며 "다음"버튼이 있다는 것입니다. 이것은 코드에서 실제 UI 요소를 설정하는 방식과 반대입니다. 이 테스트를 수동으로 수행하면 키보드에 예상대로 "입력"단추가 표시됩니다. 그러나 UiAutomator가 "다음"버튼을보고 있기 때문에 그것이 실행중인 기능입니다. 포커스는 다음 UiObject로 전달되고 키보드는 계속 표시됩니다.

그래서 내가하지 않으려면 뒤로 버튼을 누르지 않아도 키보드가 보이면이를 취소 할 수 있습니다. 표시 여부를 결정하는 방법이 있습니까? 아니면 더 나은 아직, 그것을 처음에는 보여주지 않습니까?

답변

2

다른 장치는 패키지가 다르며 키보드 기능도 다를 수 있습니다.
그래서 세부 사항이 모두 같지 않을 수도 있습니다. 아래

단계 내 장치에서 안드로이드 4.0 이상에서 성공하는 : 키보드 입력 방식에 비해

  1. 해제 패키지를.

    명령은 다음과 같습니다 :

    adb root 
    adb shell pm disable com.google.android.apps.inputmethod.hindi 
    adb shell pm disable com.google.android.inputmethod.korean 
    adb shell pm disable com.google.android.inputmethod.pinyin 
    adb shell pm disable com.google.android.inputmethod.latin 
    adb shell pm disable jp.co.omronsoft.iwnnime.ml 
    pause 
    

    참고 : "com.google.android.inputmethod.pinyin"와 같은 일부 패키지 이름이 장치에 존재하지 않을 수 있습니다. 이 명령을 사용 확인 :

    adb shell pm list packages inputmethod 
    
  2. 는 "구글 음성 입력"

    "구글 음성 입력을"해제 여전히 키보드를 팝업 할 수 있습니다."Google 키보드"사용 안함 "Google 음성 입력 '→ → 설정 →

    이동 설정 → 애플리케이션 → 실행 (또는 전체) :

    당신이 키보드를 사용하지 않을 경우

    .

주 : 점에서 UiObject을 찾을 수없는 경우, 해당 단계에 if() 쓰기 :

adb shell pm enable com.google.android.inputmethod.latin 
+0

코드에서 할 수있는 일이 있기를 바랬습니다. 테스트는 장치에서 실행되는 많은 중 일부일뿐입니다. 필자는 별도의 패키지에 광산을 넣고 테스트 전에 adb 명령을 실행 한 다음 나중에 키보드 패키지를 다시 활성화 할 수 있다고 생각합니다. 그것은 내가 바라는 바가 아니지만 가능한 최선의 선택 일 수 있습니다. 감사. –

0

테스트를 통과하는 방법을 찾았습니다. 간단히 화면을 더 아래로 스크롤하는 것입니다. 내 경우에는 UI가 스크롤 가능하므로이 방법이 효과적입니다.

UiScrollable layout = new UiScrollable(new UiSelector().resourceId(...)); 
layout.scrollForward(5); 

비슷한 상황의 사람에게 도움이 될 경우를 대비하여 게시하고 있습니다. 그것은 실제로 내 질문에 대답하지 않습니다, 그래서 나는 이것을 받아들이지 않을 것입니다.

0

나는 당신이 시도 할 수 있습니다 어쩌면 생각 : 당신은이 같은 키보드, 실행 명령을 활성화하려면 보기, 다음 UiDevice.pressBack().

+0

나는 이것이 내가 게시 한 답변과 비슷한 해결책이라고 생각한다. 게시 해 주셔서 감사합니다. 비슷한 문제가있는 다른 사용자에게 도움이되기를 바랍니다. –