创建RemoteWebDriver以执行Appium脚本时发生java.lang.NullPointerException

创建RemoteWebDriver以执行Appium脚本时发生java.lang.NullPointerException,java,selenium,maven,grid,appium,Java,Selenium,Maven,Grid,Appium,我试图在Eclipse/Maven项目上使用selenium网格在多个设备上执行appium脚本 参考以下教程: 但当我以“TestNG”测试运行时,会发生以下错误: pom.xml如下所示: 创建一个json文件(nodeconfig_device1.json)来运行节点 Json文件使用以下命令执行: 节点正在集线器中正确注册。 但当TestNG测试运行时,计算器应用程序不会启动 问题 少了什么?为什么TestNG测试会崩溃 是否存在任何设置问题 是否存在任何配置问题 为什么

我试图在Eclipse/Maven项目上使用selenium网格在多个设备上执行appium脚本

参考以下教程:

但当我以“TestNG”测试运行时,会发生以下错误:



pom.xml如下所示:



创建一个json文件(nodeconfig_device1.json)来运行节点
Json文件使用以下命令执行:



节点正在集线器中正确注册。 但当TestNG测试运行时,计算器应用程序不会启动

问题

  • 少了什么?为什么TestNG测试会崩溃
  • 是否存在任何设置问题
  • 是否存在任何配置问题
  • 为什么不创建RemoteWebDriver
  • 请为这个问题提供解决方案
  • org.openqa.selenium.WebDriverException: Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
    System info: host: 'DESKTOP-E205GQ8', ip: '192.168.0.105', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_261'
    Driver info: driver.version: RemoteWebDriver
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
        at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$errorHandler$0(JsonWireProtocolResponse.java:54)
        at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
        at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
        at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
        at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
        at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
        at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
        at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
        at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
        at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
        at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
        at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144)
        at com.testautomation.grid.AppiumSeGridDemo.test1(AppiumSeGridDemo.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
        at org.testng.TestRunner.privateRun(TestRunner.java:648)
        at org.testng.TestRunner.run(TestRunner.java:505)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
        at org.testng.SuiteRunner.run(SuiteRunner.java:364)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
        at org.testng.TestNG.runSuites(TestNG.java:1049)
        at org.testng.TestNG.run(TestNG.java:1017)
        at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
        at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
        at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
    Caused by: java.lang.NullPointerException
        at java.util.HashMap.putMapEntries(Unknown Source)
        at java.util.HashMap.putAll(Unknown Source)
        at org.openqa.selenium.remote.DesiredCapabilities.<init>(DesiredCapabilities.java:55)
        at org.openqa.grid.web.servlet.handler.RequestHandler.process(RequestHandler.java:104)
        at org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:83)
        at org.openqa.grid.web.servlet.DriverServlet.doPost(DriverServlet.java:67)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:841)
        at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:543)
        at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
        at org.seleniumhq.jetty9.server.session.SessionHandler.doHandle(SessionHandler.java:1584)
        at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
        at org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1228)
        at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
        at org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:481)
        at org.seleniumhq.jetty9.server.session.SessionHandler.doScope(SessionHandler.java:1553)
        at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
        at org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1130)
        at org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
        at org.seleniumhq.jetty9.server.Server.handle(Server.java:564)
        at org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:320)
        at org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:251)
        at org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
        at org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:112)
        at org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
        at org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
        at org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
        at java.lang.Thread.run(Unknown Source)
    
    package com.testautomation.grid;
    
    import java.net.URL;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.remote.RemoteWebDriver;
    import org.testng.annotations.Test;
    
    public class AppiumSeGridDemo {
        @Test
        public void test1() {
            try {
                System.out.println("Test1 Exceution Started");
                DesiredCapabilities caps = new DesiredCapabilities();
                caps.setCapability("udid", "ZH33L2Z6KL");
                caps.setCapability("deviceName", "ZH33L2Z6KL");
                caps.setCapability("platformName", "Android");          
                caps.setCapability("automationName", "UiAutomator2");           
                caps.setCapability("appPackage", "com.google.android.calculator");
                caps.setCapability("appActivity", "com.android.calculator2.Calculator");            
                caps.setCapability("systemPort", "8201");
                WebDriver driver = new RemoteWebDriver(new URL("http://192.168.0.105:4444/wd/hub"), caps);          
                Thread.sleep(5000);
                driver.quit();
                System.out.println("Test1 Exceution Ended");
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.grid.demo</groupId>
      <artifactId>AppiumGridDemo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>AppiumGridDemo</name>
      <description>AppiumGridDemo</description>
      <dependencies>
        <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-server</artifactId>
                <version>3.141.59</version>
        </dependency>
        <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>6.14.3</version>
                <scope>test</scope>
        </dependency>
        <dependency>
                <groupId>io.appium</groupId>
                <artifactId>java-client</artifactId>
                <version>7.3.0</version>
        </dependency>
      </dependencies>
    </project>
    
    java -jar selenium-server-standalone-3.141.59.jar -role hub
    
    {
      "capabilities": [
        {
          "browserName": "Android",
          "version": "6.0",
          "maxInstances": 1,      
          "deviceName": "ZH33L2Z6KL",
          "platformName": "ANDROID",
          "automationName":"UiAutomator2",
          "systemPort":"8201"
        }
      ],
      "configuration": {
        "cleanUpCycle": 2000,
        "timeout": 30000,
        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",    
        "maxSession": 1,        
        "register": true,
        "registerCycle": 5000,
        "hubPort": 4444,
        "hubHost": "192.168.0.105",
        "hubProtocol":"http"
      }
    }
    
    appium --port 6001 --nodeconfig nodeconfig_device1.json