如何使用UIAutomator添加帐户而不使用索引或x,y坐标?

时间:2014-06-29 03:35:29

标签: uiautomator

目前我正在使用Nexus 5设备。

我正在尝试点击"删除帐户"在屏幕上。我使用了UIAutomatorViewer工具,并了解了屏幕上所有元素的节点详细信息。有三个元素对应于"添加帐户"我正在看。

这是布局层次结构:     (1)LinearLayout [468,265] [1056,509]      - (0)RelativeLayout [516,400] [1008,473]      - (0)TextView:删除帐户[516,400] [1008,473]

(1)LinearLayout [468,265] [1056,509] 指数1 文字null resource-id为null class android.widget.LinearLayout 包com.android.settings content-desc null 可点击的真实

(0)RelativeLayout [516,400] [1008,473] 指数1 文本 资源ID class android.widget.LinearLayout 包com.android.settings content-desc null 可点击的错误

(0)TextView:删除帐户[516,400] [1008,473] 指数0 文本删除帐户 resource-id android:id / title class android.widget.TextView 包com.android.settings content-desc null 可点击的错误

理想情况下,我想通过单击包含文本"删除帐户"的元素来实现此功能。但这是不可能的,因为该元素不可点击。     UiObject nextButton = new UiObject(new UiSelector()。text(" Remove account"));

或者,我可以通过index和className引用clickable元素     UiObject nextButton = new UiObject(new UiSelector()。index(1).className(" android.widget.LinearLayout"); 或参考x,y坐标     getUiDevice()。click(600,450); 然而,这两种方法可能会导致维护成本下降。

这是Android上最基本的屏幕之一。我希望应该有比我在这里发布的更好的解决方案。有没有人有任何其他建议?

1 个答案:

答案 0 :(得分:2)

更好的方法是使用getFromParent()在层次结构中查找TextView元素的父UI元素,在我们的示例中为LinearLayout并单击它:

UiObject nextButton = new UiObject(new UiSelector().text("Remove account"));

UiObject parent =nextButton.getFromParent(new UiSelector().new UiSelector().className("android.widget.LinearLayout");
parent.clickAndWaitForNewWindow();