What happened?
JSON decoding fails if an '=' is added with a "string untermindated" error. I'm guessing this has something todo with the unicode escaping.
How can we reproduce the issue?
Fails:
java -jar selenium-server-4.6.0.jar standalone --port 50859 --detect-drivers false --driver-configuration display-name="Chrome Custom" stereotype='{"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir=\"./data\""]},"pageLoadStrategy":"normal"}' webdriver-executable=driver/driver_xyz
Works:
java -jar selenium-server-4.6.0.jar standalone --port 50859 --detect-drivers false --driver-configuration display-name="Chrome Custom" stereotype='{"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir \"./data\""]},"pageLoadStrategy":"normal"}' webdriver-executable=driver/driver_xyz
Relevant log output
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77)
at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70)
Caused by: org.openqa.selenium.grid.config.ConfigException: java.lang.reflect.InvocationTargetException
at org.openqa.selenium.grid.config.MemoizedConfig.getClass(MemoizedConfig.java:115)
at org.openqa.selenium.grid.node.config.NodeOptions.getNode(NodeOptions.java:152)
at org.openqa.selenium.grid.commands.Standalone.createHandlers(Standalone.java:206)
at org.openqa.selenium.grid.TemplateGridServerCommand.asServer(TemplateGridServerCommand.java:41)
at org.openqa.selenium.grid.commands.Standalone.execute(Standalone.java:245)
at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:129)
at org.openqa.selenium.grid.Main.launch(Main.java:83)
at org.openqa.selenium.grid.Main.go(Main.java:57)
at org.openqa.selenium.grid.Main.main(Main.java:42)
... 6 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.openqa.selenium.grid.config.ClassCreation.callCreateMethod(ClassCreation.java:50)
at org.openqa.selenium.grid.config.MemoizedConfig.lambda$getClass$4(MemoizedConfig.java:100)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737)
at org.openqa.selenium.grid.config.MemoizedConfig.getClass(MemoizedConfig.java:95)
... 14 more
Caused by: org.openqa.selenium.json.JsonException: Unable to parse: {"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir
at org.openqa.selenium.json.Json.toType(Json.java:57)
at org.openqa.selenium.json.Json.toType(Json.java:50)
at org.openqa.selenium.grid.node.config.NodeOptions.lambda$addDriverConfigs$15(NodeOptions.java:369)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at org.openqa.selenium.grid.node.config.NodeOptions.lambda$addDriverConfigs$16(NodeOptions.java:364)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.openqa.selenium.grid.node.config.NodeOptions.addDriverConfigs(NodeOptions.java:318)
at org.openqa.selenium.grid.node.config.NodeOptions.getSessionFactories(NodeOptions.java:211)
at org.openqa.selenium.grid.node.local.LocalNodeFactory.create(LocalNodeFactory.java:80)
... 22 more
Caused by: org.openqa.selenium.json.JsonException: Unterminated string: --user-data-dir. Last 70 characters read: {"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir
Build info: version: '4.6.0', revision: '79f1c02ae20'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.0.6-1-MANJARO', java.version: '11.0.17'
Driver info: driver.version: unknown
at org.openqa.selenium.json.JsonInput.readString(JsonInput.java:359)
at org.openqa.selenium.json.JsonInput.nextString(JsonInput.java:187)
at org.openqa.selenium.json.StringCoercer.lambda$apply$0(StringCoercer.java:44)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.CollectionCoercer.lambda$apply$0(CollectionCoercer.java:64)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.openqa.selenium.json.CollectionCoercer.lambda$apply$1(CollectionCoercer.java:65)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.MapCoercer.lambda$apply$0(MapCoercer.java:68)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.openqa.selenium.json.MapCoercer.lambda$apply$1(MapCoercer.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.MapCoercer.lambda$apply$0(MapCoercer.java:68)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at org.openqa.selenium.json.MapCoercer.lambda$apply$1(MapCoercer.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127)
at org.openqa.selenium.json.Json.toType(Json.java:71)
at org.openqa.selenium.json.Json.toType(Json.java:55)
... 30 more
Operating System
Linux 6.0.6-1-MANJARO
Selenium version
Java 4.6.0
What are the browser(s) and version(s) where you see this issue?
What are the browser driver(s) and version(s) where you see this issue?
Are you using Selenium Grid?
4.6.0
What happened?
JSON decoding fails if an '=' is added with a "string untermindated" error. I'm guessing this has something todo with the unicode escaping.
How can we reproduce the issue?
Fails:
Works:
Relevant log output
java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.openqa.selenium.grid.Bootstrap.runMain(Bootstrap.java:77) at org.openqa.selenium.grid.Bootstrap.main(Bootstrap.java:70) Caused by: org.openqa.selenium.grid.config.ConfigException: java.lang.reflect.InvocationTargetException at org.openqa.selenium.grid.config.MemoizedConfig.getClass(MemoizedConfig.java:115) at org.openqa.selenium.grid.node.config.NodeOptions.getNode(NodeOptions.java:152) at org.openqa.selenium.grid.commands.Standalone.createHandlers(Standalone.java:206) at org.openqa.selenium.grid.TemplateGridServerCommand.asServer(TemplateGridServerCommand.java:41) at org.openqa.selenium.grid.commands.Standalone.execute(Standalone.java:245) at org.openqa.selenium.grid.TemplateGridCommand.lambda$configure$4(TemplateGridCommand.java:129) at org.openqa.selenium.grid.Main.launch(Main.java:83) at org.openqa.selenium.grid.Main.go(Main.java:57) at org.openqa.selenium.grid.Main.main(Main.java:42) ... 6 more Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.openqa.selenium.grid.config.ClassCreation.callCreateMethod(ClassCreation.java:50) at org.openqa.selenium.grid.config.MemoizedConfig.lambda$getClass$4(MemoizedConfig.java:100) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737) at org.openqa.selenium.grid.config.MemoizedConfig.getClass(MemoizedConfig.java:95) ... 14 more Caused by: org.openqa.selenium.json.JsonException: Unable to parse: {"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir at org.openqa.selenium.json.Json.toType(Json.java:57) at org.openqa.selenium.json.Json.toType(Json.java:50) at org.openqa.selenium.grid.node.config.NodeOptions.lambda$addDriverConfigs$15(NodeOptions.java:369) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.openqa.selenium.grid.node.config.NodeOptions.lambda$addDriverConfigs$16(NodeOptions.java:364) at java.base/java.util.Optional.ifPresent(Optional.java:183) at org.openqa.selenium.grid.node.config.NodeOptions.addDriverConfigs(NodeOptions.java:318) at org.openqa.selenium.grid.node.config.NodeOptions.getSessionFactories(NodeOptions.java:211) at org.openqa.selenium.grid.node.local.LocalNodeFactory.create(LocalNodeFactory.java:80) ... 22 more Caused by: org.openqa.selenium.json.JsonException: Unterminated string: --user-data-dir. Last 70 characters read: {"browserName":"chrome","goog:chromeOptions":{"args":["--user-data-dir Build info: version: '4.6.0', revision: '79f1c02ae20' System info: os.name: 'Linux', os.arch: 'amd64', os.version: '6.0.6-1-MANJARO', java.version: '11.0.17' Driver info: driver.version: unknown at org.openqa.selenium.json.JsonInput.readString(JsonInput.java:359) at org.openqa.selenium.json.JsonInput.nextString(JsonInput.java:187) at org.openqa.selenium.json.StringCoercer.lambda$apply$0(StringCoercer.java:44) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.CollectionCoercer.lambda$apply$0(CollectionCoercer.java:64) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at org.openqa.selenium.json.CollectionCoercer.lambda$apply$1(CollectionCoercer.java:65) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.MapCoercer.lambda$apply$0(MapCoercer.java:68) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at org.openqa.selenium.json.MapCoercer.lambda$apply$1(MapCoercer.java:72) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.ObjectCoercer.lambda$apply$0(ObjectCoercer.java:72) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.MapCoercer.lambda$apply$0(MapCoercer.java:68) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at org.openqa.selenium.json.MapCoercer.lambda$apply$1(MapCoercer.java:72) at org.openqa.selenium.json.JsonTypeCoercer.lambda$buildCoercer$6(JsonTypeCoercer.java:145) at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:127) at org.openqa.selenium.json.Json.toType(Json.java:71) at org.openqa.selenium.json.Json.toType(Json.java:55) ... 30 moreOperating System
Linux 6.0.6-1-MANJARO
Selenium version
Java 4.6.0
What are the browser(s) and version(s) where you see this issue?
What are the browser driver(s) and version(s) where you see this issue?
Are you using Selenium Grid?
4.6.0