目前我正在使用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上最基本的屏幕之一。我希望应该有比我在这里发布的更好的解决方案。有没有人有任何其他建议?
答案 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();