Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

File upload in Selenium standalone fails with JSON parse error #5354

Closed
ildar-aim opened this issue Jan 18, 2018 · 1 comment
Closed

File upload in Selenium standalone fails with JSON parse error #5354

ildar-aim opened this issue Jan 18, 2018 · 1 comment

Comments

@ildar-aim
Copy link

Meta -

OS:
Linux aim-server.crtdev.local 4.13.12-1-ARCH #1 SMP PREEMPT Wed Nov 8 11:54:06 CET 2017 x86_64 GNU/Linux
Selenium Version:
Selenium build info: version: '3.8.1', revision: '6e95a6684b'
Browser:
chromium 62.0.3202.94-1 (64 bit)

Browser Version:
ChromeDriver 2.32 (64 bit)

Expected Behavior -

A large file is uploaded

Actual Behavior -

error in output

PHP Fatal error:  Uncaught PHPWebDriver_UnhandledWebDriverError: Failed parsing JSON source: JsonReader at line 1 column 52768645 path $.file to Json in /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/php-webdriver/PHPWebDriver/WebDriverBase.php:50
Stack trace:
#0 /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/php-webdriver/PHPWebDriver/WebDriverBase.php(216): PHPWebDriver_WebDriverBase::throwException(13, 'Failed parsing ...', Array)
#1 /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/php-webdriver/PHPWebDriver/WebDriverBase.php(261): PHPWebDriver_WebDriverBase->curl('POST', '/file', Array, Array)
#2 /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/php-webdriver/PHPWebDriver/WebDriverElement.php(73): PHPWebDriver_WebDriverBase->__call('file', Array)
#3 /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/upload_patches_toFA.php(613): PHPWebDriver_WebDriverElement->sendKeys('/home/aim/tmp/u...')
#4 {main}
  thrown in /home/aim/public_html/xcart_4_6_x/tests/selenium_tests/php-webdriver/PHPWebDriver/WebDriverBase.php on line 50

verbose error from CURL

