8

사용자가 암호를 EditText로 선택할 수 있습니까? 나는 그들의 android : hint 속성에 의해 다른 EditText 뷰를 찾는 데 문제가 없지만, uiautomatorviewer는 모든 패스워드 필드를 NAF로 보여줍니다. 암호 필드 내용 설명을 설정해 보았는데 그 중 하나도 작동하지 않았습니다.Android uiautomator를 사용하여 암호를 입력하는 방법 EditText?

가능하지 않은 경우 테스터가 수동으로 암호를 입력하도록 시간 제한을 설정하려면 어떻게해야합니까?

답변

7

API v16에서도 동일한 문제가있었습니다. 오늘 v17 (안드로이드 4.2)로 스크립트를 시험해 보니 매력적이었습니다. uiautomator의 첫 번째 버전에는 몇 가지 주요 버그가있는 것으로 보입니다. 나는 UI 자동화 뷰어는 이제 자원-ID 속성, 유용 할 것이다 보여줍니다 볼

onView(withId(R.id.input_password)).perform(typeText("password")); 

:

// click the admin button 
new UiObject(new UiSelector().text("admin")).click(); 
// set pwd text 
new UiObject(new UiSelector().description("pwdEditText")).setText("admin"); 
// click login button 
new UiObject(new UiSelector().description("loginButton")).click(); 
+1

감사합니다. 몇 가지 방법을 시도해도 v16에서는 아무 것도 얻지 못했습니다. 대답은 v17로 변경되었습니다. – Michael

0

난 그냥 ID로 찾을 : 여기

내 코드입니다 코드에 액세스 할 수없는 경우

0

가끔 View에는 WebView 안에 렌더링 된 웹 페이지 내 텍스트 입력란에 프로그래밍 방식으로 입력해야하는 경우가 있습니다 (예 :). 즉, 이러한 경우

// Fetch the EditText within the iOrder Webpage. 
final UiObject lUiObject = UiDevice.getInstance(getInstrumentation()).findObject(new UiSelector().className(EditText.class).textContains("Enter Loyalty Code")); 

, 우리는 동적으로 EditText를 검색 할 UiSelector 클래스를 사용할 필요가; 그러나 반환 된 Matcher<View>onView(with(...)) 메서드와 호환되지 않습니다.

UiSelector를 사용

, 당신은 UiDevice 기준을 활용할 수에 프로그래밍 가짜 아래의 방법 사용하여 키 입력 :

/* Declare the KeyCodeMap. */ 
private static final KeyCharacterMap MAP_KEYCODE = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 

/** Simulates typing within a UiObject. The typed text is appended to the Object. */ 
private final void type(final UiObject pUiObject, final String pString, final boolean pIsSimulateTyping, final boolean pIsClearField) throws Exception { 
    // Fetch the Instrumentation. 
    final Instrumentation lInstrumentation = getInstrumentation(); 
    // Fetch the UiDevice. 
    final UiDevice  lUiDevice  = UiDevice.getInstance(lInstrumentation); 
    // Are we clearing the Field beforehand? 
    if(pIsClearField) { 
     // Reset the Field Text. 
     pUiObject.setText(""); 
    } 
    // Are we going to simulate mechanical typing? 
    if(pIsSimulateTyping) { 
     // Click the Field. (Implicitly open Android's Soft Keyboard.) 
     pUiObject.click(); 
     // Fetch the KeyEvents. 
     final KeyEvent[] lKeyEvents = SignUpTest.MAP_KEYCODE.getEvents(pString.toCharArray()); 
     // Delay. 
     lInstrumentation.waitForIdleSync(); 
     // Iterate the KeyEvents. 
     for(final KeyEvent lKeyEvent : lKeyEvents) { 
      // Is the KeyEvent a Release. (The KeyEvents contain both down and up events, whereas `pressKeyCode` encapsulates both down and up. This conditional statement essentially decimates the array.) 
      if(lKeyEvent.getAction() == KeyEvent.ACTION_UP) { 
       // Press the KeyEvent's corresponding KeyCode (Take account for special characters). 
       lUiDevice.pressKeyCode(lKeyEvent.getKeyCode(), lKeyEvent.isShiftPressed() ? KeyEvent.META_SHIFT_ON : 0); 
       // Delay. 
       lInstrumentation.waitForIdleSync(); 
      } 
     } 
     // Close the keyboard. 
     lUiDevice.pressBack(); 
    } 
    else { 
     // Write the String. 
     pUiObject.setText(pUiObject.getText() + pString); 
    } 
    // Delay. 
    lInstrumentation.waitForIdleSync(); 
}