Question

Je suis en train de prendre une capture d'écran de mon application Android à l'aide Robotium, j'utilise la fonction ci-dessous que j'ai trouvé .

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

Je vous appelle comme ça de mon test:

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

Quand j'appelle la fonction, je reçois un NullPointerException sur cette ligne, il me semble que si la vue est nulle.

J'ai également essayé d'utiliser

solo.getViews ();

et le vélo dans chaque vue et prendre une capture d'écran, mais je reçois un NullPointerException pour chaque aussi.

ArrayList views = solo.getViews();

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

Je suis assez nouveau pour l'automatisation des tests Android et Android en utilisant Robotium, quelqu'un peut-il me donner quelques conseils sur le débogage cela, ou la raison pour laquelle Vues semblent être nulles et mes captures d'écran ne fonctionnent pas?

TIA.

Mise à jour

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)
Était-ce utile?

La solution

La raison pour laquelle vous obtenez NullPointerException est parce que vous utilisez getView (id int) de manière incorrecte. Comme vous lui donnez un index au lieu de id, il ne trouvera pas la vue que vous recherchez et retourne donc nulle. Qu'est-ce que vous voulez utiliser est le suivant:

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

Ce qui signifie que la première vue de toutes les vues disponibles à Robotium à un moment donné.

Autres conseils

Assurez-vous que votre émulateur a quelques méga-octets mis de côté pour la carte SD.

Si vous voulez tirer le dos jpg sur votre PC, vous pouvez obtenir java pour exécuter cette ligne de commande:

C: \ Utilisateurs Me \ android-sdks \ tools \ plate-forme adb.exe traction /sdcard/test_1329402481933.jpg c: \

Pour prendre capture d'écran à tout moment de l'application suffit d'écrire ce morceau de code

solo.takeScreenshot ();

Mais ne pas oublier de donner la permission dans votre application principale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top