uiautomator是否可以選擇密碼EditText?我沒有任何問題通過他們的android:hint屬性找到其他EditText視圖,但uiautomatorviewer將所有密碼字段顯示爲NAF。我嘗試設置密碼字段的內容描述,也沒有工作。如何使用Android uiautomator填寫密碼EditText?
如果這是不可能的,你怎麼設置超時的測試人員手動輸入密碼?
uiautomator是否可以選擇密碼EditText?我沒有任何問題通過他們的android:hint屬性找到其他EditText視圖,但uiautomatorviewer將所有密碼字段顯示爲NAF。我嘗試設置密碼字段的內容描述,也沒有工作。如何使用Android uiautomator填寫密碼EditText?
如果這是不可能的,你怎麼設置超時的測試人員手動輸入密碼?
我曾與API V16同樣的問題。 今天我試了我的腳本與V17(Android 4.2),它的工作就像一個魅力。 看來的uiautomator
第一個版本有一些重大的錯誤。
這裏是我的代碼:
onView(withId(R.id.input_password)).perform(typeText("password"));
我看到UI Automator的瀏覽器中也顯示資源id屬性,這將是有益的:
// 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();
我只是通過ID找到他們如果你沒有訪問代碼。
有時,您的View
s將不會有ResourceId
,例如您需要以編程方式鍵入到呈現在WebView
內的網頁中的文本字段的情況。即
// Fetch the EditText within the iOrder Webpage.
final UiObject lUiObject = UiDevice.getInstance(getInstrumentation()).findObject(new UiSelector().className(EditText.class).textContains("Enter Loyalty Code"));
在這種情況下,我們需要使用UiSelector
類動態搜索EditText
;但是,您會發現返回的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();
}
感謝。 嘗試一些方法,但在v16中什麼都沒有。 所以答案是改爲v17。 – Michael 2013-11-08 02:31:05