使用复杂布局的UiAutomator查找节点

时间:2014-04-08 13:41:13

标签: android uiautomator

我试图使用UiAutomator找到一个嵌入在Android应用中布局内相对较深的ImageView。这是我用来找到它的代码的精简版本:

UiObject nextButton = new UiObject(new UiSelector().className(className)
                                                   .index(2));
nextButton.waitForExists(20000);
nextButton.clickAndWaitForNewWindow();

布局(来自UiAutomatorViewer)如下所示:

(0) FrameLayout
  (0) LinearLayout
    (0) FrameLayout
      (0) RelativeLayout
        (0) LinearLayout
          (0) RelativeLayout
            (0) RelativeLayout
              (0) TextView
          (1) RelativeLayout
            (0) LinearLayout
              (0) TextView
              (1) TextView
            (1) ImageView
          (2) RelativeLayout
            (0) ImageView
            (1) ImageView
          (3) LinearLayout
            (0) LinearLayout
              (0) ImageView
              (1) ImageView
              (2) ImageView       //<----- The one I'm after
            (1) TextView

这里的问题是UiAutomator无法找到它。它启动UiWatcher并最终因UiObjectNotFoundException而失败。我可以通过在路上指定一些其他布局来指明方向,但我想尽可能避免这样做。我有更好的方法来寻找这个ImageView吗?我使用的是APK 16,所以不幸的是,资源问题是不可能的。

2 个答案:

答案 0 :(得分:0)

您可以为Framelayout创建一个对象,然后使用FrameLayout对象为ImageView创建另一个对象,并给出Index(2),因为没有其他索引(2)可用于ImageView。

答案 1 :(得分:0)

答案是使用更好的硬件。在慢速硬件上,似乎UiAutomator无论在给出的时间长短,都可以在布局中进行足够的迭代。