我正在开发一种QA自动化解决方案,可以在Android上记录/回放QA测试。一个关键的业务需求是在播放记录的测试时不依赖连接的电脑。为此,我正在尝试在没有连接PC的情况下运行一个Instrumentation测试(具体来说,是一个Appium UiAutomator2测试)。
我的当前方法是尝试从我的应用程序中以编程方式运行测试。如果我通常从连接的PC上运行测试,我会使用命令
为了解决这个问题,我正在尝试使用startInstrumentation来运行测试。这成功地启动了测试。然而,测试立即崩溃。经过进一步调查,我追踪到崩溃的原因是NPE:测试试图检索
我如何以编程方式运行测试并使其访问所需的UiAutomation实例? 这是我启动测试的方法:
我的当前方法是尝试从我的应用程序中以编程方式运行测试。如果我通常从连接的PC上运行测试,我会使用命令
adb shell am instrument -w
。我尝试从我的应用程序访问ADB Shell并运行am instrument -w
,但这会产生一个错误,我缺少INTERACT_ACROSS_USERS_FULL权限。为了解决这个问题,我正在尝试使用startInstrumentation来运行测试。这成功地启动了测试。然而,测试立即崩溃。经过进一步调查,我追踪到崩溃的原因是NPE:测试试图检索
InstrumentationRegistry.getInstrumentation.getUiAutomation(0)
,但这返回null。我如何以编程方式运行测试并使其访问所需的UiAutomation实例? 这是我启动测试的方法:
public void runTest() {
final String pm = getPackageName().replaceFirst(".test$", "");
final InstrumentationInfo info = getInstrumentationInfo(pm);
if (info != null) {
final ComponentName cn = new ComponentName(info.packageName,
info.name);
Bundle arguments = new Bundle();
arguments.putString("class", "io.testim.appiumwrapper.test.AppiumUiAutomator2Server");
//cn = {io.extension.test/android.support.test.runner.AndroidJUnitRunner}
startInstrumentation(cn, null, arguments);
}
}