Android 当我们从主活动使用startInstrumentation()启动检测时,UiDevice对象抛出错误

Android 当我们从主活动使用startInstrumentation()启动检测时,UiDevice对象抛出错误,android,junit4,instrumentation,android-uiautomator,Android,Junit4,Instrumentation,Android Uiautomator,我正在尝试使用startInstrumentation()从Android应用程序(通过启动应用程序)访问检测 我的主要活动代码如下 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Bundle arguments = new Bundle

我正在尝试使用startInstrumentation()从Android应用程序(通过启动应用程序)访问检测

我的主要活动代码如下

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Bundle arguments = new Bundle();
        arguments.putString("package", "com.example.per.simpleuiauto");
        boolean returnValue = startInstrumentation(new ComponentName("com.example.per.simpleuiauto.test", "android.support.test.runner.AndroidJUnitRunner"), null, arguments);
        Log.d(TAG, "returnValue: "+returnValue);
    }
private static UiDevice mDevice;
    @Before
    public void setUp() throws Exception {
        Log.d(TAG, "setUp: called");
        mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
        mDevice.pressHome();
    }
returnValue的值显示“true”,表示它(com.example.per.simpleuiato)已启动

问题是:一旦指令插入启动并调用setUp(),就会在下面一行获取NullPointerException

mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
完整的代码如下

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Bundle arguments = new Bundle();
        arguments.putString("package", "com.example.per.simpleuiauto");
        boolean returnValue = startInstrumentation(new ComponentName("com.example.per.simpleuiauto.test", "android.support.test.runner.AndroidJUnitRunner"), null, arguments);
        Log.d(TAG, "returnValue: "+returnValue);
    }
private static UiDevice mDevice;
    @Before
    public void setUp() throws Exception {
        Log.d(TAG, "setUp: called");
        mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
        mDevice.pressHome();
    }
