【问题标题】:How to use UIAutomator to add account without using the index or x,y coordinate?如何在不使用索引或 x,y 坐标的情况下使用 UIAutomator 添加帐户?
【发布时间】:2014-08-19 19:26:47
【问题描述】:

我目前使用的是 Nexus 5 设备。

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

这是布局层次结构: (1) 线性布局[468,265][1056,509] -(0) 相对布局[516,400][1008,473] --(0) TextView:删除帐号[516,400][1008,473]

(1) 线性布局[468,265][1056,509] 索引 1 文本空 资源 ID 空 类 android.widget.LinearLayout 包 com.android.settings 内容描述为空 可点击的真

(0) 相对布局[516,400][1008,473] 索引 1 文本 资源 ID 类 android.widget.LinearLayout 包 com.android.settings 内容描述为空 可点击假

(0) TextView:删除帐户[516,400][1008,473] 索引 0 文本删除帐户 资源 id android:id/title 类 android.widget.TextView 包 com.android.settings 内容描述为空 可点击假

理想情况下,我想通过单击具有“删除帐户”文本的元素来实现这一点,但这是不可能的,因为该元素不可点击。 UiObject nextButton = new UiObject(new UiSelector().text("移除账号"));

或者,我可以通过索引和类名来引用可点击元素 UiObject nextButton = new UiObject(new UiSelector().index(1).className("android.widget.LinearLayout"); 或参考 x,y 坐标 getUiDevice().click(600, 450); 但是,这两种方法可能会导致后期维护成本。

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

【问题讨论】:

    标签: android-uiautomator


    【解决方案1】:

    更好的方法是使用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();
    

    【讨论】:

    • 有错字吗?你的意思是 UiObject parent = nextButton.getFromParent(....) 而不是 UiObject parent = playVideo.getFromParent(....)
    • 是的错字.. 很抱歉造成混乱.. 更正答案..!!
    • “new UiSelector().new UiSelector()”也是一种类型吗?
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2012-09-06
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多