Android、Robotium-スクリーンショットを撮影する問題
質問
Robotiumを使用してAndroidアプリケーションのスクリーンショットを撮ろうとしています。 ここ.
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を取得しますが、ビューがnullのように見えます。
私も使用しようとしました
solo.getViews();
そして、各ビューをサイクリングしてスクリーンショットを撮りますが、それぞれのnullpointerexceptionも取得します。
ArrayList views = solo.getViews();
for(int i=0; i < views.size(); i++)
{
takeScreenShot(solo.getView(i), "Test");
}
私はRobotiumを使用したAndroid&Androidテストの自動化に十分に新しいです。これをデバッグすることについて誰かが私にアドバイスをすることができますか、それともビューが無効であると思われる理由と私の画面キャプチャが機能しないのですか?
ティア。
アップデート
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)
解決
nullpointerexceptionを取得している理由は、getView(int id)を誤って使用しているためです。 IDの代わりにインデックスを提供しているため、探しているビューは見つかりません。したがって、nullを返します。使用したいのは次のとおりです。
TakeCreenshot(solo.getViews()。get(0)、 "test")
これは、特定の時間にロボチウムが利用できるすべてのビューの最初のビューを意味します。
他のヒント
エミュレータには、SDカード用にいくつかのメガバイトが確保されていることを確認してください。
JPGをPCに戻したい場合は、Javaにこのコマンドラインを実行させることができます。
c: users me android-sdks platform-tools adb.exe pull /sdcard/test_1329402481933.jpg C:
アプリケーションの任意のポイントでスクリーンショットを撮るために、このコードを書くだけです
solo.takescreenshot();
ただし、メインアプリケーションで許可を与えることを忘れないでください。