Update tapl widget header click to be more accurate to help with flakiness
Bug: 422814320
Bug: 428201604
Bug: 428204850
Test: atest NexusLauncherTests:com.android.launcher3.widget.TaplAddWidgetTest
Flag: com.android.launcher3.enable_widget_picker_refactor
Change-Id: I74ecd95a169d0da39806878f04cc5d42966b1bf8
diff --git a/tests/tapl/com/android/launcher3/tapl/Widgets.java b/tests/tapl/com/android/launcher3/tapl/Widgets.java
index 476966c..302a673 100644
--- a/tests/tapl/com/android/launcher3/tapl/Widgets.java
+++ b/tests/tapl/com/android/launcher3/tapl/Widgets.java
@@ -257,8 +257,9 @@
mLauncher.assertTrue("Header not found", header != null);
mLauncher.waitForIdle();
- header.click();
- mLauncher.waitForIdle();
+ UiObject2 headerParent = header.getParent();
+ headerParent.wait(Until.clickable(true), WAIT_TIME_MS);
+ headerParent.click();
LauncherInstrumentation.log("Clicked header");
@@ -299,17 +300,13 @@
mLauncher.waitForObjectBySelector(BROWSE_WIDGETS_LIST_SELECTOR);
} else {
if (isSinglePane) {
- // Ensure header is fully visible.
- mLauncher.linearGesture(
- startX,
- startY,
- endX,
- endY,
- SCROLL_STEPS,
- /* slowDown= */ true,
- LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER);
+ // Ensure header is fully visible (e.g. not occluded by browse tabs) and
+ // scroll is finished.
+ scrollAndWait(startX, startY, endX, endY);
+ } else {
+ // Wait for scroll to be stabilized
+ scrollAndWait(startX, startY, endX, startY - 1);
}
- mLauncher.waitForIdle();
// Return latest matching header.
return mLauncher.waitForObjectBySelector(headerSelector);
}
@@ -318,6 +315,18 @@
return null;
}
+ private void scrollAndWait(int startX, int startY, int endX, int endY) {
+ mLauncher.getDevice().performActionAndWait(() -> mLauncher.linearGesture(
+ startX,
+ startY,
+ endX,
+ endY,
+ SCROLL_STEPS,
+ /* slowDown= */ true,
+ LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER),
+ Until.scrollFinished(Direction.DOWN), WAIT_TIME_MS);
+ }
+
private UiObject2 findWidget(String labelText, boolean isSinglePane) {
final BySelector labelTextSelector =
By.clazz("android.widget.TextView").textContains(labelText);