Fixed testAutofillAndSave_withExternalViews_loadWebViewFirst
This test was failing on automotive because the dataset picker for OUTSIDE1 was covering the
password field; hence, when the test case used the UI automator to press the latter, it actually
triggered autofill for the former.
The solution was to clear focus before each operation.
Test: atest CtsAutoFillServiceTestCases:android.autofillservice.cts.WebViewActivityTest#testAutofillAndSave_withExternalViews_loadWebViewFirst
Bug: 135213485
Change-Id: Iab38dccb351b1c30bf7b832beaccd14efb268a7b
diff --git a/tests/autofillservice/src/android/autofillservice/cts/AbstractAutoFillActivity.java b/tests/autofillservice/src/android/autofillservice/cts/AbstractAutoFillActivity.java
index a955587..6884f06 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/AbstractAutoFillActivity.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/AbstractAutoFillActivity.java
@@ -173,4 +173,11 @@
}
super.finish();
}
+
+ /**
+ * Clears focus from input fields.
+ */
+ public void clearFocus() {
+ throw new UnsupportedOperationException("Not implemented by " + getClass());
+ }
}
diff --git a/tests/autofillservice/src/android/autofillservice/cts/LoginActivity.java b/tests/autofillservice/src/android/autofillservice/cts/LoginActivity.java
index 75b92ec..efd001f 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/LoginActivity.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/LoginActivity.java
@@ -232,9 +232,7 @@
syncRunOnUiThread(() -> v.visit(mUsernameEditText));
}
- /**
- * Clears focus from input fields by focusing on the parent layout.
- */
+ @Override
public void clearFocus() {
syncRunOnUiThread(() -> ((View) mUsernameContainer.getParent()).requestFocus());
}
diff --git a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
index 430a533..3253f29 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
@@ -167,4 +167,9 @@
public UiObject2 getLoginButton() throws Exception {
return mLoginButton;
}
+
+ @Override
+ public void clearFocus() {
+ syncRunOnUiThread(() -> mParent.requestFocus());
+ }
}
diff --git a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
index ca68a4e..3af85fb 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
@@ -353,16 +353,19 @@
Helper.assertTextIsSanitized(outside2FillNode);
// Move focus around to make sure UI is shown accordingly
+ mActivity.clearFocus();
mActivity.runOnUiThread(() -> mActivity.mOutside1.requestFocus());
callback.assertUiHiddenEvent(myWebView, usernameChildId);
mUiBot.assertDatasets("OUT1");
callback.assertUiShownEvent(mActivity.mOutside1);
+ mActivity.clearFocus();
mActivity.getPasswordInput().click();
callback.assertUiHiddenEvent(mActivity.mOutside1);
mUiBot.assertDatasets("PASS");
final int passwordChildId = callback.assertUiShownEventForVirtualChild(myWebView);
+ mActivity.clearFocus();
mActivity.runOnUiThread(() -> mActivity.mOutside2.requestFocus());
callback.assertUiHiddenEvent(myWebView, passwordChildId);
final UiObject2 datasetPicker = mUiBot.assertDatasets("OUT2");