2012-11-15 137 views
1

失敗,我在我的使用robotium 3.5.1用下面的代碼的Android程序創建簡單的測試:Robotium在第二次測試

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

它簡單地添加新的選項卡,在該選項卡上按下按鈕,更改edittext,微調框和2個開關按鈕並保存。 一切都OK了第一個選項卡但在第二個選項卡下面的代碼:

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"); 

,但仍然一無所獲。如果有人幫助我, 會很感激。謝謝

+0

呼叫solo.sleep(INT)... – prakash

+0

已經試過了......仍然沒有工作 –

回答

1

TabHost?如果是這樣,那可能是你的問題。 TabHosts涉及多個活動打開,這真的讓機器人感到困惑。這是因爲robotium只知道它看到的最後一個活動,這意味着在多個活動打開的情況下,它最後看到的活動可能不是您期望的活動。

你可以看到發生這種情況,因爲它不是無法點擊它實際上只是在錯誤的活動上,而那些失敗的斷言。

+0

感謝您的評論保羅。你可以看到我嘗試過: solo.goBackToActivity(「MainActivity」); 其中所有的按鈕/其他視圖。仍然沒有運氣。 它不是tabHost它是ICS行動酒吧 –

+0

我的觀點是,使用goBackToActivity(「」)方法可能不會做你想做的,你應該只使用solo.goBack()調用 –

0

這是因爲有時assert會在您的活動加載之前執行。因此,嘗試前assertActivity像使用方法:每種方法後

solo.waitForActivity(getCurrentActivity().getClass().getSimpleName()); 
solo.assertCurrentActivity(PresetActivity.class); 
+0

'waitForActivity()'從來沒有工作我... – tomwhipple

+0

@ tomwhipple所以,什麼對你有用? – zest

+0

我在活動的onResume()中添加一條日誌語句,然後調用waitForLogEntry()。當然這意味着代碼與發佈的代碼不太一樣,但這是一個90%的解決方案... – tomwhipple