6

我正在使用Robotium测试我的 Android 应用程序,但遇到了一个间歇性问题。我的应用程序以允许用户登录的 SigninActivity 开始,然后他被定向到第二个活动,该活动具有在向 Web 服务器发出请求后填充的列表。

第一个问题是:由于我的所有活动只有在用户登录后才能访问,所以我需要从登录屏幕开始对每个活动进行测试。所以我正在做的是每个活动测试类,我从它继承

ActivityInstrumentationTestCase2<SigninActivity>

在 setUp 方法中,我正在登录用户。这是正确的方法吗?

第二个问题:我想测试在向 Web 服务器发出请求后填充的第二个活动中的列表数据。如上所述,在我的设置方法中,我登录了用户,然后使用

solo.waitForActivity(SecondActivity.class, BIG_TIMEOUT)
solo.waitForView(ListView.class)

保证第二个活动和列表存在。问题是,即使有这个验证,我也经常得到

junit.framework.AssertionFailedError: Can not click on line number 2 as there are only 0 lines available
4

2 回答 2

3

通过使用以下方法,我能够在我的应用程序中测试多个活动:

  1. 开始第一个活动
  2. 在活动中做某事(例如,单击一个开始新活动的按钮)
  3. 等待第二个活动。
  4. 在第二个活动中做某事(例如,输入一些输入文本,然后单击另一个按钮)
  5. 等等

示例代码: public void testDisplayBlackBox() {

    //Click on add ident button
    solo.clickOnButton("Tap to get another number");
    if (solo.waitForActivity(IdentityTemplateActivity.class)) {
        // select ident type
        solo.clickOnImageButton(0);

        // add name/label and create ident
        if (solo.waitForActivity(NumberDetailActivity.class)) {
            solo.enterText(0, "Robotium");
            solo.enterText(1, "test 1");    
            solo.clickOnImageButton(6);
        }
    }
于 2013-07-18T22:25:14.213 回答
1

首先,在 setUp 方法中编写逻辑代码不是一个好主意。我建议您使用这样一个事实,即测试用例按字母顺序运行 - 使用登录创建一个测试方法,然后您在其余的应用程序中登录(如果该案例首先运行),所以您不需要必须在每个测试方法之前登录。

关于你的第二个问题,solo.waitForView(ListView.class) 等待指定的时间(我不记得什么是默认值),但你没有断言它。你应该使用:

assertTrue(solo.waitForView(ListView.class));

但是,ListView 似乎有问题。确保屏幕上只有一个列表视图,否则您必须使用它的索引:

solo.clickInList(int line, int index)
于 2013-04-15T21:07:40.967 回答