java - org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;) 由于 JsonException : Attempting to close incomplete json stream

标签 java selenium selenium-webdriver testng selenium-chromedriver

在我将 TestNG 更新到 6.14.3 并将 Selenium 更新到 3.13.0 后,我收到上述 Json 异常。我正在使用 ChromeDriver() 进行自动化。这是关于我的代码的简要想法:

@BeforeSuite:
System.setProperty("webdriver.chrome.driver", "path to chrome driver");

@BeforeMethod:
driver = new ChromeDriver();

@AfterMethod:
driver.quit();

我以前的 TestNG 和 Selenium 版本分别是 6.11.0 和 3.7.1。

当代码尝试启动 WebDriver session 时,会出现异常。

完整的异常(exception)是:

java.lang.NoSuchMethodError: org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;)Lorg/openqa/selenium/json/JsonOutput;
  at org.openqa.selenium.remote.NewSessionPayload.writeTo(NewSessionPayload.java:247)
  at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:69)
  at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
  at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
  at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548)
  at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:212)
  at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:130)
  at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
  at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
  at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
  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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
  at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
  at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
  at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
  at org.testng.internal.Invoker.invokeMethod(Invoker.java:523)
  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:114)
  at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
  at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Suppressed: org.openqa.selenium.json.JsonException: Attempting to close incomplete json stream
Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:24:21.231Z'
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.json.JsonOutput.close(JsonOutput.java:263)
    at org.openqa.selenium.remote.NewSessionPayload.writeTo(NewSessionPayload.java:270)

最佳答案

此错误消息:

java.lang.NoSuchMethodError: org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;)Lorg/openqa/selenium/json/JsonOutput;
.
Suppressed: org.openqa.selenium.json.JsonException: Attempting to close incomplete json stream

...暗示在 JVM 尝试转义某些字符时引发了 java.lang.NoSuchMethodError

如果缺乏与您的测试环境相关的以下信息,分析错误非常困难:

  • selenium-server-standalone-3.13.0.jarselenium-java-3.13.0 客户端。
  • JARMavenGradle

但是这个错误来自以下源代码:

  public void close() {
    if (appendable instanceof Closeable) {
      try {
    ((Closeable) appendable).close();
      } catch (IOException e) {
    throw new JsonException(e);
      }
    }

    if (!(stack.getFirst() instanceof Empty)) {
      throw new JsonException("Attempting to close incomplete json stream");
    }
  }

原因

可能的原因可能是以下之一:

  • 通过selenium-server-standalone-3.13.0.jarselenium-java-3.13.0存在多个Selenium相关jar客户端 jar。
  • 通过 JARMaven 和/或 Gradle 存在多个Selenium 相关 jar
  • 存在 gson-2.8.2.jar 作为 Release Notes of Selenium v3.13.0明确提到:

    * Introduced our own JSON parser and outputter, allowing GSON to be removed from our dependencies.
    

解决方案

  • 如果使用手动下载的 JAR 文件,请删除所有与 Selenium 相关的外部 JAR 并添加新下载的 JAR。
  • 如果使用 MavenGradle,请执行以下步骤:
    • 通过 CLI:mvn clean(清除以前的依赖项)
    • 通过 CLI:mvn install(安装必要的依赖项)
    • 通过 CLI:mvn test(执行测试套件)

关于java - org.openqa.selenium.json.JsonOutput.write(Ljava/lang/Object;Ljava/lang/reflect/Type;) 由于 JsonException : Attempting to close incomplete json stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408342/

相关文章:

java - 有趣的 Shell 输出 : [01;32mtestfile. txt[00m 而不是 testfile.txt

java - Payload Factory 内的 Get argument 属性出现问题

python - 在 Python 中使用 Selenium 从网页中提取文本

Python 以及如何从 Selenium 元素 WebElement 对象获取文本

java - Selenium 网络驱动程序(java): Drag And Drop issue

ruby - cucumber 从 3 列表中读取数据?

java - Android Studio 和 Gradle : content is not allowed in prolog when having a . jar 位于/libs 文件夹中

java - 查找字符串中多次出现的单词并存储各自的起始索引

c# - 在特定的 IWebElement 上使用 webdriverwait

python - python selenium 驱动程序中的 "Message: unknown error: cannot focus element"