* #16612 support downloading large files from Grid
I added a new Grid endpoint "/se/files/:name" which allows downloading the file directly, without encoding it to Base64 and adding to Json. This transformation kills the performance and causes OutOfMemory errors for large files (e.g. 256+ MB).
NB! Be sure that `toString()` method of objects (HttpRequest, HttpResponse, Contents.Supplier) never returns too long string - it spam debug logs and can cause OOM during debugging.
* #16612 extract anonymous implementations of `Contents.Supplier` to separate classes
It makes debugging easier. You can easily see what instances they are and where they come from.
* #16612 optimize method `RemoteWebDriver.downloadFile()`
Instead of reading the whole file to a byte array, just save given InputStream directly to the file.
Now it can download large files (I tried 4GB) while consuming very low memory.
* #16612 just in case, return `Contents.fromStream` only when downloading files.
For json responses, still return `Contents.bytes` which allows re-reading its content multiple times. Just in case.
* #16612 fix flaky test: wait until the downloads folder gets deleted
After stopping a Grid node, the folder is deleted asynchronously (by cache removal listener). So we need to wait for it in test.
* #16612 fix flaky test: wait until the grid node is fully stopped
At least on my machine, stopping the node takes some time, and any checks right after `node.stop(sessionId)` often can fail.
* #16612 fix flaky test LocalNewSessionQueueTest
Gr... This is extremely hard to debug test.
After hours of debugging, I came to a conclusion that we just need to increase the timeout. On my machine, `latch` gets decreased after ~1.2 seconds. So 1 second was not enough.
* #16612 fix flaky test JdkHttpClientTest
I don't know why, but sometimes we receive `HttpTimeoutException` instead of `InterruptedException`. Seems reasonable to consider execution as interrupted in both cases. (?)
* #16612 remove unneeded code
None of `is.readNBytes` implementations returns -1. It always returns 0 or positive number.
* #16612 upload logs in case of test failure
* ignore few more IDEA files
* #16612 slightly improve logging in `W3CHttpResponseCodec.decode`
Don't log the entire response body - just content type and length.
* Revert "[ci] Update mirror info (2025-11-11T15:26:46Z) (#16578)"
This reverts commit 2b5da89b8f.
* Revert "[ci] Make a PR for updating mirror file instead of pushing directly to trunk (#16579)"
This reverts commit 0e7508261b.
* Update pinned browser versions
* [rb] Enabling passing test
* [java] Fixing testShouldDoNothingIfThereIsNothingToGoBackTo
* Fixing more tests
* Running test only for Chrome and Edge
* Executing NetworkInterceptorRestTest in GH runners
* Skipping test for FF beta for now
* Adjusting workflows
---------
Co-authored-by: Selenium CI Bot <selenium-ci@users.noreply.github.com>
Co-authored-by: Diego Molina <diemol@users.noreply.github.com>
Co-authored-by: Diego Molina <diemol@gmail.com>
* Replaces the current Python linters (black, isort, docformatter, autoflake, flake8) with ruff
* Integrates it into the build system
* Formats all Python source files
---------
Co-authored-by: Alex Rodionov <p0deje@gmail.com>
* updates dependencies in `py/pyproject.toml` for packaging
* updates dependencies in `py/BUILD.bazel` for building/testing/packaging
* updates dependency versions in `py/requirements.txt`
* adds tox and its dependencies to `py/requirements.txt`
* updates Python CI job to use new version of tox
* adds missing pinned transient dependencies to `py/requirements.txt`
* generates new `py/requirements_lock.txt` with updated hashes
* fixes errors in tests that were failing due to deprecations in the newer version of PyTest
* removes trove license classifier from packaging data since it is now deprecated (license is already specified through `project.license` metadata)
Docs need to be released with the release version
When pre-release PR is successfully merged,
An update-docs PR will be created and auto-merged
When update-docs PR is successfully merged,
A bump-nightly-version PR is created and auto-merged
Using PRs just to track potential problems, everything should auto close and clean