2012-11-15 36 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