【问题标题】:Is it posible to identify a clicked view and its index number from outside the application?是否可以从应用程序外部识别单击的视图及其索引号?
【发布时间】:2012-03-19 05:02:13
【问题描述】:

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

但是,由于这很麻烦(特别是如果我有几个按钮),我正在尝试构建一个工具,允许我在单击时识别视图及其索引,例如,假设我正在测试音乐播放器,我想告诉 Robotium 点击“播放”按钮,因为它是一个图像按钮,我会将索引号作为参数发送给 clickOnImageButton(int index),但我不知道它的索引,所以我如果可能的话,将单击它,此工具将打印类似“您单击索引为 3 的 ImageButton”的内容。

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

【问题讨论】:

    标签: android events service capture robotium


    【解决方案1】:

    您还可以使用带有资源 ID 的 Robotium。一个例子是:

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

    solo.clickOnView(imageButton);

    更多白盒测试方法请查看javadoc:

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

    【讨论】:

    • 嗨 Renas,感谢您的回答,还有 Robotium!。我对黑盒测试特别感兴趣,这就是为什么我不能使用 id。你认为我可以通过使用 getViews() 方法获得按钮的索引或 id 吗?我一直在运行一些测试,但我还不太了解它的输出。
    • 索引基本上只是左上角的视图数。因此,如果您有 5 个 ImageButton,那么它们的索引是从 0 到 4。如果你做 clickOnImageButton(0) -> clickOnImageButton(4) 你就会明白它是如何工作的。
    【解决方案2】:

    但在使用 Robotium 测试黑盒应用程序时,唯一的方法是单击 按钮是使用它的标签、坐标或索引

    您可以单击包含特定文本字符串的小部件,请参阅 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

    【讨论】:

    • 是的,我看到了那个方法,不幸的是当我想点击一个图像按钮时它没有用。感谢您的链接,在线访问 javadoc 很酷!
    • 这是一个非常陈旧过时的 javadoc。请参阅最新的 3.1 javadoc。
    【解决方案3】:

    我在进行黑盒测试时经常遇到这种情况。要记住的是,Robotium 有一个很好的clickOnView 函数,它允许你点击几乎任何东西:所以现在的问题变成了如何唯一地识别视图(因为你可以简单地获取它们然后点击它们)。

    当我使用 Robotium 编写代码时,我使用了一个非常 hacky(但简单)的解决方案:我只是添加了一个方法,允许您通过执行 getViews() 后跟 clickView() 选择任意索引来单击生成的ArrayList 中的适当视图索引。

    我很惊讶 Robotium 中还没有这个功能,我会尽快向 Renas 发出推送请求。

    【讨论】:

      【解决方案4】:

      两种解决方案:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        • 2012-07-02
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多