无法使用Robotium单击全屏

时间:2014-07-30 23:04:19

标签: android junit robotium

我有一个屏幕,这是一个全屏,我正在使用Robotium测试的应用程序中隐藏了android导航栏。当我尝试单击该屏幕上的唯一按钮时,我得到(java.lang.SecurityException:注入另一个应用程序需要INJECT_EVENTS权限)错误。这是在solo.clickOnView行(solo.getView(R.id.activate_homeBtn));

有趣的是,当我用手指触摸屏幕一次(Android导航栏现在变为活动状态)时,Robotium可以点击按钮。如何在不触摸屏幕的情况下单击按钮。以下是故障跟踪和测试代码。

junit.framework.AssertionFailedError:点击(360.0,592.0)无法完成! (java.lang.SecurityException:注入另一个应用程序需要INJECT_EVENTS权限) 在com.robotium.solo.Clicker.clickOnScreen(Clicker.java:106) 在com.robotium.solo.Solo.clickOnScreen(Solo.java:839) at com.abbottdiabetescare.informatics.sugarsleuth.sherlock.ui.test.ApplicationTest2.testHomeScreenNavigation_StartSensorScreen(ApplicationTest2.java:68) at java.lang.reflect.Method.invokeNative(Native Method) 在android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 在android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 在android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192) 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) 在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1792)

公共类ApplicationTest2扩展         ActivityInstrumentationTestCase2 {     私人独奏独奏;

public ApplicationTest2(String name) {
    super(HomeActivity.class);
}
@Override
protected void setUp() throws Exception {
    super.setUp();

    Instrumentation instrumentation = getInstrumentation();
    instrumentation.waitForIdleSync();
    Solo.Config config = new Solo.Config();
    config.screenshotFileType = Solo.Config.ScreenshotFileType.PNG;
    solo = new Solo(getInstrumentation(), config);
    getActivity();
}

@Override
protected void tearDown() throws Exception {
    solo.finishOpenedActivities();
    super.tearDown();
}

public void testHomeScreenNavigation_StartSensorScreen() {

    solo.unlockScreen();
    // verify initial state
    solo.assertCurrentActivity("Expected to start on Home Screen",
            HomeActivity.class);
    // activate
    solo.clickOnView(solo.getView(R.id.activationBtn));
    assertTrue(solo.waitForActivity(ActivateActivity.class));
    solo.takeScreenshot("HomeScrnNvgn_StartSensorScreen");
    assertTrue(solo.waitForActivity(ActivateActivity.class));

    solo.clickOnView(solo.getView(R.id.activate_homeBtn));
    assertTrue(solo.waitForActivity(HomeActivity.class));
}

}

1 个答案:

答案 0 :(得分:0)

不幸的是,在使用robotium时,你无法做你想做的事。 Android检测(robotium使用的内容)有一个安全模型,它不允许您与当前正在测试的应用程序之外的应用程序进行交互,您看到的页面必须是不同的应用程序,这就是您无法发送它的原因事件

以前我使用了一种技术,您可以使用意图过滤器拦截新应用程序的加载(假设它是意图驱动的)。您可以查看有关如何执行此操作的演练here