我有2个活动,第一个是启动,其中创建方法导致第二个活动始终启动.我的Robolectric测试通过了
活动
public class LoginActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginview);
Intent intent = new Intent(this,MainActivity.class);
startActivity( intent );
}
Run Code Online (Sandbox Code Playgroud)
我知道我的活动很好,因为它在我的设备和模拟器上启动
我的Robolectric测试
public void testLoginFirstTime() throws Exception
{
LoginActivity activity = new LoginActivity();
activity.onCreate(null);
assertThat(activity, new StartedMatcher(MainActivity.class));
}
Run Code Online (Sandbox Code Playgroud)
我的机器人测试
public void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
public void testLoginFirstTime() throws Exception
{
solo.assertCurrentActivity("Expected MainActivity to launch", MainActivity.class);
}
Run Code Online (Sandbox Code Playgroud)
我的机器人断言有什么问题?它总是认为当前的活动是登录的,即使我看到模拟器/设备我可以看到Robotium确实启动了MainActivity,但似乎并不知道新活动已经启动.编辑:我想说如果我在登录视图中添加一个按钮并通过按钮点击启动新的激活,则Robotium会执行点击并检测到新活动已启动.
编辑:看起来像是一个Robotium限制 http://groups.google.com/group/robotium-developers/browse_thread/thread/79a70038c16e35e6 …
我认为tearDown()
应该在每次测试后运行,但我从日志中看到的是它是在setUp()
方法之后启动的.你们能澄清一下吗?
public class LaunchManagerActivityTest extends ActivityInstrumentationTestCase2<LaunchManagerActivity> {
private Solo solo;
public LaunchManagerActivityTest() {
super(LaunchManagerActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
Log.e("Dev", "setup");
solo = new Solo(getInstrumentation(), getActivity());
}
protected void tearDown() throws Exception {
super.tearDown();
Log.e("Dev", "tearDown ");
}
Run Code Online (Sandbox Code Playgroud)
输出:
02-11 11:33:33.095: E/Dev(26779): setup
02-11 11:33:34.395: E/Dev(26779): tearDown
Run Code Online (Sandbox Code Playgroud) 我非常喜欢Android自动测试的想法.
我尝试过Spoon,它可以在不同的设备上预览UI的当前状态.
问题是如何与团队(开发人员/ UI/UX)有效地共享它.
我想要的是:构建服务器(Jenkins)触发Robotium + Spoon测试,它获取每个屏幕的屏幕截图,然后构建服务器将Spoon的结果发布到一些web-app(?),在那里我们可以看到所有的Spoon报告按日期分组,我们可以在每个截图上留下评论.
什么网络应用程序符合我的需求?
我正在尝试Android
使用的项目运行我的UI测试Robotium
,但每当我尝试从命令行或Eclipse运行它时,它会给我这个错误:
INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalAccessError:
Class ref in pre-verified class resolved to unexpected implementation
Run Code Online (Sandbox Code Playgroud)
在logcat中,它还给出了一个错误,指出:
java.lang.NoClassDefFoundError: com.bridgepointeducation.talon.TalonModule
Run Code Online (Sandbox Code Playgroud)
即使我没有com.bridgepointeducation.talon.TalonModule
.
有谁知道如何解决这个问题?谢谢!
我开始自动化我的Android应用.它有一个"条款和条件"屏幕.在那,如果我点击"拒绝",我的应用程序将被关闭.
如何在同一过程中重新启动或重新启动我的应用程序?
我正在使用Robotium为我的应用编写测试用例.该应用程序使用ActionbarSherlock在4.0之前的版本上移植Actionbar.然而,ActionBar项目似乎总是难以捉摸.我尝试使用这个项目 - https://github.com/atermenji/robotium-actionbarsherlock但是自定义动作栏没有太多运气.我尝试了以下代码:
solo.clickOnVisibleActionbarItem(com.vtcreator.android360.R.id.notification_icon);
Run Code Online (Sandbox Code Playgroud)
R.id.notification_icon是自定义操作栏布局中定义的按钮.
任何有Robotium和ABS经验的人?
我只是遇到了Robotium试图通过功能测试重现错误.在登录期间从用户名字段移动到密码字段时,我的活动未设置为正确处理"下一个"键.我谷歌搜索了一下,我无法解决问题.我在我的Galaxy Nexus上尝试过这个:
solo.clearEditText(0);
solo.enterText(0, Constants.TEST_ACCOUNT_1.getUsername());
solo.clickOnEditText(0);
solo.clickOnScreen(672,1132);
solo.clickOnEditText(0);
solo.sleep(15000);
solo.enterText(1, Constants.TEST_ACCOUNT_1.getPassword());
Run Code Online (Sandbox Code Playgroud)
我们的想法是在文本字段中单击以抬起键盘,然后尝试单击下一个按钮,但编辑文本字段中的单击不会抬起键盘.我也试过发送回车键,我尝试用FLAG_EDITOR_ACTION发送回车键,它们都没有模拟"下一步"键.救命!
我有一个包含大量元素的listView,即我们必须向下滚动才能看到所有元素.现在我要做的是,单击所有listView元素.我怎样才能做到这一点.现在,我使用以下代码,但它不会自动滚动.请帮忙.
ListView l = solo.getCurrentListViews().get(0);
assertNotNull("No list views!", l);
assertTrue("No items in list view!", l.getChildCount() > 0);
// Get the last list item
View v = l.getChildAt(l.getChildCount());
System.out.println("getChildCount: " + l.getChildCount());
int i = 1;
while (i <= l.getChildCount()) {
solo.clickInList(i);
solo.goBack();
i++;
}
Run Code Online (Sandbox Code Playgroud) 我有一个针对这个问题的简单测试项目,我无法理解它将如何失败.
被测项目仅为布局添加了一个按钮,用于测试.
<Button
android:id="@+id/test_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click" />
Run Code Online (Sandbox Code Playgroud)
这是测试类:
public class TestMainActivity extends ActivityInstrumentationTestCase2<MainActivity> {
private Solo solo;
public TestMainActivity() {
super(MainActivity.class);
}
public void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
public void test1() {
solo.clickOnButton(com.example.testrobotium.R.id.test_button);
}
public void test2() {
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
Run Code Online (Sandbox Code Playgroud)
执行此测试类时,返回的错误跟踪如下所示,指向对clickOnButton的调用:
junit.framework.AssertionFailedError:2131165185找不到按钮!at com.jayway.android.robotium.solo.Waiter.waitForAndGetView(Waiter.java:417)at com.jayway.android.robotium.solo.Clicker.clickOn(Clicker.java:374) at com.jayway.android.robotium .solo.Solo.clickOnButton(Solo.java:1052 )位于android.test的java.lang.reflect.Method.invokeNative(Native Method)的com.example.testrobotium.test.TestMainActivity.test1(TestMainActivity.java:22) android.test.AndroidTestRunner.runTest上android.test.AnstrumentationTestCase.runTest(ActivityInstrumentationTestCase2.java:186)的android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)上的.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204) AndroidT.Transner.java:169)在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java)的android.test.AndtrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)上的android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) :1448)
我在测试类中遗漏了导致此问题的内容吗?
我的代码使用传递给onProgressChanged()方法的fromUser参数来区分用户和代码与SeekBar的交互:
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
if (fromUser) {
// execute only if it was user interaction with the SeekBar
...
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用robotium测试我的SeekBar时,我无法"模拟用户与SeekBar的交互":
solo.setProgressBar(mSeekBar, newValue);
Run Code Online (Sandbox Code Playgroud)
使用fromUser == false执行onProgressChanged()回调.
是否有可能编写Robotium测试来设置SeekBar的进度并同时模拟用户交互(fromUser == true)?
谢谢!