Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在AppiumDriverLocalService上调用.stop()失败_Java_Android_Appium - Fatal编程技术网

Java 在AppiumDriverLocalService上调用.stop()失败

Java 在AppiumDriverLocalService上调用.stop()失败,java,android,appium,Java,Android,Appium,我已经为Android应用程序编写了一些自动测试,除了在测试完成后停止AppiumDriverLocalService时,它会中断之外,一切正常 下面是代码(使用JUnit编写) 和堆栈跟踪 java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/Kernel32 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineC

我已经为Android应用程序编写了一些自动测试,除了在测试完成后停止AppiumDriverLocalService时,它会中断之外,一切正常

下面是代码(使用JUnit编写)

和堆栈跟踪

java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/Kernel32

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.openqa.selenium.os.ProcessUtils.killWinProcess(ProcessUtils.java:133)
at org.openqa.selenium.os.ProcessUtils.killProcess(ProcessUtils.java:81)
at org.openqa.selenium.os.UnixProcess$SeleniumWatchDog.destroyHarder(UnixProcess.java:247)
at org.openqa.selenium.os.UnixProcess$SeleniumWatchDog.access$2(UnixProcess.java:246)
at org.openqa.selenium.os.UnixProcess.destroy(UnixProcess.java:125)
at org.openqa.selenium.os.CommandLine.destroy(CommandLine.java:153)
at io.appium.java_client.service.local.AppiumDriverLocalService.destroyProcess(AppiumDriverLocalService.java:141)
at io.appium.java_client.service.local.AppiumDriverLocalService.stop(AppiumDriverLocalService.java:135)
at com.example.MyTests.stopServer(MyTests.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
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.RunAfters.evaluate(RunAfters.java:33)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.platform.win32.Kernel32
一个奇怪的例子是,它在我的类中创建了另一个名为“类配置”的测试用例,我还没有编写


我丢失了一些jar文件吗?我敢肯定少了些什么。请解释一下。提前感谢。

您的问题是由于缺少包含以下内容的jar(在项目的参考库中):

com/sun/jna/platform/win32/Kernel32
您应该可以在此处下载它及其依赖项:

http://www.java2s.com/Code/Jar/j/Downloadjna330platformjar.htm
http://www.java2s.com/Code/Jar/j/Downloadjna330jar.htm
并将它们导入到您的项目中

另外,您停止服务的方式也是错误的,因为您的服务可能由于其他原因而终止。请使用下面的代码检查服务是否实际存在

private void stopAppiumServer() {
            if (service != null) {
            service.stop();
            System.out.println("Appium Server Stopped");
        }

下载jar并把它放在哪里?我以前见过这个答案,但不知道把jar文件放在哪里…@horrableguy-Fix在这两种情况下都是一样的,我想你会理解的。所以,为了让我的答案更清楚,我更新了答案。请尝试让我知道它是否适合你。
private void stopAppiumServer() {
            if (service != null) {
            service.stop();
            System.out.println("Appium Server Stopped");
        }