Fix flaky test AccessibilityWindowQueryTest#testWindowDockAndUndock_dividerWindowAppearsAndDisappears
It's a flaky test.
Check the divider window if it is presented by a11y events,
TYPE_WINDOW_CONTENT_CHANGED, TYPE_WINDOWS_CHANGE.
And verify and pass the test case for 10 times.
Bug: 149725344
Test: atest android.accessibilityservice.cts.AccessibilityWindowQueryTest#testWindowDockAndUndock_dividerWindowAppearsAndDisappears --iteration
Change-Id: I10534bf98d90295250f8e075c97501287067cc50
diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
index b37358f..252fbcb 100644
--- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
+++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityWindowQueryTest.java
@@ -150,11 +150,13 @@
}
private final AccessibilityEventFilter mDividerPresentFilter = (event) ->
- (event.getEventType() == AccessibilityEvent.TYPE_WINDOWS_CHANGED)
+ (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
+ || event.getEventType() == TYPE_WINDOWS_CHANGED)
&& isDividerWindowPresent();
private final AccessibilityEventFilter mDividerAbsentFilter = (event) ->
- (event.getEventType() == AccessibilityEvent.TYPE_WINDOWS_CHANGED)
+ (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
+ || event.getEventType() == TYPE_WINDOWS_CHANGED)
&& !isDividerWindowPresent();
@MediumTest
@@ -700,11 +702,14 @@
}
private boolean isDividerWindowPresent() {
- List<AccessibilityWindowInfo> windows = sUiAutomation.getWindows();
+ final List<AccessibilityWindowInfo> windows = sUiAutomation.getWindows();
final int windowCount = windows.size();
for (int i = 0; i < windowCount; i++) {
- AccessibilityWindowInfo window = windows.get(i);
- if (window.getType() == AccessibilityWindowInfo.TYPE_SPLIT_SCREEN_DIVIDER) {
+ final AccessibilityWindowInfo window = windows.get(i);
+ final AccessibilityNodeInfo rootNode = window.getRoot();
+ if (window.getType() == AccessibilityWindowInfo.TYPE_SPLIT_SCREEN_DIVIDER &&
+ rootNode != null &&
+ rootNode.isVisibleToUser()) {
return true;
}
}