Android,Robotium - 发布截图

时间:2012-01-11 12:48:17

标签: android robotium

我正在尝试使用Robotium截取我的Android应用程序的屏幕截图,我正在使用以下函数找到here

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,它看起来好像View是null。

我也尝试过使用

  

solo.getViews();

并循环浏览每个视图并截取屏幕截图,但我也得到了每个视图的NullPointerException。

ArrayList views = solo.getViews();

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

我对Android&amp;使用Robotium的Android测试自动化,任何人都可以给我一些关于调试这个的建议,或者为什么Views看起来像是null并且我的屏幕截图不起作用?

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 个答案:

答案 0 :(得分:4)

您获得NullPointerException的原因是您错误地使用了getView(int id)。当你给它一个索引而不是id时,它将找不到你正在寻找的视图,因此返回null。您想要使用的是:

takeScreenShot(solo.getViews()。get(0),“Test”)

这意味着在给定时间内Robotium可用的所有视图的第一个视图。

答案 1 :(得分:0)

确保您的模拟器为SD卡留出了一些兆字节。

如果你想将jpg拉回你的电脑,你可以让java运行这个命令行:

  

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

答案 2 :(得分:0)

在应用程序的任何位置拍摄屏幕截图只需编写这段代码

solo.takeScreenshot();

但不要忘记在主申请表中给予许可。