* Hostname localhost was found in DNS cache
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 4444 (#0)
> POST /wd/hub/session/549e21ce02ce6a31df225d68ab4e546e/file HTTP/1.1^M
Host: localhost:4444^M
Content-Type: application/json;charset=UTF-8^M
Accept: application/json^M
Content-Length: 92412893^M
^M
* We are completely uploaded and fine
< HTTP/1.1 500 Server Error^M
< Content-Type: application/json;charset=utf-8^M
< Content-Length: 4376^M
< Server: Jetty(9.4.7.v20170914)^M
< ^M
* Connection #0 to host localhost left intact

result from CURL

stdClass Object
(
    [value] => stdClass Object
        (
            [stacktrace] => com.google.gson.JsonParseException: Failed parsing JSON source: JsonReader at line 1 column 52768645 path $.file to Json
	at com.google.gson.JsonParser.parse(JsonParser.java:88)
	at com.google.gson.JsonParser.parse(JsonParser.java:59)
	at com.google.gson.JsonParser.parse(JsonParser.java:45)
	at org.openqa.selenium.json.JsonToBeanConverter.convert(JsonToBeanConverter.java:203)
	at org.openqa.selenium.json.JsonToBeanConverter.convert(JsonToBeanConverter.java:57)
	at org.openqa.selenium.json.Json.toType(Json.java:78)
	at org.openqa.selenium.remote.server.commandhandler.UploadFile.execute(UploadFile.java:47)
	at org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$0(WebDriverServlet.java:240)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3332)
	at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:596)
	at java.lang.StringBuilder.append(StringBuilder.java:190)
	at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1013)
	at com.google.gson.stream.JsonReader.nextString(JsonReader.java:815)
	at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:701)
	at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:722)
	at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:697)
	at com.google.gson.internal.Streams.parse(Streams.java:48)
	at com.google.gson.JsonParser.parse(JsonParser.java:84)
	at com.google.gson.JsonParser.parse(JsonParser.java:59)
	at com.google.gson.JsonParser.parse(JsonParser.java:45)
	at org.openqa.selenium.json.JsonToBeanConverter.convert(JsonToBeanConverter.java:203)
	at org.openqa.selenium.json.JsonToBeanConverter.convert(JsonToBeanConverter.java:57)
	at org.openqa.selenium.json.Json.toType(Json.java:78)
	at org.openqa.selenium.remote.server.commandhandler.UploadFile.execute(UploadFile.java:47)
	at org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$0(WebDriverServlet.java:240)
	at org.openqa.selenium.remote.server.WebDriverServlet$$Lambda$83/1178793517.run(Unknown Source)
	... 5 more

            [stackTrace] => Array
                (
                    [0] => stdClass Object
                        (
                            [fileName] => JsonParser.java
                            [methodName] => parse
                            [className] => com.google.gson.JsonParser
                            [lineNumber] => 88
                        )

                    [1] => stdClass Object
                        (
                            [fileName] => JsonParser.java
                            [methodName] => parse
                            [className] => com.google.gson.JsonParser
                            [lineNumber] => 59
                        )

                    [2] => stdClass Object
                        (
                            [fileName] => JsonParser.java
                            [methodName] => parse
                            [className] => com.google.gson.JsonParser
                            [lineNumber] => 45
                        )

                    [3] => stdClass Object
                        (
                            [fileName] => JsonToBeanConverter.java
                            [methodName] => convert
                            [className] => org.openqa.selenium.json.JsonToBeanConverter
                            [lineNumber] => 203
                        )

                    [4] => stdClass Object
                        (
                            [fileName] => JsonToBeanConverter.java
                            [methodName] => convert
                            [className] => org.openqa.selenium.json.JsonToBeanConverter
                            [lineNumber] => 57
                        )

                    [5] => stdClass Object
                        (
                            [fileName] => Json.java
                            [methodName] => toType
                            [className] => org.openqa.selenium.json.Json
                            [lineNumber] => 78
                        )

                    [6] => stdClass Object
                        (
                            [fileName] => UploadFile.java
                            [methodName] => execute
                            [className] => org.openqa.selenium.remote.server.commandhandler.UploadFile
                            [lineNumber] => 47
                        )

                    [7] => stdClass Object
                        (
                            [fileName] => WebDriverServlet.java
                            [methodName] => lambda$handle$0
                            [className] => org.openqa.selenium.remote.server.WebDriverServlet
                            [lineNumber] => 240
                        )

                    [8] => stdClass Object
                        (
                            [fileName] => Executors.java
                            [methodName] => call
                            [className] => java.util.concurrent.Executors$RunnableAdapter
                            [lineNumber] => 511
                        )

                    [9] => stdClass Object
                        (
                            [fileName] => FutureTask.java
                            [methodName] => run
                            [className] => java.util.concurrent.FutureTask
                            [lineNumber] => 266
                        )

                    [10] => stdClass Object
                        (
                            [fileName] => ThreadPoolExecutor.java
                            [methodName] => runWorker
                            [className] => java.util.concurrent.ThreadPoolExecutor
                            [lineNumber] => 1149
                        )

                    [11] => stdClass Object
                        (
                            [fileName] => ThreadPoolExecutor.java
                            [methodName] => run
                            [className] => java.util.concurrent.ThreadPoolExecutor$Worker
                            [lineNumber] => 624
                        )

                    [12] => stdClass Object
                        (
                            [fileName] => Thread.java
                            [methodName] => run
                            [className] => java.lang.Thread
                            [lineNumber] => 748
                        )

                )

            [message] => Failed parsing JSON source: JsonReader at line 1 column 52768645 path $.file to Json
            [error] => unknown error
        )

    [status] => 13
)

output from selenium

08:48:36.721 INFO - Found handler: org.openqa.selenium.remote.server.ServicedSession@5de30824
08:48:36.722 INFO - Handler thread for session 549e21ce02ce6a31df225d68ab4e546e (chrome): Executing POST on /session/549e21ce02ce6a31df225d68ab4e546e/element (handler: ServicedSession)
08:48:36.724 INFO - To upstream: {"using":"id","value":"remotefile_1"}
08:48:36.753 INFO - To downstream: {"sessionId":"549e21ce02ce6a31df225d68ab4e546e","status":0,"value":{"ELEMENT":"0.4092952270388037-1"}}
08:48:39.804 INFO - Found handler: org.openqa.selenium.remote.server.commandhandler.UploadFile@4a0961cd
08:48:39.804 INFO - /session/549e21ce02ce6a31df225d68ab4e546e/file: Executing POST on /session/549e21ce02ce6a31df225d68ab4e546e/file (handler: UploadFile)
18/01/2018 09:05:07 idle keyboard:   turning X autorepeat back on.

Steps to reproduce -

1)Start Xvfb :99 -screen 0 1280x1024x24 -ac &
2)Start export DISPLAY=:99 && java -jar -Dwebdriver.chrome.driver="/usr/bin/chromedriver" /usr/share/selenium-server/selenium-server-standalone.jar &
3)Upload a file larger than 70Mb via a php-driver
4)The php-driver uses PHPWebDriver_WebDriverBase->curl('POST', '/file', Array, Array) command

@barancev
Copy link
Member

Selenium is intented to be a UI automation tool. We're not going to optimize it to allow uploading large files, it is out of scope. Either increase Java heap memory, or use an alternative way to upload large files to remote host.

@lock lock bot locked and limited conversation to collaborators Aug 16, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants