是否可以从应用程序外部识别单击的视图及其索引号?

时间:2012-03-19 05:02:13

标签: android events service capture robotium

我已经学习了几个月的Android,特别是不同的方法来测试Android应用程序。到目前为止,我一直在使用JUnit和Robotium。我已经学会了很好地使用Robotium,即使是测试blackbox应用程序,我认为它真的很酷。但在使用Robotium测试blackbox应用程序时,单击按钮的唯一方法是使用其标签,坐标或索引。问题是,如果按钮是图像按钮,那么我就不能使用它的标签了,我担心使用坐标将不允许我在不同的设备上运行我的测试,因为屏幕尺寸不同,所以视图可能会在缩放时放置在不同的位置。 所以,这只留下了索引(除非...还有另一种我可能不知道的方式吗?),但问题是我无法知道视图的索引,到目前为止我唯一的方法得到一个按钮的索引是通过写一个测试告诉Robotium点击索引为0的按钮,然后是1,然后我可以识别模式并按自己计算,直到得到我想要的按钮的索引。 / p>

但是,由于这非常麻烦(特别是如果我有几个按钮),我正在尝试构建一个工具,允许我在单击时识别视图及其索引,例如假设我正在测试音乐玩家和我想告诉Robotium点击“播放”按钮,因为它是一个图像按钮我将索引号作为参数发送到clickOnImageButton(int index),但我不知道它的索引,所以我将点击它,这个工具将打印“你点击带索引3的ImageButton”,如果可能的话作为祝酒或控制台。

现在,我的问题出现了,有没有办法做到这一点?,我试图创建一个服务,用它来捕获点击事件,但后来我读了这篇帖子:Android detecting the touch state from any application,所以看来出于安全原因,这是不可能的,因为我相信我当然需要从其他应用程序及其视图元素中捕获点击事件。我试着看看logcat是否提供了这个信息,但事实并非如此,最后我试图使用来自adb的getevent但是它的输出很难理解,而且似乎getevent的输出也是坐标,有什么方法可以根据坐标获取视图及其索引?我一直试图找到关于猴子如何工作的解释,以防有可能有帮助的东西,但我找到的所有文档都涉及如何使用它而不是它如何工作。我想知道是否有人知道Testdroid或任何记录/重放工具如何设法捕获这些点击并在不同设备上重现它们。

我非常感谢你的帮助,对不起我的长问题,这是我的第一篇文章,所以我想弄明白我想做什么,希望我能做到。

3 个答案:

答案 0 :(得分:2)

您还可以将Robotium与资源ID一起使用。一个例子是:

ImageButton imageButton = (ImageButton) solo.getView(R.id.x);

solo.clickOnView(imageButton);

请参阅javadoc了解更多白盒测试方法:

http://code.google.com/p/robotium/downloads/list`

答案 1 :(得分:1)

  

但是在使用Robotium测试blackbox应用程序时,只需点击一下即可   按钮是使用其标签,坐标或索引

您可以单击包含特定文本字符串的窗口小部件,请参阅Solo.clickOnText(String), http://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/1.0.1/robotium-solo-1.0.1-javadoc.jar!/index.html

答案 2 :(得分:0)

两种解决方案:

  1. ImageButton imageButton = (ImageButton)activity.findviewbyid(R.id.x); Touchutils.clickview(this,imageButton); 其中x是视图的id,您可以从源代码中获取。

  2. 如果您无法看到代码,请使用solo solo.clickonbutton(int index);下面的代码,其中index是视图编号