机器人问题

时间:2010-08-23 02:53:46

标签: android robotium

我刚开始使用robotium。演示可以毫无问题地运行,但是当我使用EditTextButton编写第一个测试脚本时,会出现问题。我的环境是android 2.1,脚本很简单,只需输入用户名和psw,然后点击sumbit按钮登录 脚本如下:

package com.tpc.test;

import com.tpc.login.Login;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.Smoke;

public class LoginTest extends ActivityInstrumentationTestCase2<Login>{

    private Solo solo;

    public LoginTest() {
        super("com.tpc", Login.class);

    }

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


     @Smoke
     public void testApp() throws Exception {
         String appName = solo.getCurrentActivity().getClass().getSimpleName();
         System.out.println(appName);
         solo.getButton(0).getClass().getSimpleName();
         solo.assertCurrentActivity("Expected login activity", appName); 
                 System.out.println(solo.getButton(0).getText());//can get the text of button
         solo.enterText(0, "name"); //input name to the 1st EditText is OK
         solo.enterText(1, "psw");   // Actually inout psw after name to the 1st EditText
         solo.clickOnButton(0);       //Expect click the 1st button.Actually click the 1st EditText
         //assert of sample, not been modified      
         boolean expected = true;
         boolean actual = solo.searchText("Note 1") && solo.searchText("Note 2");
         assertEquals("Note 1 and/or Note 2 are not found", false, actual);
     }

    @Override
    public void tearDown() throws Exception {
        try {
            solo.finalize();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        getActivity().finish();
        super.tearDown();
    } 
}

一个问题是名字和psw都填入第一个EditText,另一个是solo.clickOnButton(0);点击第一个EditText,而不是第一个Button。我还尝试使用Button的文本名称,但结果是一样的。似乎所有的操作都放到了第一个EditText。我想问题是什么。有什么建议吗?谢谢

4 个答案:

答案 0 :(得分:5)

我已经看过你要测试的应用程序,问题是你没有声明它支持高密度屏幕。当您在高密度仿真器/设备上使用Robotium时会出现问题。

您需要在AndroidManifest.xml中添加以下标记:

<supports-screens android:anyDensity="true"/>

如果您将该标记添加到AndroidManifest.xml,那么它将起作用。

答案 1 :(得分:3)

希望您将输入文本作为数组... 0和1 ..

但希望你没有初始化数组

import java.util.Arraylist;

希望它能在你初始化arraylist时起作用。试一试。

答案 2 :(得分:1)

您可以尝试将此标记添加到AndroidManifest.xml:

<uses-sdk android:targetSdkVersion="7"/>其中7表示Android 2.1。

如果这不起作用,请在机器人开发者页面上发布,我会看一下。

http://groups.google.com/group/robotium-developers

此致 Renas

答案 3 :(得分:0)

我也有这个问题,我找不到机器人的解决方案。然后我转到随SDK提供的android工具。我所做的事情如下所述。这对我没有任何问题。这是......

首先将按钮的私有变量定义为成员变量

private Button msButton;  

然后在设置方法中获取按钮实例。

mButton = (Button) solo.getCurrentActivity().findViewById(
com.marakana.android.simple_intent.R.id.sendButton); 

然后在测试方法的UI线程中调用按钮单击,如下所述。

//Test button method

public void testButtonClick() {

//Get the current activity and request to run onUI thread
solo.getCurrentActivity().runOnUiThread(new Runnable() {

public void run() { 

//Request focus for the button
mButton.requestFocus();
}
});

//Send the button click event
this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);

}

就是这样..现在,您可以使用其他Robotium功能测试您的按钮。