Frage

Ich versuche, einen Screenshot meiner Android -Anwendung mit Robotium aufzunehmen. Ich verwende die folgende Funktion, die ich gefunden habe hier.

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

Ich nenne es so aus meinem Test:

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

Wenn ich die Funktion aufrufe, bekomme ich eine NullPointerexception in dieser Zeile. Für mich sieht es mir so aus, als ob die Ansicht null ist.

Ich habe auch versucht zu benutzen

Solo.getViews ();

und Radfahren durch jede Ansicht und machen Sie einen Screenshot, aber ich bekomme auch für jede NullPointerexception.

ArrayList views = solo.getViews();

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

Ich bin neu genug für Android & Android Test Automation mit Robotium. Kann mir jemand einige Ratschläge zum Debuggen geben, oder der Grund, warum Ansichten null zu sein scheinen und meine Bildschirmaufnahmen nicht funktionieren?

Tia.

Aktualisieren

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)
War es hilfreich?

Lösung

Der Grund, warum Sie NullPointerexception erhalten, ist, dass Sie GetView (int ID) falsch verwenden. Wenn Sie ihm einen Index anstelle einer ID geben, wird die Ansicht, nach der Sie suchen, nicht festgestellt, und kehrt so Null zurück. Was Sie verwenden möchten, folgt:

takescreenshot (Solo.getViews (). Get (0), "Test")

Dies bedeutet die erste Ansicht aller Ansichten, die Robotium zu einem bestimmten Zeitpunkt für Robotium zur Verfügung stehen.

Andere Tipps

Stellen Sie sicher, dass Ihr Emulator einige Megabyte für die SD -Karte vorgesehen hat.

Wenn Sie die JPG zurück zu Ihrem PC ziehen möchten, können Sie Java dazu bringen, diese Befehlszeile auszuführen:

C: Benutzer me android-sdks plattform-tools adb.exe pull /sdcard/test_1329402481933.jpg c:

Für den Screenshot zu jedem Zeitpunkt der Anwendung schreiben Sie einfach dieses Stück Code

Solo.takesCreenshot ();

Vergessen Sie jedoch nicht, die Erlaubnis in Ihrer Hauptanwendung zu geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top