android - 在@Before 中清除应用程序数据后测试用例失败

标签 android ui-automation android-espresso

我正在尝试使应用程序的启动过程自动化,并且需要在每次 @Test

之前清除应用程序数据

我已经实现了

public class Onboarding {
@Rule
public ActivityTestRule<AppStartActivity> mActivityTestRule = new ActivityTestRule<>(AppStartActivity.class);
@Before
public void clearPreferences() {
    try {
        // clearing app data
        Runtime runtime = Runtime.getRuntime();
        runtime.exec("pm clear packageName");

    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Test
public void Mobile10DigitWithInvalidOtp () {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    OnboardingFragment onboardingFragment = new OnboardingFragment();
    onboardingFragment.LoginAsExistingUserIndia("1325546852", "12345");
    onboardingFragment.invalidOtpMessage.check(matches(isDisplayed()));
}
}

但是一旦运行测试就会崩溃。

测试未能完成。原因:“由于‘进程崩溃’,检测运行失败。”。检查设备 logcat 了解详细信息 测试运行失败:由于“进程崩溃”,检测运行失败。

此外,如果我在没有 @Before 的情况下运行 @Test ,它运行良好。

我应该如何实现这一点,以便在每次测试运行前清除应用数据后,我可以继续运行我的测试用例?

最佳答案

当您运行仪器测试时 - 它们与被测应用程序一起在同一个线程中运行。清除包或换句话说杀死测试线程下的应用程序也会杀死仪器测试。

可能的解决方案:

  • 在使用例如 adb 命令开始仪器测试之前清除包: adb shell pm clear com.bla.bla
  • 在被测应用程序中实现清理所需数据(数据库、首选项等)的方法,并从 @Before 测试方法内部调用它。

关于android - 在@Before 中清除应用程序数据后测试用例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997410/

相关文章:

android - 在 Android 上使用 MP4PARSER 将两个视频合并为一个

windows - 在另一个窗口中运行 Windows 应用程序

android - 我收到错误 "No instrumentation registered! Must run under a registering instrumentation"

android - 我无法显示来自 Cloud Firestore 的图像

android - 如何在 React Navigation 中创建屏幕下推

c++ - 如何通过将光标悬停在UIAutomationElement的NamePropertyId上?

testing - 屏幕截图与 iOS 应用程序元素的坐标和大小不匹配

java - 当我添加意式 Espresso 时出现资源错误

android - 仅当应用程序 100% 完成时,才在仪器测试后正确清理/拆卸

android - RecyclerView中更新控制多个CountDownTimer(暂停、恢复、删除)