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

标签 android events service capture robotium

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

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

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

最佳答案

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

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

solo.clickOnView(imageButton);

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

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

关于android - 是否可以从应用程序外部识别单击的 View 及其索引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9765236/

相关文章:

java - 在 Android 中通过调用 Service 的公共(public)函数来向 Service 发送请求好不好?

java - Android - 一次设置变量并在应用程序中随处使用

android - 插件冲突错误 : Admob and Fiebase Plugin

javascript - 带有 prototype.js 的类实例上的事件

c# - ListView点击空白区域时未触发点击事件

java - 如何从 Java 程序而不是仅仅从 .bat 启动/停止作为 Windows 服务的 Tomcat?

node.js - 在 React 应用程序中创建一个安全层,以对未经身份验证的用户隐藏 Web 服务

android - 在 startIntentSenderForResult() 之后未调用 onActivityResult()

安卓ddms错误

c - 调试断言失败。表达式(流!= NULL)