首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robotium在第二次测试中失败

Robotium在第二次测试中失败
EN

Stack Overflow用户
提问于 2012-11-15 17:58:05
回答 2查看 1.3K关注 0票数 1

我已经使用robotium 3.5.1在我的android程序中使用以下代码创建了简单的测试:

代码语言:javascript
复制
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个切换按钮并保存。在第一个选项卡中一切正常,但在第二个选项卡中使用以下代码:

代码语言:javascript
复制
solo.clickOnText("New Preset");

什么都别做就好!当点击此按钮时,没有任何反应,它应该转发到PresetActivity,因为它在第一个选项卡中正确转发。

错误代码:

代码语言:javascript
复制
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)

我还试图通过调用以下命令来强制执行:

代码语言:javascript
复制
solo.goBackToActivity("MainActivity");

但还是一无所获。如果有人帮我的话我会很感激的。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 07:03:22

TabHost?如果是这样,这可能就是您的问题所在。TabHosts涉及到打开多个活动,这真的让robotium感到困惑。这是因为robotium只知道它看到的最后一个活动,这意味着在多个活动打开的情况下,它最后看到的活动可能不是您期望的那个。

你可以看到这正在发生,因为它不是没有点击任何东西,而是实际上只是点击了错误的活动,这就是失败的断言。

票数 1
EN

Stack Overflow用户

发布于 2012-11-23 04:01:37

这是因为有时assert会在活动加载之前执行。因此,尝试在assertActivity之前使用类似以下内容:

代码语言:javascript
复制
solo.waitForActivity(getCurrentActivity().getClass().getSimpleName());
solo.assertCurrentActivity(PresetActivity.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13395071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档