1

我正在尝试为我拥有的应用程序编写一些自动化脚本。我已经完成了 Robotium 网站上的教程,并对如何实现自动化有了基本的了解。但是,从我正在测试的应用程序的情况来看,通过使用 android 层次结构查看器,我看到所有视图都没有明确定义的 id。样本层次结构

正如您从屏幕截图中看到的那样,嵌套视图上有视图。它们的 ID 读起来像 0x17e0 或 0x17de。我怎样才能引用这些,特别是在robotium脚本中?最终结果是我试图让它即使在文本切换器视图之一上也能触发点击。到目前为止,我只能让它工作,如果我给它一个像素点,或者如果我给它按钮中出现的文本(但文本是动态的并且会导致糟糕的测试)。

我是否必须使用 getCurrentViews() 过滤到文本切换器?还是我必须想办法从 FrameLayout>RelativeLayout>FrameLayout>LinearLayout>TextSwitcher 遍历整个树?

如果我必须遍历整棵树,我如何才能看到一个又一个的视图?

4

3 回答 3

1

虽然我无法让 ViewGroup() 和 getChildAt() 方法为我工作,但我最终做了一些不同的事情:

// Grabbing all the LinearLayout views found under view with with id of 'content' 
ArrayList<LinearLayout> linearLayouts = solo.getCurrentViews(LinearLayout.class, solo.getView(R.id.content));

// The 4th item in the linearLayouts list is the one I need
View pickerList = linearLayouts.get(3);

// Grabbing the buttons in the pickerList
ArrayList<TextSwitcher> buttons = solo.getCurrentViews(TextSwitcher.class,pickerList);

// Now I can click on the buttons
solo.clickOnView(buttons.get(0));

我会说这很慢。第一次单击按钮触发大约需要 10 秒。但是一旦它飞了。

于 2013-03-25T20:27:38.820 回答
0

我会投票说你真的很可能想要在层次结构中添加一些 ID,这是一个单行更改,会让你的生活变得更轻松。

但是,如果由于某种原因您无法完成此操作,我并非没有帮助,要做到这一点,您将不得不步行整个才能到达您想要的视图。

获得顶级视图,您将能够将其转换为 ViewGroup。ViewGroups 有一个名为 getChildAt() 的方法,然后您可以使用该方法在给定索引处获取子项,该索引基于 0 并且将匹配您在层次结构查看器中看到的内容,因此您可以将这些命令链接在一起以访问您的视图想与之互动。

于 2013-03-25T15:04:49.553 回答
0

我没有使用过 Robodtium,但我知道AndroidViewClient完全符合您的要求。这是一个转储主视图 ID 的代码片段:

ViewClient(*ViewClient.connectToDeviceOrExit()).traverse(transform=ViewClient.TRAVERSE_CIT)

这是结果转储:

com.android.launcher2.CellLayout id/cell3 None
     com.android.launcher2.ShortcutAndWidgetContainer NO_ID None
         com.android.launcher2.BubbleTextView NO_ID Email
         com.android.launcher2.LauncherAppWidgetHostView NO_ID None
             android.widget.AnalogClock id/0x7f0f0014 None
         com.android.launcher2.BubbleTextView NO_ID Camera
         com.android.launcher2.BubbleTextView NO_ID Settings
         com.android.launcher2.BubbleTextView NO_ID Gallery
         com.android.launcher2.LauncherAppWidgetHostView NO_ID None
             android.widget.LinearLayout id/0x7f080167 None
于 2013-03-25T15:11:04.370 回答