我刚开始使用robotium。演示可以毫无问题地运行,但是当我使用EditText
和Button
编写第一个测试脚本时,会出现问题。我的环境是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
。我想问题是什么。有什么建议吗?谢谢
答案 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功能测试您的按钮。