Android, Robotium - проблема с снимком экрана - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь сделать снимок экрана моего приложения Android, используя Robotium, я использую функцию ниже, которую я нашел здесь .

public static String SCREEN_SHOTS_LOCATION="/sdcard/"; 

public static void takeScreenShot(View view, String name) throws Exception 
{ 
    view.setDrawingCacheEnabled(true); 
    view.buildDrawingCache(); 
    Bitmap b = view.getDrawingCache(); 
    FileOutputStream fos = null; 

    try 
    { 
         File sddir = new File(SCREEN_SHOTS_LOCATION); 

         if (!sddir.exists()) 
         { 
             sddir.mkdirs(); 
         } 
         fos = new FileOutputStream(SCREEN_SHOTS_LOCATION + name + "_" + System.currentTimeMillis() + ".jpg"); 

         if (fos != null) 
         { 
             b.compress(Bitmap.CompressFormat.JPEG, 90, fos); 
             fos.close(); 
         } 
     } 
     catch (Exception e) 
     { 
     } 
} 

Я звонюкак это из моего теста:

takeScreenShot(solo.getView(0), "Test");

Когда я вызываю функцию, я получаю исключение NullPointerException в этой строке, мне кажется, что представление равно нулю.

Я такжепопытался использовать

solo.getViews ();

и циклически проходить по каждому представлению и делать снимок экрана, но я также получаю исключение NullPointerException для каждого из них.

ArrayList views = solo.getViews();

for(int i=0; i < views.size(); i++)
{
    takeScreenShot(solo.getView(i), "Test");
}

Я достаточно новичок в области автоматизации тестирования Android и Android с использованием Robotium, кто-нибудь может дать мне несколько советов по отладке этого или по причине, по которой Views кажется нулевым и мои снимки экрана не работают?

TIA.

Обновление

Error in testUI:
java.lang.NullPointerException
        at com.myapp.test.UITests.testUI(UITests.java:117)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
        at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
        at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
        at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
        at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
        at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
        at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

Ответы [ 3 ]

4 голосов
/ 12 января 2012

Причина, по которой вы получаете исключение NullPointerException, заключается в том, что вы используете getView (int id) неправильно.Поскольку вы даете ему индекс вместо идентификатора, он не найдет искомое представление и, таким образом, возвращает ноль.Вот что вы хотите использовать:

takeScreenShot (solo.getViews (). Get (0), "Test")

. Это означает, что первое представление всех представлений, доступных для Robotium по адресуданное время.

0 голосов
/ 05 мая 2013

Для того, чтобы сделать снимок экрана в любой точке приложения Просто напишите этот фрагмент кода

solo.takeScreenshot ();

Но не забудьте дать разрешение в вашем основном приложении.

0 голосов
/ 16 февраля 2012

Убедитесь, что в эмуляторе выделено несколько мегабайт для SD-карты.

Если вы хотите вытащить jpg обратно на ваш компьютер, вы можете получить Java для запуска этой командной строки:

C: \ Users \ Me \ android-sdks \ platform-tools \ adb.exe pull /sdcard/test_1329402481933.jpg c: \

...