0

我有一个应用程序,如果您单击一个按钮,它会打开 Android Gallery 应用程序。然后用户可以为我的应用程序选择一个图像。问题是,如果我在 JUnit 中单击该按钮,它会打开画廊,然后就坐在那里。我必须手动选择一张图片。我只是希望能够打开图库然后返回或者如果可能的话选择一张图片。

我尝试了几种选择,例如-

sendKeys(KeyEvent.KEYCODE_BACK)
Robotiums goBack(), goBackToActivity(), sendKey() functions
Robotiums clickOnScreen() function to click and select an image

但这些似乎都不起作用。那我该怎么办?

4

2 回答 2

0

我有同样的问题。您不能这样做,因为 Android Gallery 是另一个在其自己的沙箱中运行的应用程序,您无法从测试代码中访问该应用程序。

但是,我想出了以下解决方案。您可以构建自己的虚拟应用程序,为打开图像提供 Intent 过滤器。在这个应用程序中,您只需返回一个 ok 的意图。

现在,您只需在首次从测试应用程序打开图像时选择您的应用程序作为默认应用程序。之后,一切都应该自动运行。

完成测试后,您可以在 Android 设备的设置中重置默认意图过滤器。

我的解决方案的代码可以在这个讨论中找到:如何为 Intent.ACTION_GET_CONTENT 提供内容

于 2012-09-28T20:21:23.063 回答
0

可以模拟从图库返回的响应。下面的代码片段完成了所有工作。

final Intent data = new Intent();
data.setData(Uri.parse("content://media/external/images/media/458")); // put here URI that you want select in gallery
Runnable runnable = new Runnable(){
    @Override
    public void run() {
        getActivity().onActivityResult(3333,-1, data);
        synchronized(this) {
            this.notify();
        }
    }
};
synchronized(runnable) {
    getActivity().runOnUiThread(runnable);
    runnable.wait();
}

这种方法有两个缺点:

  1. 您的活动的 onActivityResult 方法应该是公开的,它会阻止封装。
  2. 测试实际上不会单击打开图库的按钮,并且不会执行 onClick 处理程序。

但是这种方法的好处是您不需要构建模拟应用程序并更改 android 设置中的任何默认值。

于 2013-04-22T21:47:08.267 回答