1

次のコードで robotium 3.5.1 を使用して、Android プログラムで簡単なテストを作成しました。

protected void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
}

protected void tearDown() throws Exception {
    solo.finishOpenedActivities();
}

public void testAddTabs() throws Exception {


    addTab("TAB1");
    addPreset("TAB1");
    addTab("TAB2");
    addPreset("TAB2");


}

public void addTab(String tabName) throws Exception {

    solo.assertCurrentActivity("Checking current Activity",
            MainActivity.class);
    Log.d("MyTag", solo.getCurrentActivity().getLocalClassName() );
    solo.clickOnView(solo.getView(com.sm.scam.R.id.menu_new_tab));
    solo.enterText(0, tabName);
    solo.clickOnText("OK");

}

public void addPreset(String name) throws Exception {
    Log.d("MyTag", solo.getCurrentActivity().getLocalClassName() );
    solo.goBackToActivity("MainActivity");
    Log.d("MyTag", solo.getCurrentActivity().getLocalClassName() );
    solo.clickOnText(name);
    solo.clickOnText("New Preset");
    Log.d("MyTag", solo.getCurrentActivity().getLocalClassName() );
    solo.assertCurrentActivity("Checking current Activity",
            PresetActivity.class);

    String presetName = "Moti" + 1;
    solo.enterText(0, presetName);
    solo.pressSpinnerItem(0, 1);
    solo.clickOnText("Darkened");
    solo.clickOnText("GPS Tag");
    solo.clickOnView(solo.getView(com.sm.scam.R.id.menu_save_preset));
}

新しいタブを追加するだけで、タブでボタンを押すと、編集テキスト、スピナー、および2つのスイッチボタンが変更され、保存されます。最初のタブではすべて問題ありませんが、2 番目のタブでは次のコードが表示されます。

solo.clickOnText("New Preset");

何もしないでください!このボタンをクリックしても何も起こらず、最初のタブで正しく転送されるため、PresetActivity に転送する必要があります。

エラーコード:

junit.framework.ComparisonFailure: Checking current Activity expected:<...Preset...>            but was:<...Main...>
at com.jayway.android.robotium.solo.Asserter.assertCurrentActivity(Asserter.java:57)
at com.jayway.android.robotium.solo.Solo.assertCurrentActivity(Solo.java:570)
at com.sm.scam.test.ScamTest.addPreset(ScamTest.java:55)
at com.sm.scam.test.ScamTest.testAddTabs(ScamTest.java:32)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
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:537)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1574)

また、次のように呼び出して強制しようとしました:

solo.goBackToActivity("MainActivity");

しかし、まだ何もありません。誰かが私を助けてくれれば幸いです。ありがとう

4

2 に答える 2

1

タブホスト? もしそうなら、それはおそらくあなたの問題です。TabHosts では複数のアクティビティを開く必要があり、これにより robotium が非常に混乱します。これは、ロボティウムが最後に確認したアクティビティしか認識していないためです。これは、複数のアクティビティが開いているシナリオでは、最後に確認したアクティビティが期待どおりではない可能性があることを意味します。

これが起こっているのは、クリックに失敗しているのではなく、実際には間違ったアクティビティにあるだけであり、それが失敗したアサーションであるためです。

于 2012-11-15T23:03:21.570 に答える
0

これは、アクティビティが読み込まれる前に assert が実行されることがあるためです。したがって、assertActivity次のようなものの前に使用してみてください。

solo.waitForActivity(getCurrentActivity().getClass().getSimpleName());
solo.assertCurrentActivity(PresetActivity.class);
于 2012-11-22T20:01:37.407 に答える