1

我在非 root 手机上遇到了 takeScreenshot() 的问题。

通过命令行执行 JUnit 时,例如

adb -s 0123456789ABCDEF shell am instrument -w -e class com.my.android.app.LoginTestset#test_login_normal com.my.tests/android.test.InstrumentationTestRunner 

它不存储屏幕截图。我尝试在 Eclipse 中运行测试用例,屏幕截图已成功保存。此外,我在有根手机上尝试了上述命令,并且 takeScreenshot() 工作。

请注意,我在被测应用的 AndroidManifest.xml 中添加了所需的权限。

好像权限有问题

4

1 回答 1

1

Robotium (4.1) 中似乎存在一个已知问题,已在此处报告。

在正式修复之前,我想贡献我的个人技巧,即使 JUnit 通过命令行启动也对我有用。

在执行各种测试期间以及在 DearDown() 中,我将其称为 JUnit;

public void takeScreenshot(final String filename) {

    //hack -to ensure that the current view has been fully loaded
        while(view.equals(null)) {
            m_solo.sleep(500);
        }   

        View view = View view = m_solo.getCurrentViews().get(0).getRootView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();

        File directory = new File("/mnt/sdcard/Robotium-Screenshots/");
        directory.mkdirs();

        if (bitmap != null) {
            try {
                File outputFile = new File(directory, filename + ".jpg");
                FileOutputStream ostream = new FileOutputStream(outputFile);
                bitmap.compress(CompressFormat.JPEG, 100, ostream);
                ostream.close();
            } catch (Exception e) {
                logError(e.getMessage());
            }
        }
    }   
于 2013-06-11T11:15:40.033 回答