Невозможно сделать скриншот на Android с помощью робота и приватного метода - PullRequest
5 голосов
/ 26 сентября 2011

В последнее время я пытался получить скриншот, но все напрасно папки создаются в эмуляторе Android с уровнем API 8. Я упомянул приведенный ниже код.

В этом методе Code takeScreenShot ()Предполагается создать каталог и сохранить изображение при выполнении в качестве тестового примера для Android Junit. Я получаю результат как 100%, но папки не создаются и снимок экрана не сохраняется.я должен рутировать мой телефон, чтобы использовать его SD-карту?

public class NewRobotiumTest extends ActivityInstrumentationTestCase2 {
......
......

    // actual testcase

    public void testRecorded() throws Exception {
        solo.waitForActivity("com.botskool.DialogBox.DialogBox",
                ACTIVITY_WAIT_MILLIS);
        solo.clickOnButton("Show Alert");
        solo.clickOnButton("Ok");
        solo.clickOnButton("Show Yes/No");
        takeScreenShot(solo.getViews().get(0), "testRecorded_1316975601089");
        solo.sleep(2000);
        solo.clickOnButton("Yes");
        solo.clickOnButton("Show List");
        solo.clickOnScreen(118f, 563f);

    }

    /**
     * I have added this to the android-manifest.xml file
     *
     * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     *  
     */

    public void takeScreenShot(final View view, final String name)
            throws Exception {

        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                view.setDrawingCacheEnabled(true);
                view.buildDrawingCache();
                Bitmap b = view.getDrawingCache();
                FileOutputStream fos = null;
                try {
                    final String path = Environment.getExternalStorageDirectory()+ "/test-screenshots/";
                    File dir = new File("/mnt/sdcard/test-screenshots");
                    if(!dir.mkdirs()){
                        System.out.println("Creaet sd card failed");
                    }

                    if (!dir.exists()) {
                        System.out.println(path);
                        dir.mkdirs();
                    }

                    fos = new FileOutputStream(path + name + ".jpg");
                    if (fos != null) {
                        b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                        fos.close();
                    }
                } catch (IOException e) {
                }
            }
        });

    }

}

Ответы [ 2 ]

7 голосов
/ 06 декабря 2011

Вам необходимо добавить разрешение на запись на SD-карту в основном приложении. Не тестовый проект JUnit! Добавьте это в манифест проекта: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

0 голосов
/ 18 мая 2012

Проверьте эту ссылку: http://groups.google.com/group/robotium-developers/browse_thread/thread/c5cf28ef88918d7d/94add22e074ac694

Я думаю, что это ответит на ваш вопрос.

...