summaryrefslogtreecommitdiff
path: root/src/com/android/uiautomator/core/UiCollection.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/uiautomator/core/UiCollection.java')
-rw-r--r--src/com/android/uiautomator/core/UiCollection.java145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/com/android/uiautomator/core/UiCollection.java b/src/com/android/uiautomator/core/UiCollection.java
new file mode 100644
index 0000000..e15beb2
--- /dev/null
+++ b/src/com/android/uiautomator/core/UiCollection.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.uiautomator.core;
+
+/**
+ * Used to enumerate a container's UI elements for the purpose of counting,
+ * or targeting a sub elements by a child's text or description.
+ * @since API Level 16
+ */
+public class UiCollection extends UiObject {
+
+ /**
+ * Constructs an instance as described by the selector
+ *
+ * @param selector
+ * @since API Level 16
+ */
+ public UiCollection(UiSelector selector) {
+ super(selector);
+ }
+
+ /**
+ * Searches for child UI element within the constraints of this UiCollection {@link UiSelector}
+ * selector.
+ *
+ * It looks for any child matching the <code>childPattern</code> argument that has
+ * a child UI element anywhere within its sub hierarchy that has content-description text.
+ * The returned UiObject will point at the <code>childPattern</code> instance that matched the
+ * search and not at the identifying child element that matched the content description.</p>
+ *
+ * @param childPattern {@link UiSelector} selector of the child pattern to match and return
+ * @param text String of the identifying child contents of of the <code>childPattern</code>
+ * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
+ * @throws UiObjectNotFoundException
+ * @since API Level 16
+ */
+ public UiObject getChildByDescription(UiSelector childPattern, String text)
+ throws UiObjectNotFoundException {
+ Tracer.trace(childPattern, text);
+ if (text != null) {
+ int count = getChildCount(childPattern);
+ for (int x = 0; x < count; x++) {
+ UiObject row = getChildByInstance(childPattern, x);
+ String nodeDesc = row.getContentDescription();
+ if(nodeDesc != null && nodeDesc.contains(text)) {
+ return row;
+ }
+ UiObject item = row.getChild(new UiSelector().descriptionContains(text));
+ if (item.exists()) {
+ return row;
+ }
+ }
+ }
+ throw new UiObjectNotFoundException("for description= \"" + text + "\"");
+ }
+
+ /**
+ * Searches for child UI element within the constraints of this UiCollection {@link UiSelector}
+ * selector.
+ *
+ * It looks for any child matching the <code>childPattern</code> argument that has
+ * a child UI element anywhere within its sub hierarchy that is at the <code>instance</code>
+ * specified. The operation is performed only on the visible items and no scrolling is performed
+ * in this case.
+ *
+ * @param childPattern {@link UiSelector} selector of the child pattern to match and return
+ * @param instance int the desired matched instance of this <code>childPattern</code>
+ * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
+ * @since API Level 16
+ */
+ public UiObject getChildByInstance(UiSelector childPattern, int instance)
+ throws UiObjectNotFoundException {
+ Tracer.trace(childPattern, instance);
+ UiSelector patternSelector = UiSelector.patternBuilder(getSelector(),
+ UiSelector.patternBuilder(childPattern).instance(instance));
+ return new UiObject(patternSelector);
+ }
+
+ /**
+ * Searches for child UI element within the constraints of this UiCollection {@link UiSelector}
+ * selector.
+ *
+ * It looks for any child matching the <code>childPattern</code> argument that has
+ * a child UI element anywhere within its sub hierarchy that has text attribute =
+ * <code>text</code>. The returned UiObject will point at the <code>childPattern</code>
+ * instance that matched the search and not at the identifying child element that matched the
+ * text attribute.</p>
+ *
+ * @param childPattern {@link UiSelector} selector of the child pattern to match and return
+ * @param text String of the identifying child contents of of the <code>childPattern</code>
+ * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
+ * @throws UiObjectNotFoundException
+ * @since API Level 16
+ */
+ public UiObject getChildByText(UiSelector childPattern, String text)
+ throws UiObjectNotFoundException {
+ Tracer.trace(childPattern, text);
+ if (text != null) {
+ int count = getChildCount(childPattern);
+ for (int x = 0; x < count; x++) {
+ UiObject row = getChildByInstance(childPattern, x);
+ String nodeText = row.getText();
+ if(text.equals(nodeText)) {
+ return row;
+ }
+ UiObject item = row.getChild(new UiSelector().text(text));
+ if (item.exists()) {
+ return row;
+ }
+ }
+ }
+ throw new UiObjectNotFoundException("for text= \"" + text + "\"");
+ }
+
+ /**
+ * Counts child UI element instances matching the <code>childPattern</code>
+ * argument. The method returns the number of matching UI elements that are
+ * currently visible. The count does not include items of a scrollable list
+ * that are off-screen.
+ *
+ * @param childPattern a {@link UiSelector} that represents the matching child UI
+ * elements to count
+ * @return the number of matched childPattern under the current {@link UiCollection}
+ * @since API Level 16
+ */
+ public int getChildCount(UiSelector childPattern) {
+ Tracer.trace(childPattern);
+ UiSelector patternSelector =
+ UiSelector.patternBuilder(getSelector(), UiSelector.patternBuilder(childPattern));
+ return getQueryController().getPatternCount(patternSelector);
+ }
+}