我的问题是:

  • 这是否可能在没有adb的情况下从android应用程序启动仪器测试

  • 是否有可能在没有pc连接的情况下启动apk来执行仪器测试

  • (无adb有线或无线)

    以下是我的adb崩溃日志:

     15:47:41.788 6578-6578/? I/MonitoringInstrumentation: Instrumentation Started!
    08-31 15:47:41.794 6578-6578/com.example.per.simpleuiauto I/MonitoringInstrumentation: Setting context classloader to 'dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.example.per.simpleuiauto.test-2/base.apk", zip file "/data/app/com.example.per.simpleuiauto-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.per.simpleuiauto.test-2/lib/arm, /data/app/com.example.per.simpleuiauto-1/lib/arm, /system/lib, /vendor/lib]]]', Original: 'dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.example.per.simpleuiauto.test-2/base.apk", zip file "/data/app/com.example.per.simpleuiauto-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.per.simpleuiauto.test-2/lib/arm, /data/app/com.example.per.simpleuiauto-1/lib/arm, /system/lib, /vendor/lib]]]'
    08-31 15:47:41.798 6578-6578/com.example.per.simpleuiauto I/MonitoringInstrumentation: No JSBridge.
    08-31 15:47:41.806 6578-6596/com.example.per.simpleuiauto D/InfraTrack: Tracking disabled due to lack of internet permissions
    08-31 15:47:41.806 6578-6596/com.example.per.simpleuiauto I/UsageTrackerFacilitator: Usage tracking disabled
    08-31 15:47:41.807 6578-6596/com.example.per.simpleuiauto I/TestRequestBuilder: Scanning classpath to find tests in apks [/data/app/com.example.per.simpleuiauto.test-2/base.apk]
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor: Adding listener android.support.test.internal.runner.listener.LogRunListener
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor: Adding listener android.support.test.internal.runner.listener.InstrumentationResultPrinter
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor: Adding listener android.support.test.internal.runner.listener.ActivityFinisherRunListener
    08-31 15:47:41.924 6578-6596/com.example.per.simpleuiauto I/TestRunner: run started: 2 tests
    08-31 15:47:41.928 6578-6596/com.example.per.simpleuiauto I/TestRunner: started: testAdd(com.example.per.simpleuiauto.CalculatorTester)
    08-31 15:47:41.930 6578-6578/com.example.per.simpleuiauto I/MonitoringInstrumentation: Activities that are still in CREATED to STOPPED: 0
    08-31 15:47:41.938 6578-6596/com.example.per.simpleuiauto I/TestRunner: failed: testAdd(com.example.per.simpleuiauto.CalculatorTester)
    08-31 15:47:41.938 6578-6596/com.example.per.simpleuiauto I/TestRunner: ----- begin exception -----
    08-31 15:47:41.941 6578-6596/com.example.per.simpleuiauto I/TestRunner: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.UiAutomation.setOnAccessibilityEventListener(android.app.UiAutomation$OnAccessibilityEventListener)' on a null object reference
                                                                                     at android.support.test.uiautomator.UiAutomatorBridge.setOnAccessibilityEventListener(UiAutomatorBridge.java:78)
                                                                                     at android.support.test.uiautomator.QueryController.<init>(QueryController.java:58)
                                                                                     at android.support.test.uiautomator.UiAutomatorBridge.<init>(UiAutomatorBridge.java:66)
                                                                                     at android.support.test.uiautomator.InstrumentationUiAutomatorBridge.<init>(InstrumentationUiAutomatorBridge.java:35)
                                                                                     at android.support.test.uiautomator.UiDevice.<init>(UiDevice.java:103)
                                                                                     at android.support.test.uiautomator.UiDevice.getInstance(UiDevice.java:262)
                                                                                     at com.example.per.simpleuiauto.CalculatorTester.naveen(CalculatorTester.java:32)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
                                                                                     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
                                                                                     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
                                                                                     at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
                                                                                     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
                                                                                     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
                                                                                     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
                                                                                     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
                                                                                     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
                                                                                     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
                                                                                     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
                                                                                     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
                                                                                     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
                                                                                     at org.junit.runners.Suite.runChild(Suite.java:128)
                                                                                     at org.junit.runners.Suite.runChild(Suite.java:27)
                                                                                     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
                                                                                     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
                                                                                     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
                                                                                     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
                                                                                     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
                                                                                     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
                                                                                     at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
                                                                                     at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
                                                                                     at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
                                                                                     at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
                                                                                     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2022)
    08-31 15:47:41.942 6578-6596/com.example.per.simpleuiauto I/TestRunner: ----- end exception -----
    
    15:47:41.7886578-6578/?I/MonitoringInstrumentation:检测已启动!
    08-31 15:47:41.794 6578-6578/com.example.per.simpleuiauto I/MonitoringInstrumentation:将上下文类加载器设置为'dalvik.system.PathClassLoader[DexPathList[[zip文件”//system/framework/android.test.runner.jar],zip文件“/data/app/com.example.per.simpleuiauto.test-2/base.apk”,zip文件“/data/app/app/com.example.per.simpleUuto-1/base.apk”],nativeLibraryDirectories=[/data/app/com.example.per.simpleuiauto.test-2/lib/arm,/data/app/com.example.per.simpleuiauto-1/lib/arm,/system/lib,/vendor/lib]]],原件:'dalvik.system.PathClassLoader[DexPathList[[zip文件”//system/framework/android.test.runner.jar',zip文件“/data/app/com.example.per.simpleuiauto.test-2/base.apk”,zip文件“/data/app/com.example.per.simpleuiauto-1/base.apk”],nativeLibraryDirectories=[/data/app/com.example.per.simpleuiauto.test-2/lib/arm,/data/app/com.example.per.simpleuiauto-1/lib/arm,/system/lib,/vendor/lib]]”
    08-31 15:47:41.798 6578-6578/com.example.per.simpleuiauto I/监控仪器:无JSBridge。
    08-31 15:47:41.806 6578-6596/com.example.per.simpleuiauto D/InfraTrack:由于缺少internet权限,已禁用跟踪
    08-31 15:47:41.806 6578-6596/com.example.per.simpleuiauto I/UsageTrackerFacilitator:禁用使用情况跟踪
    08-31 15:47:41.807 6578-6596/com.example.per.simpleuiauto I/TestRequestBuilder:扫描类路径以在apks[/data/app/com.example.per.simpleuiauto.test-2/base.apk]中查找测试
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor:添加侦听器android.support.test.internal.runner.listener.LogRunListener
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor:添加侦听器android.support.test.internal.runner.listener.InstrumentationResultPrinter
    08-31 15:47:41.921 6578-6596/com.example.per.simpleuiauto D/TestExecutor:添加侦听器android.support.test.internal.runner.listener.ActivityFinisherRunListener
    08-31 15:47:41.924 6578-6596/com.example.per.simpleuiuto I/TestRunner:run start:2个测试
    08-31 15:47:41.928 6578-6596/com.example.per.simpleuiauto I/TestRunner:start:testAdd(com.example.per.simpleuiauto.CalculatorTester)
    08-31 15:47:41.930 6578-6578/com.example.per.simpleuiauto I/MonitoringInstrumentation:仍在创建中的活动要停止:0
    08-31 15:47:41.938 6578-6596/com.example.per.simpleuiauto I/TestRunner:failed:testAdd(com.example.per.simpleuiauto.CalculatorTester)
    08-31 15:47:41.938 6578-6596/com.example.per.simpleuiauto I/TestRunner:----开始异常-----
    08-31 15:47:41.941 6578-6596/com.example.per.simpleuiauto I/TestRunner:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.app.UiAutomation.setOnAccessibilityEventListener(android.app.UiAutomation$OnAccessibilityEventListener)”
    位于android.support.test.uiautomator.UiAutomatorBridge.setOnAccessibilityEventListener(UiAutomatorBridge.java:78)
    位于android.support.test.uiautomator.QueryController(QueryController.java:58)
    位于android.support.test.uiautomator.UiAutomatorBridge.(UiAutomatorBridge.java:66)
    位于android.support.test.uiautomator.InstrumentationUiAutomatorBridge。(InstrumentationUiAutomatorBridge.java:35)
    在android.support.test.uiautomator.UiDevice.(UiDevice.java:103)
    位于android.support.test.uiautomator.UiDevice.getInstance(UiDevice.java:262)
    位于com.example.per.simpleuiauto.CalculatorTester.naveen(CalculatorTester.java:32)
    位于java.lang.reflect.Method.invoke(本机方法)
    位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)
    位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47)
    位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)