8

Czy uiutomator może wybrać hasło EditText? Nie mam problemu ze znalezieniem innych widoków EditText według ich właściwości android: hint, ale uiautomatorviewer pokazuje wszystkie pola hasła jako NAF. Próbowałem ustawić opis zawartości pola hasła, które również nie działało.Jak wpisać hasło EditText z Androidem uiautomator?

Jeśli nie jest możliwe, w jaki sposób ustawić limit czasu dla testera, aby ręcznie wprowadzić hasło?

Odpowiedz

7

Miałem ten sam problem z API v16. Dzisiaj wypróbowałem mój skrypt z v17 (Android 4.2) i działało jak czar. Wygląda na to, że pierwsza wersja uiautomator zawiera kilka poważnych błędów.

Oto mój kod:

// 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

Dzięki. Wypróbuj kilka metod, ale nie uzyskałeś niczego w wersji 16. Więc odpowiedzią jest zmiana na v17. – Michael

0

Właśnie je znaleźć przez ID:

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

widzę, że UI Automator Viewer pokazuje teraz także właściwość zasobów id, które mogłyby być użyteczne jeśli nie masz dostępu do kodu.

0

Czasami twoi View s nie będzie miał ResourceId, takie jak w przypadku, gdy trzeba programowo wpisać w polu tekstowym w internetowej świadczonych wewnątrz WebView. tj

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

W takich przypadkach musimy użyć klasy UiSelector dynamicznie wyszukać EditText; okaże się jednak, że zwrócony Matcher<View> nie jest zgodny z metodami onView(with(...)).

Podczas korzystania z UiSelector, można skorzystać z UiDevice odniesienia programowo fałszywy naciśnięć klawiszy przy użyciu poniższego podejście:

/* 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(); 
} 
Powiązane problemy