求助:频繁触发JsonException,无法启动RemoteWebDriver
问题分析与解决方案
错误详情
org.openqa.selenium.json.JsonException: 无法从字符'E'确定类型。最后读取的1个字符是: E Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'EX-CON-2255C', ip: '10.185.18.14', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.16.1' Driver info: driver.version: RemoteWebDriver at org.openqa.selenium.json.JsonInput.peek(JsonInput.java:122) at org.openqa.selenium.json.JsonTypeCoercer.lambda$null$6(JsonTypeCoercer.java:140) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:126) at org.openqa.selenium.json.Json.toType(Json.java:69) at org.openqa.selenium.json.Json.toType(Json.java:55) at org.openqa.selenium.json.Json.toType(Json.java:50) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:87) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:609) at org.openqa.selenium.remote.RemoteWebDriver.getScreenshotAs(RemoteWebDriver.java:295) at qxhresponsive.PinkStrawberry.utilities.ExtentReporter.getScreenShot(ExtentReporter.java:195) at qxhresponsive.PinkStrawberry.utilities.ExtentReporter.reportStep(ExtentReporter.java:138) at qxhresponsive.PinkStrawberry.pages.ConvivaPage.navigateToConviva(ConvivaPage.java:61) at qxhresponsive.PinkStrawberry.tests.ConvivaTest.ZSMED_T9004_MP_8807_US_Web_New_Ventures_Program_Guide_Automation_of_GA_and_Conviva_Live_channes_from_first_column(ConvivaTest.java:100) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
已知背景:已尝试添加等待时间,场景中同时使用Android WebDriver和WebDriver
可能的原因及解决方法
1. Selenium与JDK版本不兼容
你使用的Selenium 3.141.59发布于2018年,对Java 11的支持不完善,JSON解析模块容易出现此类异常。
- 解决:升级Selenium版本,建议直接升级到Selenium 4.x(对Java 11+支持更全面),或者至少升级到Selenium 3的后续维护版本。
2. 多Driver实例冲突
同时运行Android WebDriver和WebDriver两个实例时,可能出现HTTP请求/响应混流,导致JSON解析器读取到错误的响应内容。
- 解决:
- 每个测试用例仅初始化一个Driver实例,测试结束后立即调用
quit()释放资源 - 若必须同时使用,为两个实例配置独立的
HttpCommandExecutor,避免共享连接池
- 每个测试用例仅初始化一个Driver实例,测试结束后立即调用
3. Driver状态异常导致截图失败
错误触发于getScreenshotAs调用,说明此时RemoteWebDriver可能处于未就绪状态(会话失效、页面未加载完成等)。
- 解决:
- 截图前先校验会话有效性:
if (driver.getSessionId() != null) - 替换固定等待为显式等待,等待页面核心元素加载完成后再执行截图
- 捕获截图异常,会话失效时重新初始化Driver
- 截图前先校验会话有效性:
4. 响应编码问题
RemoteWebDriver接收的JSON响应编码异常,导致解析器读取到非法字符。
- 解决:
- 检查Selenium Grid或远程Driver服务器的字符编码配置,确保返回UTF-8格式的响应
- 初始化RemoteWebDriver时,自定义
HttpCommandExecutor并强制设置响应编码为UTF-8
内容的提问来源于stack exchange,提问作者Harish R
相关产品推荐
相关产品推荐

