Domanda

Sto cercando di prendere uno screenshot della mia applicazione Android utilizzando Robotium, sto usando la funzione di sotto che ho trovato qui .

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) 
     { 
     } 
} 

sto chiamando in questo modo dal mio test:

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

Quando chiamo la funzione, ho un NullPointerException su quella linea, mi sembra come se la vista è nullo.

Inoltre ho provato usando

solo.getViews ();

e in bicicletta attraverso ogni vista e prendendo uno screenshot, ma ottengo un NullPointerException per ogni anche.

ArrayList views = solo.getViews();

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

Sono nuovo abbastanza per Android e Android l'automazione dei test utilizzando Robotium, Qualcuno mi può dare qualche consiglio su debug questo, o il motivo per cui Vista sembrano essere nullo e le mie catture dello schermo non funzionano?

TIA.

Aggiorna

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)
È stato utile?

Soluzione

Il motivo per cui si stanno ottenendo NullPointerException è perché si sta utilizzando GetView (int id) in modo non corretto. Come si sta dando un indice invece di id, non troverà la vista che si sta cercando e quindi restituisce nulla. Che cosa si vuole utilizzare è il seguente:

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

Il che significa che la prima vista di tutte le viste disponibili per Robotium in un dato momento.

Altri suggerimenti

Assicurati che il tuo emulatore ha alcuni megabyte accantonati per la scheda SD.

Se si vuole tirare la parte posteriore jpg al PC, è possibile ottenere Java per eseguire questa riga di comando:

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

Per prendere screenshot in qualsiasi punto dell'applicazione Basta scrivere questo pezzo di codice

solo.takeScreenshot ();

Ma non dimenticare di dare il permesso nell'applicazione principale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top