diff --git a/.bazelignore b/.bazelignore
index 7dbb22ecb417b..e920cea308429 100644
--- a/.bazelignore
+++ b/.bazelignore
@@ -1,5 +1,25 @@
buck-out
+dotnet/test/firefox/bin
+dotnet/test/firefox/obj
+dotnet/test/edge/bin
+dotnet/test/edge/obj
+dotnet/test/common/bin
+dotnet/test/common/obj
+dotnet/test/support/bin
+dotnet/test/support/obj
+dotnet/test/safari/bin
+dotnet/test/safari/obj
+dotnet/test/chrome/bin
+dotnet/test/chrome/obj
+dotnet/test/ie/bin
+dotnet/test/ie/obj
+dotnet/test/remote/bin
+dotnet/test/remote/obj
+dotnet/src/support/bin
+dotnet/src/support/obj
+dotnet/src/webdriver/bin
+dotnet/src/webdriver/obj
+java/build/production
java/client/build
java/server/build
node_modules
-java/build/production
diff --git a/.bazelrc b/.bazelrc
index ea23ac61e3548..7e3cbf4e89025 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -16,9 +16,9 @@ build --java_runtime_version=remotejdk_17
build --tool_java_language_version=17
build --tool_java_runtime_version=remotejdk_17
-# We target java 8 by default
+# We target java 11 by default
-build --javacopt="--release 8"
+build --javacopt="--release 11"
# Require java dependencies to be used and first-order
diff --git a/.github/workflows/ci-dotnet.yml b/.github/workflows/ci-dotnet.yml
index 848bb09da1399..f569f3e10a7da 100644
--- a/.github/workflows/ci-dotnet.yml
+++ b/.github/workflows/ci-dotnet.yml
@@ -12,7 +12,9 @@ jobs:
name: Build
cache-key: false
os: windows
- run: bazel build //dotnet/src/webdriver:package //dotnet/src/support:package
+ run: |
+ bazel build //dotnet/src/webdriver
+ bazel build //dotnet/src/support
integration-tests:
name: Browser Tests
diff --git a/.github/workflows/ci-java.yml b/.github/workflows/ci-java.yml
index ce3f6955d10e3..ec03c0f84e7d9 100644
--- a/.github/workflows/ci-java.yml
+++ b/.github/workflows/ci-java.yml
@@ -22,79 +22,38 @@ jobs:
cache-key: java-doc
run: ./go --verbose javadocs
- lint:
- name: Lint
- needs: build
- uses: ./.github/workflows/bazel.yml
- with:
- name: Lint
- cache-key: java-lint
- run: bazel test --test_tag_filters "lint,-no-lint" //java/...
-
- small-tests:
- name: Small Tests
- needs: build
- uses: ./.github/workflows/bazel.yml
- with:
- name: Small Tests
- cache-key: java-small-tests
- run: bazel test --test_size_filters "small" --test_tag_filters "-lint" //java/...
-
- medium-tests:
- name: Medium Tests
- needs: small-tests
- uses: ./.github/workflows/bazel.yml
- with:
- name: Medium Tests
- cache-key: java-medium-tests
- run: bazel test --test_size_filters "medium" --test_tag_filters "-lint" --flaky_test_attempts 3 //java/...
-
browser-tests:
name: Browser Tests
- needs: small-tests
+ needs: build
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
include:
- - browser: chrome
- browser-version: stable
- - browser: firefox
- browser-version: latest
- - browser: firefox
- browser-version: latest-beta
- - browser: firefox
- browser-version: latest-devedition
+ - os: windows
+ - os: macos
with:
- name: Browser Tests (${{ matrix.browser }}, ${{ matrix.browser-version }})
- browser: ${{ matrix.browser }}
- browser-version: ${{ matrix.browser-version }}
- cache-key: java-${{ matrix.browser }}-tests
+ name: Browser Tests (chrome, ${{ matrix.os }})
+ os: ${{ matrix.os }}
+ browser: chrome
+ cache-key: java-${{ matrix.os }}-tests
run: >
- bazel query "attr(tags, ${{ matrix.browser }}, tests(//java/...)) except attr(tags, 'rc|remote', tests(//java/...))" |
- xargs bazel test --flaky_test_attempts 3
+ bazel test //java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest
remote-tests:
name: Remote Tests
- needs: small-tests
+ needs: build
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
include:
- - browser: chrome
- browser-version: stable
- - browser: firefox
- browser-version: latest
- - browser: firefox
- browser-version: latest-beta
- - browser: firefox
- browser-version: latest-devedition
+ - os: windows
+ - os: macos
with:
- name: Remote Tests (${{ matrix.browser }}, ${{ matrix.browser-version }})
- browser: ${{ matrix.browser }}
- browser-version: ${{ matrix.browser-version }}
- cache-key: java-${{ matrix.browser }}-remote-tests
+ name: Remote Tests (chrome, ${{ matrix.os }})
+ os: ${{ matrix.os }}
+ browser: chrome
+ cache-key: java-${{ matrix.os }}-remote-tests
run: >
- bazel query "attr(tags, ${{ matrix.browser }}, tests(//java/...)) intersect attr(tags, 'remote', tests(//java/...))" |
- xargs bazel test --flaky_test_attempts 3
+ bazel test //java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest-remote
diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml
index 5d09c6d971136..a241bce091c4c 100644
--- a/.github/workflows/ci-python.yml
+++ b/.github/workflows/ci-python.yml
@@ -77,18 +77,9 @@ jobs:
env:
TOXENV: mypy
- unit-tests:
- name: Unit Tests
- needs: build
- uses: ./.github/workflows/bazel.yml
- with:
- name: Unit Tests
- cache-key: py-unit
- run: bazel test //py:unit
-
browser-tests:
name: Browser Tests
- needs: unit-tests
+ needs: build
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
@@ -104,7 +95,7 @@ jobs:
remote-tests:
name: Remote Tests
- needs: unit-tests
+ needs: build
uses: ./.github/workflows/bazel.yml
with:
name: Integration Tests (remote)
diff --git a/.github/workflows/ci-rbe.yml b/.github/workflows/ci-rbe.yml
index 881f67492d254..3b4c36d9212f2 100644
--- a/.github/workflows/ci-rbe.yml
+++ b/.github/workflows/ci-rbe.yml
@@ -20,6 +20,7 @@ jobs:
name: Test
uses: ./.github/workflows/bazel.yml
with:
+ # TODO: experiment with turning off caches
name: All RBE tests
cache-key: rbe
ruby-version: jruby-9.4.2.0
diff --git a/.github/workflows/ci-ruby.yml b/.github/workflows/ci-ruby.yml
index 80ced414f5fef..1cb18abd09071 100644
--- a/.github/workflows/ci-ruby.yml
+++ b/.github/workflows/ci-ruby.yml
@@ -47,7 +47,7 @@ jobs:
os: ubuntu
- ruby-version: 3.2.0
os: macos
- - ruby-version: jruby-9.4.0.0
+ - ruby-version: jruby-9.4.3.0
os: ubuntu
- ruby-version: truffleruby-22.3.0
os: ubuntu
@@ -102,29 +102,21 @@ jobs:
strategy:
fail-fast: false
matrix:
- browser:
- - chrome
- - edge
- - firefox
- - safari
- os:
- - ubuntu
- - windows
- - macos
- exclude:
+ include:
- browser: edge
+ os: windows
+ - browser: chrome
os: ubuntu
- - browser: edge
- os: macos
- - browser: safari
+ - browser: firefox
os: ubuntu
- browser: safari
- os: windows
+ os: macos
with:
name: Remote Tests (${{ matrix.browser }}, ${{ matrix.os }})
browser: ${{ matrix.browser }}
cache-key: rb-remote-${{ matrix.browser }}-test
os: ${{ matrix.os }}
+ java-version: 11
run: >
bazel test
--define browser=${{ matrix.browser }}
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index c656543e13eda..53c6b734ac318 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -28,7 +28,6 @@ jobs:
fail-fast: false
matrix:
gem:
- - selenium-devtools
- selenium-webdriver
with:
name: Release
diff --git a/.gitignore b/.gitignore
index 63e5176c32523..2e1040729da15 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,8 @@ test-output/
common/build
/build/
cpp/iedriver/IEReturnTypes.h
+dotnet/.idea/
+dotnet/packages/
java/client/src/org/openqa/selenium/ie/IeReturnTypes.java
java/server/test/org/openqa/selenium/example
javascript/deps.js
diff --git a/.skipped-tests b/.skipped-tests
index 6009b57437413..25e52bd24cb62 100644
--- a/.skipped-tests
+++ b/.skipped-tests
@@ -1,8 +1,20 @@
--//java/test/org/openqa/selenium:FormHandlingTest-chrome
--//java/test/org/openqa/selenium/bidi:BiDiSessionTest-remote
--//java/test/org/openqa/selenium/bidi:BiDiTest-remote
+-//dotnet/test/common:DevTools/DevToolsNetworkTest-chrome
+-//dotnet/test/common:Interactions/BasicMouseInterfaceTest-chrome
+-//dotnet/test/common:Interactions/BasicMouseInterfaceTest-firefox
+-//dotnet/test/common:JavascriptEnabledBrowserTest-chrome
+-//dotnet/test/common:NetworkInterceptionTests-chrome
+-//dotnet/test/common:TakesScreenshotTest-chrome
+-//dotnet/test/common:TakesScreenshotTest-firefox
+-//dotnet/test/common:VirtualAuthn/VirtualAuthenticatorTest-chrome
+-//dotnet/test/support/UI:SelectBrowserTests-firefox
+-//dotnet/test/support/UI:SelectTests
+-//java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest
-//java/test/org/openqa/selenium/bidi/browsingcontext:BrowsingContextTest-remote
-//java/test/org/openqa/selenium/bidi/log:LogInspectorTest-remote
+-//java/test/org/openqa/selenium/bidi:BiDiSessionTest-remote
+-//java/test/org/openqa/selenium/bidi:BiDiTest-remote
+-//java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest
+-//java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest-remote
-//java/test/org/openqa/selenium/devtools:CdpFacadeTest-remote
-//java/test/org/openqa/selenium/devtools:ChangeUserAgentTest-remote
-//java/test/org/openqa/selenium/devtools:DevToolsReuseTest-remote
@@ -10,6 +22,18 @@
-//java/test/org/openqa/selenium/devtools:NetworkInterceptorRestTest-chrome-remote
-//java/test/org/openqa/selenium/devtools:NetworkInterceptorTest-chrome-remote
-//java/test/org/openqa/selenium/federatedcredentialmanagement:FederatedCredentialManagementTest
+-//java/test/org/openqa/selenium/firefox:FirefoxDriverBuilderTest
-//java/test/org/openqa/selenium/firefox:RemoteFirefoxDriverTest-remote
+-//java/test/org/openqa/selenium/grid/gridui:OverallGridTest
+-//java/test/org/openqa/selenium/grid/router:RemoteWebDriverBiDiTest
+-//java/test/org/openqa/selenium/grid/router:RemoteWebDriverDownloadTest
+-//java/test/org/openqa/selenium/grid/router:RemoteWebDriverDownloadTest-chrome
+-//java/test/org/openqa/selenium/grid/router:RemoteWebDriverDownloadTest-chrome-remote
+-//java/test/org/openqa/selenium/grid/router:RemoteWebDriverDownloadTest-remote
+-//java/test/org/openqa/selenium/interactions:DefaultMouseTest
+-//java/test/org/openqa/selenium/interactions:DefaultMouseTest-remote
+-//java/test/org/openqa/selenium/remote:RemoteWebDriverBuilderTest
-//java/test/org/openqa/selenium/remote:RemoteWebDriverScreenshotTest-remote
+-//java/test/org/openqa/selenium:FormHandlingTest-chrome
-//py:auto-chrome-test/selenium/webdriver/common/virtual_authenticator_tests.py
+-//py:unit-test/unit/selenium/webdriver/common/cdp_module_fallback_tests.py
diff --git a/Rakefile b/Rakefile
index 6a26ae038720a..1c659c50046f8 100644
--- a/Rakefile
+++ b/Rakefile
@@ -51,7 +51,7 @@ $DEBUG = true if ENV['debug'] == 'true'
verbose($DEBUG)
def release_version
- '4.13'
+ '4.14'
end
def version
@@ -98,9 +98,9 @@ task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [
JAVA_RELEASE_TARGETS = %w[
//java/src/org/openqa/selenium/chrome:chrome.publish
//java/src/org/openqa/selenium/chromium:chromium.publish
- //java/src/org/openqa/selenium/devtools/v115:v115.publish
//java/src/org/openqa/selenium/devtools/v116:v116.publish
//java/src/org/openqa/selenium/devtools/v117:v117.publish
+ //java/src/org/openqa/selenium/devtools/v118:v118.publish
//java/src/org/openqa/selenium/devtools/v85:v85.publish
//java/src/org/openqa/selenium/edge:edge.publish
//java/src/org/openqa/selenium/firefox:firefox.publish
diff --git a/WORKSPACE b/WORKSPACE
index 40f16067d43c4..47c3bc2f5ed78 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -62,10 +62,10 @@ python_register_multi_toolchains(
)
load("@python//:pip.bzl", "multi_pip_parse")
-load("@python//3.11:defs.bzl", interpreter_3_11 = "interpreter")
load("@python//3.10:defs.bzl", interpreter_3_10 = "interpreter")
-load("@python//3.9:defs.bzl", interpreter_3_9 = "interpreter")
+load("@python//3.11:defs.bzl", interpreter_3_11 = "interpreter")
load("@python//3.8:defs.bzl", interpreter_3_8 = "interpreter")
+load("@python//3.9:defs.bzl", interpreter_3_9 = "interpreter")
multi_pip_parse(
name = "py_dev_requirements",
@@ -144,9 +144,9 @@ rules_jvm_external_setup()
http_archive(
name = "contrib_rules_jvm",
- sha256 = "548f0583192ff79c317789b03b882a7be9b1325eb5d3da5d7fdcc4b7ca69d543",
- strip_prefix = "rules_jvm-0.9.0",
- url = "https://github.com/bazel-contrib/rules_jvm/archive/refs/tags/v0.9.0.tar.gz",
+ sha256 = "4d62589dc6a55e74bbe33930b826d593367fc777449a410604b2ad7c6c625ef7",
+ strip_prefix = "rules_jvm-0.19.0",
+ url = "https://github.com/bazel-contrib/rules_jvm/releases/download/v0.19.0/rules_jvm-v0.19.0.tar.gz",
)
load("@contrib_rules_jvm//:repositories.bzl", "contrib_rules_jvm_deps")
@@ -166,17 +166,41 @@ load("@maven//:defs.bzl", "pinned_maven_install")
pinned_maven_install()
http_archive(
- name = "d2l_rules_csharp",
- sha256 = "c0152befb1fd0e08527b38e41ef00b6627f9f0c2be6f2d23a4950f41701fa48a",
- strip_prefix = "rules_csharp-50e2f6c79e7a53e50b4518239b5ebcc61279759e",
- urls = [
- "https://github.com/Brightspace/rules_csharp/archive/50e2f6c79e7a53e50b4518239b5ebcc61279759e.tar.gz",
+ name = "rules_dotnet",
+ patch_args = ["-p1"],
+ patches = [
+ "//dotnet:0001-Include-more-of-the-SDK.patch",
+ "//dotnet:0002-Pass-through-information-about-location-of-the-nupkg.patch",
+ "//dotnet:0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch",
+ "//dotnet:0004-Ensure-data-runfiles-are-added-to-tests.patch",
+ "//dotnet:0005-Ensure-csharp_library-files-are-unique.patch",
],
+ sha256 = "f445400dac566eed9d7895aa0fb168a5453a07e5128dc1c4852cd9c537e0ca60",
+ strip_prefix = "rules_dotnet-0.10.7",
+ url = "https://github.com/bazelbuild/rules_dotnet/releases/download/v0.10.7/rules_dotnet-v0.10.7.tar.gz",
+)
+
+load(
+ "@rules_dotnet//dotnet:repositories.bzl",
+ "dotnet_register_toolchains",
+ "rules_dotnet_dependencies",
)
-load("//dotnet:workspace.bzl", "selenium_register_dotnet")
+rules_dotnet_dependencies()
-selenium_register_dotnet()
+dotnet_register_toolchains("dotnet", "7.0.400")
+
+load("@rules_dotnet//dotnet:rules_dotnet_nuget_packages.bzl", "rules_dotnet_nuget_packages")
+
+rules_dotnet_nuget_packages()
+
+load("@rules_dotnet//dotnet:paket2bazel_dependencies.bzl", "paket2bazel_dependencies")
+
+paket2bazel_dependencies()
+
+load("//dotnet:paket.bzl", "paket")
+
+paket()
http_archive(
name = "rules_rust",
@@ -316,12 +340,12 @@ http_archive(
url = "https://github.com/p0deje/rules_ruby/archive/9550503e1c1702375e87837d43eb137030edd28a.zip",
)
-load("//rb:ruby_version.bzl", "RUBY_VERSION")
load(
"@rules_ruby//ruby:deps.bzl",
"rb_bundle",
"rb_register_toolchains",
)
+load("//rb:ruby_version.bzl", "RUBY_VERSION")
rb_register_toolchains(version = RUBY_VERSION)
diff --git a/common/devtools/chromium/v115/BUILD.bazel b/common/devtools/chromium/v118/BUILD.bazel
similarity index 100%
rename from common/devtools/chromium/v115/BUILD.bazel
rename to common/devtools/chromium/v118/BUILD.bazel
diff --git a/common/devtools/chromium/v115/browser_protocol.pdl b/common/devtools/chromium/v118/browser_protocol.pdl
similarity index 96%
rename from common/devtools/chromium/v115/browser_protocol.pdl
rename to common/devtools/chromium/v118/browser_protocol.pdl
index 81acd27979826..f19168c9ea39f 100644
--- a/common/devtools/chromium/v115/browser_protocol.pdl
+++ b/common/devtools/chromium/v118/browser_protocol.pdl
@@ -72,7 +72,7 @@ experimental domain Accessibility
optional AXValue attributeValue
# Whether this source is superseded by a higher priority source.
optional boolean superseded
- # The native markup source for this value, e.g. a
*/
private void TestPageLoadTimeoutIsEnforced(long webDriverPageLoadTimeoutInSeconds)
{
diff --git a/dotnet/test/common/TakesScreenshotTest.cs b/dotnet/test/common/TakesScreenshotTest.cs
index 4024ee153ddc3..7a832471a8c86 100644
--- a/dotnet/test/common/TakesScreenshotTest.cs
+++ b/dotnet/test/common/TakesScreenshotTest.cs
@@ -101,7 +101,7 @@ public void ShouldCaptureScreenshotOfCurrentViewport()
[IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")]
public void ShouldTakeScreenshotsOfAnElement()
{
-#if NET6_0
+#if NET6_0 || NET7_0
Assert.Ignore("Skipping test: this framework can not process colors.");
#endif
@@ -130,7 +130,7 @@ public void ShouldTakeScreenshotsOfAnElement()
[IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")]
public void ShouldCaptureScreenshotAtFramePage()
{
-#if NET6_0
+#if NET6_0 || NET7_0
Assert.Ignore("Skipping test: this framework can not process colors.");
#endif
@@ -175,7 +175,7 @@ public void ShouldCaptureScreenshotAtFramePage()
[IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")]
public void ShouldCaptureScreenshotAtIFramePage()
{
-#if NET6_0
+#if NET6_0 || NET7_0
Assert.Ignore("Skipping test: this framework can not process colors.");
#endif
@@ -218,7 +218,7 @@ public void ShouldCaptureScreenshotAtIFramePage()
[IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")]
public void ShouldCaptureScreenshotAtFramePageAfterSwitching()
{
-#if NET6_0
+#if NET6_0 || NET7_0
Assert.Ignore("Skipping test: this framework can not process colors.");
#endif
@@ -259,7 +259,7 @@ public void ShouldCaptureScreenshotAtFramePageAfterSwitching()
[IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")]
public void ShouldCaptureScreenshotAtIFramePageAfterSwitching()
{
-#if NET6_0
+#if NET6_0 || NET7_0
Assert.Ignore("Skipping test: this framework can not process colors.");
#endif
@@ -335,7 +335,7 @@ private HashSet ScanActualColors(Screenshot screenshot, int stepX, int s
{
HashSet colors = new HashSet();
-#if !NET6_0
+#if !NET6_0 && !NET7_0
try
{
Image image = Image.FromStream(new MemoryStream(screenshot.AsByteArray));
@@ -369,7 +369,7 @@ private Color GetPixelColor(Screenshot screenshot, int x, int y)
{
Color pixelColor = Color.Black;
-#if !NET6_0
+#if !NET6_0 && !NET7_0
Image image = Image.FromStream(new MemoryStream(screenshot.AsByteArray));
Bitmap bitmap = new Bitmap(image);
pixelColor = bitmap.GetPixel(1, 1);
diff --git a/dotnet/test/common/VirtualAuthn/VirtualAuthenticatorTest.cs b/dotnet/test/common/VirtualAuthn/VirtualAuthenticatorTest.cs
index c0573eb59241a..a5c707aa46f6b 100644
--- a/dotnet/test/common/VirtualAuthn/VirtualAuthenticatorTest.cs
+++ b/dotnet/test/common/VirtualAuthn/VirtualAuthenticatorTest.cs
@@ -3,8 +3,8 @@
using System.Collections.ObjectModel;
using System.Linq;
using OpenQA.Selenium.Environment;
+using OpenQA.Selenium.Internal;
using NUnit.Framework;
-using Microsoft.IdentityModel.Tokens;
using static OpenQA.Selenium.VirtualAuth.VirtualAuthenticatorOptions;
@@ -207,9 +207,8 @@ public void ShouldAddNonResidentCredentialWhenAuthenticatorUsesU2FProtocol()
{
CreateRKDisabledU2FAuthenticator();
- /**
- * A pkcs#8 encoded unencrypted EC256 private key as a base64url string.
- */
+
+ // A pkcs#8 encoded unencrypted EC256 private key as a base64url string.
string base64EncodedEC256PK =
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q"
+ "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU"
@@ -272,9 +271,7 @@ public void AddResidentCredentialNotSupportedWhenAuthenticatorUsesU2FProtocol()
// Add a resident credential using the testing API.
CreateRKEnabledU2FAuthenticator();
- /**
- * A pkcs#8 encoded unencrypted EC256 private key as a base64url string.
- */
+ // A pkcs#8 encoded unencrypted EC256 private key as a base64url string.
string base64EncodedEC256PK =
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q"
+ "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU"
@@ -475,4 +472,4 @@ public void testSetUserVerified()
Assert.True(error.StartsWith("NotAllowedError"));
}
}
-}
+}
\ No newline at end of file
diff --git a/dotnet/test/common/WebDriver.Common.Tests.csproj b/dotnet/test/common/WebDriver.Common.Tests.csproj
index 46f0097bcdbe6..9cae056c97d25 100644
--- a/dotnet/test/common/WebDriver.Common.Tests.csproj
+++ b/dotnet/test/common/WebDriver.Common.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0;net48
+ net7.0
WebDriver.Common.Tests
OpenQA.Selenium
@@ -30,7 +30,6 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
diff --git a/dotnet/test/common/appconfig.json b/dotnet/test/common/appconfig.json
index 3bb05d483db4e..9ed48075d594c 100644
--- a/dotnet/test/common/appconfig.json
+++ b/dotnet/test/common/appconfig.json
@@ -1,4 +1,5 @@
{
+ "DriverServiceLocation": "",
"ActiveDriverConfig": "Chrome",
"ActiveWebsiteConfig": "Default",
"TestWebServerConfig": {
diff --git a/dotnet/test/support/BUILD.bazel b/dotnet/test/support/BUILD.bazel
deleted file mode 100644
index 2fdeabfa268b5..0000000000000
--- a/dotnet/test/support/BUILD.bazel
+++ /dev/null
@@ -1,41 +0,0 @@
-load("//dotnet:defs.bzl", "nunit_test")
-
-nunit_test(
- name = "support",
- size = "enormous",
- srcs = glob([
- "*.cs",
- "Events/*.cs",
- "Extensions/*.cs",
- "UI/*.cs",
- ]),
- out = "WebDriver.Support.Tests.dll",
- args = [
- "--workers=1",
- "--params=ConfigFile=$(location //dotnet/test/common:appconfig.json)",
- "--params=ActiveDriverConfig={}".format(config_setting),
- "--params=ActiveWebsiteConfig=HostsFileRedirect",
- ],
- data = [
- "//common/src/web",
- "//dotnet/test/common:appconfig.json",
- "//java/test/org/openqa/selenium/environment:appserver_deploy.jar",
- ],
- is_windows = select({
- "@bazel_tools//src/conditions:host_windows": True,
- "//conditions:default": False,
- }),
- tags = [
- "no-sandbox",
- "requires-network",
- ],
- target_frameworks = ["netcoreapp3.1"],
- visibility = ["//visibility:public"],
- deps = [
- "//dotnet/src/support:netstandard2.1",
- "//dotnet/src/webdriver:netstandard2.1",
- "//dotnet/test/common:firefox",
- "@json.net//:Newtonsoft.Json",
- "@moq//:Moq",
- ],
-)
diff --git a/dotnet/test/support/Events/BUILD.bazel b/dotnet/test/support/Events/BUILD.bazel
new file mode 100644
index 0000000000000..415162982d651
--- /dev/null
+++ b/dotnet/test/support/Events/BUILD.bazel
@@ -0,0 +1,52 @@
+load("//dotnet:defs.bzl", "dotnet_nunit_test_suite", "framework")
+
+SMALL_TESTS = [
+ "EventFiringWebDriverTest.cs",
+]
+
+dotnet_nunit_test_suite(
+ name = "SmallTests",
+ size = "small",
+ srcs = SMALL_TESTS,
+ private_deps = [
+ framework("nuget", "NETStandard.Library"),
+ ],
+ target_frameworks = ["net7.0"],
+ deps = [
+ "//dotnet/src/support",
+ "//dotnet/src/webdriver",
+ "//dotnet/test/common:fixtures",
+ framework("nuget", "NUnit"),
+ framework("nuget", "Moq"),
+ ],
+)
+
+dotnet_nunit_test_suite(
+ name = "LargeTests",
+ size = "large",
+ srcs = glob(
+ [
+ "**/*Test.cs",
+ "**/*Tests.cs",
+ ],
+ exclude = SMALL_TESTS,
+ ) + [
+ "//dotnet/test/common:assembly-fixtures",
+ ],
+ browsers = [
+ "firefox",
+ ],
+ data = [
+ "//dotnet/test/common:test-data",
+ ],
+ private_deps = [
+ framework("nuget", "NETStandard.Library"),
+ ],
+ target_frameworks = ["net7.0"],
+ deps = [
+ "//dotnet/src/support",
+ "//dotnet/src/webdriver",
+ "//dotnet/test/common:fixtures",
+ framework("nuget", "NUnit"),
+ ],
+)
diff --git a/dotnet/test/support/Extensions/BUILD.bazel b/dotnet/test/support/Extensions/BUILD.bazel
new file mode 100644
index 0000000000000..14ad729c0bcd6
--- /dev/null
+++ b/dotnet/test/support/Extensions/BUILD.bazel
@@ -0,0 +1,18 @@
+load("//dotnet:defs.bzl", "dotnet_nunit_test_suite", "framework")
+
+dotnet_nunit_test_suite(
+ name = "SmallTests",
+ size = "small",
+ srcs = glob(["*.cs"]),
+ private_deps = [
+ framework("nuget", "NETStandard.Library"),
+ ],
+ target_frameworks = ["net7.0"],
+ deps = [
+ "//dotnet/src/support",
+ "//dotnet/src/webdriver",
+ "//dotnet/test/common:fixtures",
+ framework("nuget", "Moq"),
+ framework("nuget", "NUnit"),
+ ],
+)
diff --git a/dotnet/test/support/UI/BUILD.bazel b/dotnet/test/support/UI/BUILD.bazel
new file mode 100644
index 0000000000000..e3af6774acc85
--- /dev/null
+++ b/dotnet/test/support/UI/BUILD.bazel
@@ -0,0 +1,57 @@
+load("//dotnet:defs.bzl", "dotnet_nunit_test_suite", "framework")
+
+SMALL_TESTS = [
+ "DefaultWaitTest.cs",
+ "FakeClock.cs",
+ "LoadableComponentTests.cs",
+ "SelectTests.cs",
+ "SlowLoadableComponentTest.cs",
+ "WebDriverWaitTest.cs",
+]
+
+dotnet_nunit_test_suite(
+ name = "SmallTests",
+ size = "small",
+ srcs = SMALL_TESTS,
+ private_deps = [
+ framework("nuget", "NETStandard.Library"),
+ ],
+ target_frameworks = ["net7.0"],
+ deps = [
+ "//dotnet/src/support",
+ "//dotnet/src/webdriver",
+ "//dotnet/test/common:fixtures",
+ framework("nuget", "NUnit"),
+ framework("nuget", "Moq"),
+ ],
+)
+
+dotnet_nunit_test_suite(
+ name = "LargeTests",
+ size = "large",
+ srcs = glob(
+ [
+ "**/*Test.cs",
+ "**/*Tests.cs",
+ ],
+ exclude = SMALL_TESTS,
+ ) + [
+ "//dotnet/test/common:assembly-fixtures",
+ ],
+ browsers = [
+ "firefox",
+ ],
+ data = [
+ "//dotnet/test/common:test-data",
+ ],
+ private_deps = [
+ framework("nuget", "NETStandard.Library"),
+ ],
+ target_frameworks = ["net7.0"],
+ deps = [
+ "//dotnet/src/support",
+ "//dotnet/src/webdriver",
+ "//dotnet/test/common:fixtures",
+ framework("nuget", "NUnit"),
+ ],
+)
diff --git a/dotnet/update-deps.sh b/dotnet/update-deps.sh
new file mode 100755
index 0000000000000..e2056c70b305e
--- /dev/null
+++ b/dotnet/update-deps.sh
@@ -0,0 +1,9 @@
+#! /usr/bin/env bash
+
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+
+(
+ cd "$SCRIPT_DIR" || exit 1
+ (dotnet tool restore && dotnet tool run paket install)
+ bazel run @rules_dotnet//tools/paket2bazel:paket2bazel.exe -- --dependencies-file "$(pwd)"/paket.dependencies --output-folder "$(pwd)"
+)
diff --git a/dotnet/workspace.bzl b/dotnet/workspace.bzl
index 3e8ebc2ca8bed..3db0838875b2a 100644
--- a/dotnet/workspace.bzl
+++ b/dotnet/workspace.bzl
@@ -11,24 +11,6 @@ def selenium_register_dotnet():
native.register_toolchains("//third_party/dotnet/ilmerge:all")
- import_nuget_package(
- name = "identitymodel.tokens",
- file = "third_party/dotnet/nuget/packages/microsoft.identitymodel.tokens.6.19.0.nupkg",
- sha256 = "9ef0cd1a0f36716e20a39a7d612292c1ea0b1a6f196395db0c7552518ac0f0bd",
- )
-
- import_nuget_package(
- name = "identitymodel.logging",
- file = "third_party/dotnet/nuget/packages/microsoft.identitymodel.logging.6.19.0.nupkg",
- sha256 = "0f0c738bf4ce27c5b4f6a441ce067a888b3e3b2a6783517b5d8caa46eec4516a",
- )
-
- import_nuget_package(
- name = "identitymodel.abstractions",
- file = "third_party/dotnet/nuget/packages/microsoft.identitymodel.abstractions.6.19.0.nupkg",
- sha256 = "eaa7f4995eb68edf7b6d1586a3a35027f6f9252ab82cb1478cec347a42895ee0",
- )
-
import_nuget_package(
name = "json.net",
file = "third_party/dotnet/nuget/packages/newtonsoft.json.13.0.1.nupkg",
diff --git a/java/CHANGELOG b/java/CHANGELOG
index 9b7c33e42fe33..c267e8c60afad 100644
--- a/java/CHANGELOG
+++ b/java/CHANGELOG
@@ -1,3 +1,22 @@
+v4.14.0
+======
+* Supported CDP versions: 85, 116, 117, 118
+* Replace the EventAttribute(Value) with an AttributeMap (#12684)
+* Add browsing context's capture box and element screenshot commands
+* Enable handle user prompt tests for Firefox
+* Delete SM binary only when SE_MANAGER_PATH is not set (#12840)
+* Shutdown executors created for a single tasks
+* Ensure closed socket connection does not prevent freeing up resources
+* Remove the unused htmlunit-driver from the unit tests (#12849)
+* Ensure proper error message gets logged (#12853)
+* Allow setting SSL context in client config for HttpClient (#12874)
+* Improve warning when CDP version not found (#12880)
+* Ensure retry mechanism does not swallow an exception (#12838)
+* Require Java 11 (#12843)
+* Reduce log noise at FINE level (#12866)
+* Refactor frame method to use isEmpty for list check and String check. (#12894)
+* Use new 'getArray' method to extract driver configurations (#12716)
+
v4.13.0
======
* Supported CDP versions: 85, 115, 116, 117
diff --git a/java/defs.bzl b/java/defs.bzl
index 5089a29c60451..354013ecf109a 100644
--- a/java/defs.bzl
+++ b/java/defs.bzl
@@ -1,3 +1,7 @@
+load(
+ "@contrib_rules_jvm//java:defs.bzl",
+ _JUNIT5_DEPS = "JUNIT5_DEPS",
+)
load(
"@rules_java//java:defs.bzl",
_java_binary = "java_binary",
@@ -5,16 +9,12 @@ load(
)
load("@rules_jvm_external//:defs.bzl", _artifact = "artifact", _javadoc = "javadoc", _maven_bom = "maven_bom")
load("//java/private:dist_zip.bzl", _java_dist_zip = "java_dist_zip")
+load("//java/private:java_test_suite.bzl", _java_test_suite = "java_test_suite")
load("//java/private:library.bzl", _java_export = "java_export", _java_library = "java_library", _java_test = "java_test")
load("//java/private:merge_jars.bzl", _merge_jars = "merge_jars")
load("//java/private:module.bzl", _java_module = "java_module")
load("//java/private:selenium_test.bzl", _selenium_test = "selenium_test")
load("//java/private:suite.bzl", _java_selenium_test_suite = "java_selenium_test_suite")
-load(
- "@contrib_rules_jvm//java:defs.bzl",
- _JUNIT5_DEPS = "JUNIT5_DEPS",
- _java_test_suite = "java_test_suite",
-)
def java_test_suite(name, runner = "junit5", **kwargs):
_java_test_suite(name = name, runner = runner, **kwargs)
diff --git a/java/maven_deps.bzl b/java/maven_deps.bzl
index d2083aec21b75..447a4b47c744d 100644
--- a/java/maven_deps.bzl
+++ b/java/maven_deps.bzl
@@ -75,15 +75,6 @@ def selenium_java_deps():
"org.apache.commons:commons-exec:1.3",
"org.apache.logging.log4j:log4j-core:2.20.0",
"org.assertj:assertj-core:3.24.2",
- maven.artifact(
- group = "org.asynchttpclient",
- artifact = "async-http-client",
- version = "2.12.3",
- exclusions = [
- "io.netty:netty-transport-native-epoll",
- "io.netty:netty-transport-native-kqueue",
- ],
- ),
"org.bouncycastle:bcpkix-jdk15on:1.70",
"org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5",
"org.hamcrest:hamcrest:2.2",
@@ -98,7 +89,6 @@ def selenium_java_deps():
"org.mockito:mockito-core:4.11.0",
"org.mockito:mockito-inline:4.11.0",
"org.redisson:redisson:3.23.2",
- "org.seleniumhq.selenium:htmlunit-driver:4.11.0",
"org.slf4j:slf4j-api:2.0.7",
"org.slf4j:slf4j-jdk14:2.0.7",
"org.zeromq:jeromq:0.5.3",
@@ -108,11 +98,6 @@ def selenium_java_deps():
"org.hamcrest:hamcrest-core",
"io.netty:netty-all", # Depend on the actual things you need
],
- override_targets = {
- "org.seleniumhq.selenium:selenium-api": "@//java/src/org/openqa/selenium:core",
- "org.seleniumhq.selenium:selenium-remote-driver": "@//java/src/org/openqa/selenium/remote:remote",
- "org.seleniumhq.selenium:selenium-support": "@//java/src/org/openqa/selenium/support",
- },
fail_on_missing_checksum = True,
fail_if_repin_required = True,
fetch_sources = True,
diff --git a/java/maven_install.json b/java/maven_install.json
index 841ae2d5eb387..8ba656db743fb 100644
--- a/java/maven_install.json
+++ b/java/maven_install.json
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": 991709172,
- "__RESOLVED_ARTIFACTS_HASH": 1120536062,
+ "__INPUT_ARTIFACTS_HASH": -486878249,
+ "__RESOLVED_ARTIFACTS_HASH": 1235473565,
"artifacts": {
"com.beust:jcommander": {
"shasums": {
@@ -178,27 +178,6 @@
},
"version": "3.2.0"
},
- "com.shapesecurity:salvation2": {
- "shasums": {
- "jar": "a1a0f5238a07f246c9e206725f697e5623e93b729d8fd8b148fc627bf9a27c07",
- "sources": "b10a798a9f988eaac6d053f445d5769f6f51dc89164aae16901ea37234d8af3c"
- },
- "version": "3.0.1"
- },
- "com.sun.activation:jakarta.activation": {
- "shasums": {
- "jar": "02156773e4ae9d048d14a56ad35d644bee9f1052a791d072df3ded3c656e6e1a",
- "sources": "f8f52ce9df5d5d29c1778183d48214624caa36be202a7eff2cef5a0519f2aa53"
- },
- "version": "1.2.2"
- },
- "com.typesafe.netty:netty-reactive-streams": {
- "shasums": {
- "jar": "eafc52d500b49e891db095ee7baac0420aea8a97015ab7671ba1f1ccabf799d2",
- "sources": "76df17cc7c4fac9c470e557b5cca224df51ba878ec9fd3fd8f0f89878cbf98ab"
- },
- "version": "2.0.4"
- },
"commons-codec:commons-codec": {
"shasums": {
"jar": "b3e9f6d63a790109bf0d056611fbed1cf69055826defeb9894a71369d246ed63",
@@ -208,10 +187,10 @@
},
"commons-io:commons-io": {
"shasums": {
- "jar": "15093cffda2a0c65783c1d371de55548303cc158df94a66fc6cd15d25c3e2ef8",
- "sources": "7fca56242374a75f9104836b2da299fb91aee05f263303db69ad5bb886be5249"
+ "jar": "a10418348d234968600ccb1d988efcbbd08716e1d96936ccc1880e7d22513474",
+ "sources": "3b69b518d9a844732e35509b79e499fca63a960ee4301b1c96dc32e87f3f60a1"
},
- "version": "2.10.0"
+ "version": "2.5"
},
"commons-logging:commons-logging": {
"shasums": {
@@ -220,13 +199,6 @@
},
"version": "1.2"
},
- "commons-net:commons-net": {
- "shasums": {
- "jar": "e3c1566f821b84489308cd933f57e8c00dd8714dc96b898bef844386510d3461",
- "sources": "b910528017f757a8b54f4e764d3e0fadccf7a25aaf2acd666674585ae6e58b55"
- },
- "version": "3.9.0"
- },
"dev.failsafe:failsafe": {
"shasums": {
"jar": "2c5dc879a6dac7ea3a7b29d795e27bd49b8e7908b05c2f3e56053c19d79850f5",
@@ -559,13 +531,6 @@
},
"version": "11.4"
},
- "net.sourceforge.htmlunit:htmlunit": {
- "shasums": {
- "jar": "9957f53bd8eb96d5afc78766415486567549d9b204dc5d931a5690f8f10155ee",
- "sources": "93a22d875c6db84746180fd620f523da65eea5c713673ec49ded7c0d0a34d662"
- },
- "version": "2.70.0"
- },
"net.sourceforge.htmlunit:htmlunit-core-js": {
"shasums": {
"jar": "7008cd93de74c8413b94ecf8b63fe642ee73168c5beba8c33b76ac80c4e4865c",
@@ -573,27 +538,6 @@
},
"version": "2.70.0"
},
- "net.sourceforge.htmlunit:htmlunit-cssparser": {
- "shasums": {
- "jar": "c684323dc4e2198d0abebe5f0c025560c3c10c34c1d228646e40ae747135f607",
- "sources": "8787b79b62c9e0f6472c3b0f02e4fadbe028fecfd5355404077cd2e88dd4c7c7"
- },
- "version": "1.14.0"
- },
- "net.sourceforge.htmlunit:htmlunit-xpath": {
- "shasums": {
- "jar": "3eaee2f5058da2ebcf5c74f0d977c032cfbd9300564eb49870dce399706b0a73",
- "sources": "f8a6465dd4f64a34da81b396c0b1d6740ba9f301718a808d30adb3b3559b21d6"
- },
- "version": "2.70.0"
- },
- "net.sourceforge.htmlunit:neko-htmlunit": {
- "shasums": {
- "jar": "e9e011e102ef85cfb4369580babd60a5c62b806e21224451f7e3e1949e475565",
- "sources": "d082f1d317d4153f93f23ad9e24ba694dd104177cd8d03fe19c6f5fa97e43120"
- },
- "version": "2.70.0"
- },
"org.apache.bcel:bcel": {
"shasums": {
"jar": "bdeb381d0d19999e221e6a0f8d8bf44f5b19c2e57eabf68b70dc098652aefaf5",
@@ -643,27 +587,6 @@
},
"version": "5.1.3"
},
- "org.apache.httpcomponents:httpclient": {
- "shasums": {
- "jar": "c8bc7e1c51a6d4ce72f40d2ebbabf1c4b68bfe76e732104b04381b493478e9d6",
- "sources": "55b01f9f4cbec9ac646866a4b64b176570d79e293a556796b5b0263d047ef8e6"
- },
- "version": "4.5.14"
- },
- "org.apache.httpcomponents:httpcore": {
- "shasums": {
- "jar": "6c9b3dd142a09dc468e23ad39aad6f75a0f2b85125104469f026e52a474e464f",
- "sources": "705f8cf3671093b6c1db16bbf6971a7ef400e3819784f1af53e5bc3e67b5a9a0"
- },
- "version": "4.4.16"
- },
- "org.apache.httpcomponents:httpmime": {
- "shasums": {
- "jar": "d401243d5c6eae928a37121b6e819158c8c32ea0584793e7285bb489ab2a3d17",
- "sources": "9b8c59ecd259d16a026945abb5c2a82f403b6c3dcc1588dbc2532f2cd5d4e83d"
- },
- "version": "4.5.14"
- },
"org.apache.logging.log4j:log4j-api": {
"shasums": {
"jar": "2f43eea679ea66f14ca0f13fec2a8600ac124f5a5231dcb4df8393eddcb97550",
@@ -692,20 +615,6 @@
},
"version": "3.24.2"
},
- "org.asynchttpclient:async-http-client": {
- "shasums": {
- "jar": "107a4ace7a3586f8e8a027c6d7e9933c9ae56eeb1a6df347eed2e7b552e4e5ed",
- "sources": "fd7d5e61cb6e5adbb06c14b72c10c88e18ebfaf22d401a521eae14123b537900"
- },
- "version": "2.12.3"
- },
- "org.asynchttpclient:async-http-client-netty-utils": {
- "shasums": {
- "jar": "e0bb76bbca0c85c68cab25dbed7989b00db5da8627cf69258f398d7d89bc9067",
- "sources": "0b66a2867a3e4ea1e101e64d961d677bc6fbbbefa462b8fac461ef9101bec435"
- },
- "version": "2.12.3"
- },
"org.bouncycastle:bcpkix-jdk15on": {
"shasums": {
"jar": "e5b9cb821df57f70b0593358e89c0e8d7266515da9d088af6c646f63d433c07c",
@@ -727,13 +636,6 @@
},
"version": "1.70"
},
- "org.brotli:dec": {
- "shasums": {
- "jar": "615c0c3efef990d77831104475fba6a1f7971388691d4bad1471ad84101f6d52",
- "sources": "064ac1e41f475c1fd0479b6505f44b6e3bb044b948bddc75d56a496ebb85fbc3"
- },
- "version": "0.1.2"
- },
"org.checkerframework:checker-qual": {
"shasums": {
"jar": "e316255bbfcd9fe50d165314b85abb2b33cb2a66a93c491db648e498a82c2de1",
@@ -748,55 +650,6 @@
},
"version": "2.1.3"
},
- "org.eclipse.jetty.websocket:websocket-api": {
- "shasums": {
- "jar": "cd64551abf8e5130b01f1063fe94d4c58df74f134bb684f0b9bed56196e85f1d",
- "sources": "7d6224315742a1214fba2cb3492ed5849741122298b5eff17e59b1f50d4ade54"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty.websocket:websocket-client": {
- "shasums": {
- "jar": "7f8d9861f87e59cbe1fd6beadeae0b32f1a7cc78ffccf2f13e8b4db9dd70602b",
- "sources": "88be3d0110d3b9f78ad7c8996d41f2fe5bf2bbdfed90dabf12390e479a5cebda"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty.websocket:websocket-common": {
- "shasums": {
- "jar": "d6b8bba5e8864eaf98d853458403a75dc401c4858badf9d009941f402cc2671b",
- "sources": "c68f5cd7413f8511afde5df620ab6dab1dad18fbe96adb35e19d89c6754a9955"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty:jetty-client": {
- "shasums": {
- "jar": "b216e173d79c0adce1da3d0894abe418453851a3dc6cc5006e5d3003dcac88fd",
- "sources": "e29b882a38ee652e82d9759435ca4cfabf78434c715095fcac703b181aa16e5f"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty:jetty-http": {
- "shasums": {
- "jar": "3e3c569b9f39dbd1c9ae6d67e32512e072c50b4845866e941bcfd741e0ef5088",
- "sources": "056c9b41dd5e30504132b4a5556b19085fd03e6746cb17881ae8bcfb9b8d8f63"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty:jetty-io": {
- "shasums": {
- "jar": "dc51976bc91236279c82e9f1a51e82631562eea518e8654097d271b8dd0acb0b",
- "sources": "f339b03abc5036be066c1d919eed9667d73017d03bc2935826054bc53e5a614b"
- },
- "version": "9.4.50.v20221201"
- },
- "org.eclipse.jetty:jetty-util": {
- "shasums": {
- "jar": "38891b3480b582d1f2646cf94f33e1675bdc7c814657e1742424c98193c9117b",
- "sources": "d3c3e0f19b5ed6a34c9b135120ded21b81a3d88344ed8ddda2b9e24331668702"
- },
- "version": "9.4.50.v20221201"
- },
"org.eclipse.mylyn.github:org.eclipse.egit.github.core": {
"shasums": {
"jar": "5ae0ce75c0d4938e1fe32d5efbb0204e38585e76454bd16d91b5a59852a1e64e",
@@ -972,55 +825,6 @@
},
"version": "3.23.2"
},
- "org.seleniumhq.selenium:htmlunit-driver": {
- "shasums": {
- "jar": "f54ec2138e2ad788a8957d0e939b4eabe25a52d71224168ec60605b8d70a01d9",
- "sources": "317d5094d4c30627ef1d2cf845768f7e6ee2bbff5bd5e5ecf70e2bf2a467688b"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-api": {
- "shasums": {
- "jar": "8c145530c654edec393a578852887b619722600c9ddd7b9f8629350392dad12c",
- "sources": "edf51a8b2c993d48c41bee268f44d66ffaf71a7c801509bd892415ccbef5536f"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-http": {
- "shasums": {
- "jar": "fceff573397010c18d8e56d1c4b37dadfffa8da5baf9771caf530f5ed52c483b",
- "sources": "2bfb79f3900947825c9dc6e5e6ac93e973953e5b817528d6915464bbb44fd89c"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-json": {
- "shasums": {
- "jar": "5383937f742f156c1e7e3ed584832c29b3d661fd81bf44db3ee0a830627d384d",
- "sources": "a1b29d04e134658ba7452697a8ddb1e622781eff1bfed7d6359f0f193da14afe"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-manager": {
- "shasums": {
- "jar": "47e1379efab2258620bd92c8730845b6a80d48d5660067486cd676eb5a93a788",
- "sources": "33c528317d41a8cf025decdb0862f5f30d082be9c964522ede5990a4c89fe651"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-remote-driver": {
- "shasums": {
- "jar": "e7fd521c0c769803fedc90d2715c8c2afedcb30213e11c13309c41ba33a14234",
- "sources": "125236a09c90509382186f83e7c11a966877ac6ddc7fb3fd90a86aff61b3eeeb"
- },
- "version": "4.11.0"
- },
- "org.seleniumhq.selenium:selenium-support": {
- "shasums": {
- "jar": "1da9fbbe99971bac1a535b2aaede1442ae6b2920f44a4aabeb4334cb87ebd0ff",
- "sources": "135596d8516fe833b08c4958b7f20d861c0fdaf80120d44f5ee94cb3d3732cda"
- },
- "version": "4.11.0"
- },
"org.slf4j:slf4j-api": {
"shasums": {
"jar": "5d6298b93a1905c32cda6478808ac14c2d4a47e91535e53c41f7feeb85d946f4",
@@ -1134,10 +938,6 @@
"com.graphql-java:java-dataloader": [
"org.slf4j:slf4j-api"
],
- "com.typesafe.netty:netty-reactive-streams": [
- "io.netty:netty-handler",
- "org.reactivestreams:reactive-streams"
- ],
"io.grpc:grpc-context": [
"io.grpc:grpc-api"
],
@@ -1341,22 +1141,6 @@
"org.xmlresolver:xmlresolver",
"org.xmlresolver:xmlresolver:jar:data"
],
- "net.sourceforge.htmlunit:htmlunit": [
- "com.shapesecurity:salvation2",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "commons-logging:commons-logging",
- "commons-net:commons-net",
- "net.sourceforge.htmlunit:htmlunit-core-js",
- "net.sourceforge.htmlunit:htmlunit-cssparser",
- "net.sourceforge.htmlunit:htmlunit-xpath",
- "net.sourceforge.htmlunit:neko-htmlunit",
- "org.apache.commons:commons-lang3",
- "org.apache.commons:commons-text",
- "org.apache.httpcomponents:httpmime",
- "org.brotli:dec",
- "org.eclipse.jetty.websocket:websocket-client"
- ],
"org.apache.commons:commons-text": [
"org.apache.commons:commons-lang3"
],
@@ -1368,35 +1152,12 @@
"org.apache.httpcomponents.core5:httpcore5-h2": [
"org.apache.httpcomponents.core5:httpcore5"
],
- "org.apache.httpcomponents:httpclient": [
- "commons-logging:commons-logging",
- "org.apache.httpcomponents:httpcore"
- ],
- "org.apache.httpcomponents:httpmime": [
- "org.apache.httpcomponents:httpclient"
- ],
"org.apache.logging.log4j:log4j-core": [
"org.apache.logging.log4j:log4j-api"
],
"org.assertj:assertj-core": [
"net.bytebuddy:byte-buddy"
],
- "org.asynchttpclient:async-http-client": [
- "com.sun.activation:jakarta.activation",
- "com.typesafe.netty:netty-reactive-streams",
- "io.netty:netty-codec-http",
- "io.netty:netty-codec-socks",
- "io.netty:netty-handler",
- "io.netty:netty-handler-proxy",
- "org.asynchttpclient:async-http-client-netty-utils",
- "org.reactivestreams:reactive-streams",
- "org.slf4j:slf4j-api"
- ],
- "org.asynchttpclient:async-http-client-netty-utils": [
- "com.sun.activation:jakarta.activation",
- "io.netty:netty-buffer",
- "org.slf4j:slf4j-api"
- ],
"org.bouncycastle:bcpkix-jdk15on": [
"org.bouncycastle:bcprov-jdk15on",
"org.bouncycastle:bcutil-jdk15on"
@@ -1404,28 +1165,6 @@
"org.bouncycastle:bcutil-jdk15on": [
"org.bouncycastle:bcprov-jdk15on"
],
- "org.eclipse.jetty.websocket:websocket-client": [
- "org.eclipse.jetty.websocket:websocket-common",
- "org.eclipse.jetty:jetty-client",
- "org.eclipse.jetty:jetty-io",
- "org.eclipse.jetty:jetty-util"
- ],
- "org.eclipse.jetty.websocket:websocket-common": [
- "org.eclipse.jetty.websocket:websocket-api",
- "org.eclipse.jetty:jetty-io",
- "org.eclipse.jetty:jetty-util"
- ],
- "org.eclipse.jetty:jetty-client": [
- "org.eclipse.jetty:jetty-http",
- "org.eclipse.jetty:jetty-io"
- ],
- "org.eclipse.jetty:jetty-http": [
- "org.eclipse.jetty:jetty-io",
- "org.eclipse.jetty:jetty-util"
- ],
- "org.eclipse.jetty:jetty-io": [
- "org.eclipse.jetty:jetty-util"
- ],
"org.eclipse.mylyn.github:org.eclipse.egit.github.core": [
"com.google.code.gson:gson"
],
@@ -1511,62 +1250,6 @@
"org.reactivestreams:reactive-streams",
"org.slf4j:slf4j-api"
],
- "org.seleniumhq.selenium:htmlunit-driver": [
- "net.sourceforge.htmlunit:htmlunit",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-support"
- ],
- "org.seleniumhq.selenium:selenium-http": [
- "com.google.guava:guava",
- "dev.failsafe:failsafe",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-json"
- ],
- "org.seleniumhq.selenium:selenium-json": [
- "org.seleniumhq.selenium:selenium-api"
- ],
- "org.seleniumhq.selenium:selenium-manager": [
- "com.google.guava:guava",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-json"
- ],
- "org.seleniumhq.selenium:selenium-remote-driver": [
- "com.google.auto.service:auto-service-annotations",
- "com.google.guava:guava",
- "io.netty:netty-buffer",
- "io.netty:netty-codec-http",
- "io.netty:netty-common",
- "io.netty:netty-transport",
- "io.netty:netty-transport-classes-epoll",
- "io.netty:netty-transport-classes-kqueue",
- "io.netty:netty-transport-native-epoll",
- "io.netty:netty-transport-native-kqueue",
- "io.netty:netty-transport-native-unix-common",
- "io.opentelemetry:opentelemetry-api",
- "io.opentelemetry:opentelemetry-context",
- "io.opentelemetry:opentelemetry-exporter-logging",
- "io.opentelemetry:opentelemetry-sdk",
- "io.opentelemetry:opentelemetry-sdk-common",
- "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure",
- "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi",
- "io.opentelemetry:opentelemetry-sdk-trace",
- "io.opentelemetry:opentelemetry-semconv",
- "net.bytebuddy:byte-buddy",
- "org.apache.commons:commons-exec",
- "org.asynchttpclient:async-http-client",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-http",
- "org.seleniumhq.selenium:selenium-json",
- "org.seleniumhq.selenium:selenium-manager"
- ],
- "org.seleniumhq.selenium:selenium-support": [
- "com.google.auto.service:auto-service-annotations",
- "com.google.guava:guava",
- "net.bytebuddy:byte-buddy",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-json",
- "org.seleniumhq.selenium:selenium-remote-driver"
- ],
"org.slf4j:slf4j-jdk14": [
"org.slf4j:slf4j-api"
],
@@ -1882,20 +1565,6 @@
"org.dataloader.stats",
"org.dataloader.stats.context"
],
- "com.shapesecurity:salvation2": [
- "com.shapesecurity.salvation2",
- "com.shapesecurity.salvation2.Directives",
- "com.shapesecurity.salvation2.URLs",
- "com.shapesecurity.salvation2.Values"
- ],
- "com.sun.activation:jakarta.activation": [
- "com.sun.activation.registries",
- "com.sun.activation.viewers",
- "javax.activation"
- ],
- "com.typesafe.netty:netty-reactive-streams": [
- "com.typesafe.netty"
- ],
"commons-codec:commons-codec": [
"org.apache.commons.codec",
"org.apache.commons.codec.binary",
@@ -1908,12 +1577,8 @@
"commons-io:commons-io": [
"org.apache.commons.io",
"org.apache.commons.io.comparator",
- "org.apache.commons.io.file",
- "org.apache.commons.io.file.spi",
"org.apache.commons.io.filefilter",
- "org.apache.commons.io.function",
"org.apache.commons.io.input",
- "org.apache.commons.io.input.buffer",
"org.apache.commons.io.monitor",
"org.apache.commons.io.output",
"org.apache.commons.io.serialization"
@@ -1922,28 +1587,6 @@
"org.apache.commons.logging",
"org.apache.commons.logging.impl"
],
- "commons-net:commons-net": [
- "org.apache.commons.net",
- "org.apache.commons.net.bsd",
- "org.apache.commons.net.chargen",
- "org.apache.commons.net.daytime",
- "org.apache.commons.net.discard",
- "org.apache.commons.net.echo",
- "org.apache.commons.net.finger",
- "org.apache.commons.net.ftp",
- "org.apache.commons.net.ftp.parser",
- "org.apache.commons.net.imap",
- "org.apache.commons.net.io",
- "org.apache.commons.net.nntp",
- "org.apache.commons.net.ntp",
- "org.apache.commons.net.pop3",
- "org.apache.commons.net.smtp",
- "org.apache.commons.net.telnet",
- "org.apache.commons.net.tftp",
- "org.apache.commons.net.time",
- "org.apache.commons.net.util",
- "org.apache.commons.net.whois"
- ],
"dev.failsafe:failsafe": [
"dev.failsafe",
"dev.failsafe.event",
@@ -2444,70 +2087,6 @@
"net.sf.saxon.xpath",
"net.sf.saxon.z"
],
- "net.sourceforge.htmlunit:htmlunit": [
- "com.gargoylesoftware.htmlunit",
- "com.gargoylesoftware.htmlunit.activex.javascript.msxml",
- "com.gargoylesoftware.htmlunit.attachment",
- "com.gargoylesoftware.htmlunit.css",
- "com.gargoylesoftware.htmlunit.html",
- "com.gargoylesoftware.htmlunit.html.applets",
- "com.gargoylesoftware.htmlunit.html.impl",
- "com.gargoylesoftware.htmlunit.html.parser",
- "com.gargoylesoftware.htmlunit.html.parser.neko",
- "com.gargoylesoftware.htmlunit.html.serializer",
- "com.gargoylesoftware.htmlunit.html.xpath",
- "com.gargoylesoftware.htmlunit.httpclient",
- "com.gargoylesoftware.htmlunit.javascript",
- "com.gargoylesoftware.htmlunit.javascript.background",
- "com.gargoylesoftware.htmlunit.javascript.configuration",
- "com.gargoylesoftware.htmlunit.javascript.host",
- "com.gargoylesoftware.htmlunit.javascript.host.animations",
- "com.gargoylesoftware.htmlunit.javascript.host.arrays",
- "com.gargoylesoftware.htmlunit.javascript.host.canvas",
- "com.gargoylesoftware.htmlunit.javascript.host.canvas.ext",
- "com.gargoylesoftware.htmlunit.javascript.host.crypto",
- "com.gargoylesoftware.htmlunit.javascript.host.css",
- "com.gargoylesoftware.htmlunit.javascript.host.dom",
- "com.gargoylesoftware.htmlunit.javascript.host.event",
- "com.gargoylesoftware.htmlunit.javascript.host.fetch",
- "com.gargoylesoftware.htmlunit.javascript.host.file",
- "com.gargoylesoftware.htmlunit.javascript.host.geo",
- "com.gargoylesoftware.htmlunit.javascript.host.html",
- "com.gargoylesoftware.htmlunit.javascript.host.idb",
- "com.gargoylesoftware.htmlunit.javascript.host.intl",
- "com.gargoylesoftware.htmlunit.javascript.host.media",
- "com.gargoylesoftware.htmlunit.javascript.host.media.midi",
- "com.gargoylesoftware.htmlunit.javascript.host.media.presentation",
- "com.gargoylesoftware.htmlunit.javascript.host.media.rtc",
- "com.gargoylesoftware.htmlunit.javascript.host.network",
- "com.gargoylesoftware.htmlunit.javascript.host.payment",
- "com.gargoylesoftware.htmlunit.javascript.host.performance",
- "com.gargoylesoftware.htmlunit.javascript.host.security",
- "com.gargoylesoftware.htmlunit.javascript.host.speech",
- "com.gargoylesoftware.htmlunit.javascript.host.svg",
- "com.gargoylesoftware.htmlunit.javascript.host.worker",
- "com.gargoylesoftware.htmlunit.javascript.host.xml",
- "com.gargoylesoftware.htmlunit.javascript.polyfill",
- "com.gargoylesoftware.htmlunit.javascript.regexp",
- "com.gargoylesoftware.htmlunit.platform",
- "com.gargoylesoftware.htmlunit.platform.canvas.rendering",
- "com.gargoylesoftware.htmlunit.platform.dom.traversal",
- "com.gargoylesoftware.htmlunit.platform.geom",
- "com.gargoylesoftware.htmlunit.platform.image",
- "com.gargoylesoftware.htmlunit.platform.util",
- "com.gargoylesoftware.htmlunit.protocol",
- "com.gargoylesoftware.htmlunit.protocol.about",
- "com.gargoylesoftware.htmlunit.protocol.data",
- "com.gargoylesoftware.htmlunit.protocol.javascript",
- "com.gargoylesoftware.htmlunit.svg",
- "com.gargoylesoftware.htmlunit.util",
- "com.gargoylesoftware.htmlunit.util.geometry",
- "com.gargoylesoftware.htmlunit.websocket",
- "com.gargoylesoftware.htmlunit.webstart",
- "com.gargoylesoftware.htmlunit.xml",
- "netscape",
- "netscape.javascript"
- ],
"net.sourceforge.htmlunit:htmlunit-core-js": [
"net.sourceforge.htmlunit.corejs.classfile",
"net.sourceforge.htmlunit.corejs.javascript",
@@ -2530,41 +2109,6 @@
"net.sourceforge.htmlunit.corejs.javascript.v8dtoa",
"net.sourceforge.htmlunit.corejs.javascript.xml"
],
- "net.sourceforge.htmlunit:htmlunit-cssparser": [
- "com.gargoylesoftware.css.dom",
- "com.gargoylesoftware.css.parser",
- "com.gargoylesoftware.css.parser.condition",
- "com.gargoylesoftware.css.parser.javacc",
- "com.gargoylesoftware.css.parser.media",
- "com.gargoylesoftware.css.parser.selector",
- "com.gargoylesoftware.css.util"
- ],
- "net.sourceforge.htmlunit:htmlunit-xpath": [
- "net.sourceforge.htmlunit.xpath",
- "net.sourceforge.htmlunit.xpath.axes",
- "net.sourceforge.htmlunit.xpath.compiler",
- "net.sourceforge.htmlunit.xpath.functions",
- "net.sourceforge.htmlunit.xpath.objects",
- "net.sourceforge.htmlunit.xpath.operations",
- "net.sourceforge.htmlunit.xpath.patterns",
- "net.sourceforge.htmlunit.xpath.res",
- "net.sourceforge.htmlunit.xpath.xml.dtm",
- "net.sourceforge.htmlunit.xpath.xml.dtm.ref",
- "net.sourceforge.htmlunit.xpath.xml.dtm.ref.dom2dtm",
- "net.sourceforge.htmlunit.xpath.xml.utils"
- ],
- "net.sourceforge.htmlunit:neko-htmlunit": [
- "net.sourceforge.htmlunit.cyberneko",
- "net.sourceforge.htmlunit.cyberneko.filters",
- "net.sourceforge.htmlunit.cyberneko.parsers",
- "net.sourceforge.htmlunit.xerces.dom",
- "net.sourceforge.htmlunit.xerces.impl",
- "net.sourceforge.htmlunit.xerces.impl.msg",
- "net.sourceforge.htmlunit.xerces.parsers",
- "net.sourceforge.htmlunit.xerces.util",
- "net.sourceforge.htmlunit.xerces.xni",
- "net.sourceforge.htmlunit.xerces.xni.parser"
- ],
"org.apache.bcel:bcel": [
"org.apache.bcel",
"org.apache.bcel.classfile",
@@ -2686,55 +2230,6 @@
"org.apache.hc.core5.http2.protocol",
"org.apache.hc.core5.http2.ssl"
],
- "org.apache.httpcomponents:httpclient": [
- "org.apache.http.auth",
- "org.apache.http.auth.params",
- "org.apache.http.client",
- "org.apache.http.client.config",
- "org.apache.http.client.entity",
- "org.apache.http.client.methods",
- "org.apache.http.client.params",
- "org.apache.http.client.protocol",
- "org.apache.http.client.utils",
- "org.apache.http.conn",
- "org.apache.http.conn.params",
- "org.apache.http.conn.routing",
- "org.apache.http.conn.scheme",
- "org.apache.http.conn.socket",
- "org.apache.http.conn.ssl",
- "org.apache.http.conn.util",
- "org.apache.http.cookie",
- "org.apache.http.cookie.params",
- "org.apache.http.impl.auth",
- "org.apache.http.impl.client",
- "org.apache.http.impl.conn",
- "org.apache.http.impl.conn.tsccm",
- "org.apache.http.impl.cookie",
- "org.apache.http.impl.execchain"
- ],
- "org.apache.httpcomponents:httpcore": [
- "org.apache.http",
- "org.apache.http.annotation",
- "org.apache.http.concurrent",
- "org.apache.http.config",
- "org.apache.http.entity",
- "org.apache.http.impl",
- "org.apache.http.impl.bootstrap",
- "org.apache.http.impl.entity",
- "org.apache.http.impl.io",
- "org.apache.http.impl.pool",
- "org.apache.http.io",
- "org.apache.http.message",
- "org.apache.http.params",
- "org.apache.http.pool",
- "org.apache.http.protocol",
- "org.apache.http.ssl",
- "org.apache.http.util"
- ],
- "org.apache.httpcomponents:httpmime": [
- "org.apache.http.entity.mime",
- "org.apache.http.entity.mime.content"
- ],
"org.apache.logging.log4j:log4j-api": [
"org.apache.logging.log4j",
"org.apache.logging.log4j.internal",
@@ -2833,42 +2328,6 @@
"org.assertj.core.util.introspection",
"org.assertj.core.util.xml"
],
- "org.asynchttpclient:async-http-client": [
- "org.asynchttpclient",
- "org.asynchttpclient.channel",
- "org.asynchttpclient.config",
- "org.asynchttpclient.cookie",
- "org.asynchttpclient.exception",
- "org.asynchttpclient.filter",
- "org.asynchttpclient.handler",
- "org.asynchttpclient.handler.resumable",
- "org.asynchttpclient.netty",
- "org.asynchttpclient.netty.channel",
- "org.asynchttpclient.netty.future",
- "org.asynchttpclient.netty.handler",
- "org.asynchttpclient.netty.handler.intercept",
- "org.asynchttpclient.netty.request",
- "org.asynchttpclient.netty.request.body",
- "org.asynchttpclient.netty.ssl",
- "org.asynchttpclient.netty.timeout",
- "org.asynchttpclient.netty.ws",
- "org.asynchttpclient.ntlm",
- "org.asynchttpclient.oauth",
- "org.asynchttpclient.proxy",
- "org.asynchttpclient.request.body",
- "org.asynchttpclient.request.body.generator",
- "org.asynchttpclient.request.body.multipart",
- "org.asynchttpclient.request.body.multipart.part",
- "org.asynchttpclient.resolver",
- "org.asynchttpclient.spnego",
- "org.asynchttpclient.uri",
- "org.asynchttpclient.util",
- "org.asynchttpclient.webdav",
- "org.asynchttpclient.ws"
- ],
- "org.asynchttpclient:async-http-client-netty-utils": [
- "org.asynchttpclient.netty.util"
- ],
"org.bouncycastle:bcpkix-jdk15on": [
"org.bouncycastle.cert",
"org.bouncycastle.cert.bc",
@@ -3093,9 +2552,6 @@
"org.bouncycastle.oer.its",
"org.bouncycastle.oer.its.template"
],
- "org.brotli:dec": [
- "org.brotli.dec"
- ],
"org.checkerframework:checker-qual": [
"org.checkerframework.checker.builder.qual",
"org.checkerframework.checker.calledmethods.qual",
@@ -3144,63 +2600,6 @@
"org.dom4j.xpath",
"org.dom4j.xpp"
],
- "org.eclipse.jetty.websocket:websocket-api": [
- "org.eclipse.jetty.websocket.api",
- "org.eclipse.jetty.websocket.api.annotations",
- "org.eclipse.jetty.websocket.api.extensions",
- "org.eclipse.jetty.websocket.api.util"
- ],
- "org.eclipse.jetty.websocket:websocket-client": [
- "org.eclipse.jetty.websocket.client",
- "org.eclipse.jetty.websocket.client.io",
- "org.eclipse.jetty.websocket.client.masks"
- ],
- "org.eclipse.jetty.websocket:websocket-common": [
- "org.eclipse.jetty.websocket.common",
- "org.eclipse.jetty.websocket.common.events",
- "org.eclipse.jetty.websocket.common.events.annotated",
- "org.eclipse.jetty.websocket.common.extensions",
- "org.eclipse.jetty.websocket.common.extensions.compress",
- "org.eclipse.jetty.websocket.common.extensions.fragment",
- "org.eclipse.jetty.websocket.common.extensions.identity",
- "org.eclipse.jetty.websocket.common.frames",
- "org.eclipse.jetty.websocket.common.io",
- "org.eclipse.jetty.websocket.common.io.http",
- "org.eclipse.jetty.websocket.common.io.payload",
- "org.eclipse.jetty.websocket.common.message",
- "org.eclipse.jetty.websocket.common.scopes",
- "org.eclipse.jetty.websocket.common.util"
- ],
- "org.eclipse.jetty:jetty-client": [
- "org.eclipse.jetty.client",
- "org.eclipse.jetty.client.api",
- "org.eclipse.jetty.client.http",
- "org.eclipse.jetty.client.jmx",
- "org.eclipse.jetty.client.util"
- ],
- "org.eclipse.jetty:jetty-http": [
- "org.eclipse.jetty.http",
- "org.eclipse.jetty.http.pathmap"
- ],
- "org.eclipse.jetty:jetty-io": [
- "org.eclipse.jetty.io",
- "org.eclipse.jetty.io.jmx",
- "org.eclipse.jetty.io.ssl"
- ],
- "org.eclipse.jetty:jetty-util": [
- "org.eclipse.jetty.util",
- "org.eclipse.jetty.util.annotation",
- "org.eclipse.jetty.util.component",
- "org.eclipse.jetty.util.compression",
- "org.eclipse.jetty.util.log",
- "org.eclipse.jetty.util.preventers",
- "org.eclipse.jetty.util.resource",
- "org.eclipse.jetty.util.security",
- "org.eclipse.jetty.util.ssl",
- "org.eclipse.jetty.util.statistic",
- "org.eclipse.jetty.util.thread",
- "org.eclipse.jetty.util.thread.strategy"
- ],
"org.eclipse.mylyn.github:org.eclipse.egit.github.core": [
"org.eclipse.egit.github.core",
"org.eclipse.egit.github.core.client",
@@ -3530,72 +2929,6 @@
"org.redisson.transaction.operation.map",
"org.redisson.transaction.operation.set"
],
- "org.seleniumhq.selenium:htmlunit-driver": [
- "org.openqa.selenium.htmlunit",
- "org.openqa.selenium.htmlunit.logging",
- "org.openqa.selenium.htmlunit.w3"
- ],
- "org.seleniumhq.selenium:selenium-api": [
- "org.openqa.selenium",
- "org.openqa.selenium.federatedcredentialmanagement",
- "org.openqa.selenium.html5",
- "org.openqa.selenium.interactions",
- "org.openqa.selenium.internal",
- "org.openqa.selenium.logging",
- "org.openqa.selenium.logging.profiler",
- "org.openqa.selenium.mobile",
- "org.openqa.selenium.net",
- "org.openqa.selenium.print",
- "org.openqa.selenium.virtualauthenticator"
- ],
- "org.seleniumhq.selenium:selenium-http": [
- "org.openqa.selenium.remote.http"
- ],
- "org.seleniumhq.selenium:selenium-json": [
- "org.openqa.selenium.json"
- ],
- "org.seleniumhq.selenium:selenium-manager": [
- "org.openqa.selenium.manager"
- ],
- "org.seleniumhq.selenium:selenium-remote-driver": [
- "org.openqa.selenium.bidi",
- "org.openqa.selenium.bidi.browsingcontext",
- "org.openqa.selenium.bidi.log",
- "org.openqa.selenium.concurrent",
- "org.openqa.selenium.devtools",
- "org.openqa.selenium.devtools.events",
- "org.openqa.selenium.devtools.idealized",
- "org.openqa.selenium.devtools.idealized.browser.model",
- "org.openqa.selenium.devtools.idealized.log",
- "org.openqa.selenium.devtools.idealized.log.model",
- "org.openqa.selenium.devtools.idealized.runtime.model",
- "org.openqa.selenium.devtools.idealized.target",
- "org.openqa.selenium.devtools.idealized.target.model",
- "org.openqa.selenium.devtools.noop",
- "org.openqa.selenium.io",
- "org.openqa.selenium.os",
- "org.openqa.selenium.remote",
- "org.openqa.selenium.remote.codec",
- "org.openqa.selenium.remote.codec.w3c",
- "org.openqa.selenium.remote.html5",
- "org.openqa.selenium.remote.http.netty",
- "org.openqa.selenium.remote.internal",
- "org.openqa.selenium.remote.locators",
- "org.openqa.selenium.remote.mobile",
- "org.openqa.selenium.remote.service",
- "org.openqa.selenium.remote.tracing",
- "org.openqa.selenium.remote.tracing.empty",
- "org.openqa.selenium.remote.tracing.opentelemetry",
- "org.openqa.selenium.support.decorators"
- ],
- "org.seleniumhq.selenium:selenium-support": [
- "org.openqa.selenium.support",
- "org.openqa.selenium.support.events",
- "org.openqa.selenium.support.locators",
- "org.openqa.selenium.support.pagefactory",
- "org.openqa.selenium.support.pagefactory.internal",
- "org.openqa.selenium.support.ui"
- ],
"org.slf4j:slf4j-api": [
"org.slf4j",
"org.slf4j.event",
@@ -3762,20 +3095,12 @@
"com.graphql-java:graphql-java:jar:sources",
"com.graphql-java:java-dataloader",
"com.graphql-java:java-dataloader:jar:sources",
- "com.shapesecurity:salvation2",
- "com.shapesecurity:salvation2:jar:sources",
- "com.sun.activation:jakarta.activation",
- "com.sun.activation:jakarta.activation:jar:sources",
- "com.typesafe.netty:netty-reactive-streams",
- "com.typesafe.netty:netty-reactive-streams:jar:sources",
"commons-codec:commons-codec",
"commons-codec:commons-codec:jar:sources",
"commons-io:commons-io",
"commons-io:commons-io:jar:sources",
"commons-logging:commons-logging",
"commons-logging:commons-logging:jar:sources",
- "commons-net:commons-net",
- "commons-net:commons-net:jar:sources",
"dev.failsafe:failsafe",
"dev.failsafe:failsafe:jar:sources",
"eu.neilalexander:jnacl",
@@ -3873,16 +3198,8 @@
"net.jcip:jcip-annotations:jar:sources",
"net.sf.saxon:Saxon-HE",
"net.sf.saxon:Saxon-HE:jar:sources",
- "net.sourceforge.htmlunit:htmlunit",
"net.sourceforge.htmlunit:htmlunit-core-js",
"net.sourceforge.htmlunit:htmlunit-core-js:jar:sources",
- "net.sourceforge.htmlunit:htmlunit-cssparser",
- "net.sourceforge.htmlunit:htmlunit-cssparser:jar:sources",
- "net.sourceforge.htmlunit:htmlunit-xpath",
- "net.sourceforge.htmlunit:htmlunit-xpath:jar:sources",
- "net.sourceforge.htmlunit:htmlunit:jar:sources",
- "net.sourceforge.htmlunit:neko-htmlunit",
- "net.sourceforge.htmlunit:neko-htmlunit:jar:sources",
"org.apache.bcel:bcel",
"org.apache.bcel:bcel:jar:sources",
"org.apache.commons:commons-exec",
@@ -3897,12 +3214,6 @@
"org.apache.httpcomponents.core5:httpcore5-h2",
"org.apache.httpcomponents.core5:httpcore5-h2:jar:sources",
"org.apache.httpcomponents.core5:httpcore5:jar:sources",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpclient:jar:sources",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpcore:jar:sources",
- "org.apache.httpcomponents:httpmime",
- "org.apache.httpcomponents:httpmime:jar:sources",
"org.apache.logging.log4j:log4j-api",
"org.apache.logging.log4j:log4j-api:jar:sources",
"org.apache.logging.log4j:log4j-core",
@@ -3911,36 +3222,16 @@
"org.apiguardian:apiguardian-api:jar:sources",
"org.assertj:assertj-core",
"org.assertj:assertj-core:jar:sources",
- "org.asynchttpclient:async-http-client",
- "org.asynchttpclient:async-http-client-netty-utils",
- "org.asynchttpclient:async-http-client-netty-utils:jar:sources",
- "org.asynchttpclient:async-http-client:jar:sources",
"org.bouncycastle:bcpkix-jdk15on",
"org.bouncycastle:bcpkix-jdk15on:jar:sources",
"org.bouncycastle:bcprov-jdk15on",
"org.bouncycastle:bcprov-jdk15on:jar:sources",
"org.bouncycastle:bcutil-jdk15on",
"org.bouncycastle:bcutil-jdk15on:jar:sources",
- "org.brotli:dec",
- "org.brotli:dec:jar:sources",
"org.checkerframework:checker-qual",
"org.checkerframework:checker-qual:jar:sources",
"org.dom4j:dom4j",
"org.dom4j:dom4j:jar:sources",
- "org.eclipse.jetty.websocket:websocket-api",
- "org.eclipse.jetty.websocket:websocket-api:jar:sources",
- "org.eclipse.jetty.websocket:websocket-client",
- "org.eclipse.jetty.websocket:websocket-client:jar:sources",
- "org.eclipse.jetty.websocket:websocket-common",
- "org.eclipse.jetty.websocket:websocket-common:jar:sources",
- "org.eclipse.jetty:jetty-client",
- "org.eclipse.jetty:jetty-client:jar:sources",
- "org.eclipse.jetty:jetty-http",
- "org.eclipse.jetty:jetty-http:jar:sources",
- "org.eclipse.jetty:jetty-io",
- "org.eclipse.jetty:jetty-io:jar:sources",
- "org.eclipse.jetty:jetty-util",
- "org.eclipse.jetty:jetty-util:jar:sources",
"org.eclipse.mylyn.github:org.eclipse.egit.github.core",
"org.eclipse.mylyn.github:org.eclipse.egit.github.core:jar:sources",
"org.hamcrest:hamcrest",
@@ -3991,20 +3282,6 @@
"org.reactivestreams:reactive-streams:jar:sources",
"org.redisson:redisson",
"org.redisson:redisson:jar:sources",
- "org.seleniumhq.selenium:htmlunit-driver",
- "org.seleniumhq.selenium:htmlunit-driver:jar:sources",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-api:jar:sources",
- "org.seleniumhq.selenium:selenium-http",
- "org.seleniumhq.selenium:selenium-http:jar:sources",
- "org.seleniumhq.selenium:selenium-json",
- "org.seleniumhq.selenium:selenium-json:jar:sources",
- "org.seleniumhq.selenium:selenium-manager",
- "org.seleniumhq.selenium:selenium-manager:jar:sources",
- "org.seleniumhq.selenium:selenium-remote-driver",
- "org.seleniumhq.selenium:selenium-remote-driver:jar:sources",
- "org.seleniumhq.selenium:selenium-support",
- "org.seleniumhq.selenium:selenium-support:jar:sources",
"org.slf4j:slf4j-api",
"org.slf4j:slf4j-api:jar:sources",
"org.slf4j:slf4j-jdk14",
@@ -4071,20 +3348,12 @@
"com.graphql-java:graphql-java:jar:sources",
"com.graphql-java:java-dataloader",
"com.graphql-java:java-dataloader:jar:sources",
- "com.shapesecurity:salvation2",
- "com.shapesecurity:salvation2:jar:sources",
- "com.sun.activation:jakarta.activation",
- "com.sun.activation:jakarta.activation:jar:sources",
- "com.typesafe.netty:netty-reactive-streams",
- "com.typesafe.netty:netty-reactive-streams:jar:sources",
"commons-codec:commons-codec",
"commons-codec:commons-codec:jar:sources",
"commons-io:commons-io",
"commons-io:commons-io:jar:sources",
"commons-logging:commons-logging",
"commons-logging:commons-logging:jar:sources",
- "commons-net:commons-net",
- "commons-net:commons-net:jar:sources",
"dev.failsafe:failsafe",
"dev.failsafe:failsafe:jar:sources",
"eu.neilalexander:jnacl",
@@ -4182,16 +3451,8 @@
"net.jcip:jcip-annotations:jar:sources",
"net.sf.saxon:Saxon-HE",
"net.sf.saxon:Saxon-HE:jar:sources",
- "net.sourceforge.htmlunit:htmlunit",
"net.sourceforge.htmlunit:htmlunit-core-js",
"net.sourceforge.htmlunit:htmlunit-core-js:jar:sources",
- "net.sourceforge.htmlunit:htmlunit-cssparser",
- "net.sourceforge.htmlunit:htmlunit-cssparser:jar:sources",
- "net.sourceforge.htmlunit:htmlunit-xpath",
- "net.sourceforge.htmlunit:htmlunit-xpath:jar:sources",
- "net.sourceforge.htmlunit:htmlunit:jar:sources",
- "net.sourceforge.htmlunit:neko-htmlunit",
- "net.sourceforge.htmlunit:neko-htmlunit:jar:sources",
"org.apache.bcel:bcel",
"org.apache.bcel:bcel:jar:sources",
"org.apache.commons:commons-exec",
@@ -4206,12 +3467,6 @@
"org.apache.httpcomponents.core5:httpcore5-h2",
"org.apache.httpcomponents.core5:httpcore5-h2:jar:sources",
"org.apache.httpcomponents.core5:httpcore5:jar:sources",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpclient:jar:sources",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpcore:jar:sources",
- "org.apache.httpcomponents:httpmime",
- "org.apache.httpcomponents:httpmime:jar:sources",
"org.apache.logging.log4j:log4j-api",
"org.apache.logging.log4j:log4j-api:jar:sources",
"org.apache.logging.log4j:log4j-core",
@@ -4220,36 +3475,16 @@
"org.apiguardian:apiguardian-api:jar:sources",
"org.assertj:assertj-core",
"org.assertj:assertj-core:jar:sources",
- "org.asynchttpclient:async-http-client",
- "org.asynchttpclient:async-http-client-netty-utils",
- "org.asynchttpclient:async-http-client-netty-utils:jar:sources",
- "org.asynchttpclient:async-http-client:jar:sources",
"org.bouncycastle:bcpkix-jdk15on",
"org.bouncycastle:bcpkix-jdk15on:jar:sources",
"org.bouncycastle:bcprov-jdk15on",
"org.bouncycastle:bcprov-jdk15on:jar:sources",
"org.bouncycastle:bcutil-jdk15on",
"org.bouncycastle:bcutil-jdk15on:jar:sources",
- "org.brotli:dec",
- "org.brotli:dec:jar:sources",
"org.checkerframework:checker-qual",
"org.checkerframework:checker-qual:jar:sources",
"org.dom4j:dom4j",
"org.dom4j:dom4j:jar:sources",
- "org.eclipse.jetty.websocket:websocket-api",
- "org.eclipse.jetty.websocket:websocket-api:jar:sources",
- "org.eclipse.jetty.websocket:websocket-client",
- "org.eclipse.jetty.websocket:websocket-client:jar:sources",
- "org.eclipse.jetty.websocket:websocket-common",
- "org.eclipse.jetty.websocket:websocket-common:jar:sources",
- "org.eclipse.jetty:jetty-client",
- "org.eclipse.jetty:jetty-client:jar:sources",
- "org.eclipse.jetty:jetty-http",
- "org.eclipse.jetty:jetty-http:jar:sources",
- "org.eclipse.jetty:jetty-io",
- "org.eclipse.jetty:jetty-io:jar:sources",
- "org.eclipse.jetty:jetty-util",
- "org.eclipse.jetty:jetty-util:jar:sources",
"org.eclipse.mylyn.github:org.eclipse.egit.github.core",
"org.eclipse.mylyn.github:org.eclipse.egit.github.core:jar:sources",
"org.hamcrest:hamcrest",
@@ -4300,20 +3535,6 @@
"org.reactivestreams:reactive-streams:jar:sources",
"org.redisson:redisson",
"org.redisson:redisson:jar:sources",
- "org.seleniumhq.selenium:htmlunit-driver",
- "org.seleniumhq.selenium:htmlunit-driver:jar:sources",
- "org.seleniumhq.selenium:selenium-api",
- "org.seleniumhq.selenium:selenium-api:jar:sources",
- "org.seleniumhq.selenium:selenium-http",
- "org.seleniumhq.selenium:selenium-http:jar:sources",
- "org.seleniumhq.selenium:selenium-json",
- "org.seleniumhq.selenium:selenium-json:jar:sources",
- "org.seleniumhq.selenium:selenium-manager",
- "org.seleniumhq.selenium:selenium-manager:jar:sources",
- "org.seleniumhq.selenium:selenium-remote-driver",
- "org.seleniumhq.selenium:selenium-remote-driver:jar:sources",
- "org.seleniumhq.selenium:selenium-support",
- "org.seleniumhq.selenium:selenium-support:jar:sources",
"org.slf4j:slf4j-api",
"org.slf4j:slf4j-api:jar:sources",
"org.slf4j:slf4j-jdk14",
diff --git a/java/private/java_test_suite.bzl b/java/private/java_test_suite.bzl
new file mode 100644
index 0000000000000..04ea657c2d7a7
--- /dev/null
+++ b/java/private/java_test_suite.bzl
@@ -0,0 +1,29 @@
+load("@contrib_rules_jvm//java/private:create_jvm_test_suite.bzl", "create_jvm_test_suite")
+load("@contrib_rules_jvm//java/private:java_test_suite_shared_constants.bzl", "DEFAULT_TEST_SUFFIXES")
+load("@contrib_rules_jvm//java/private:library.bzl", "java_library")
+load(":junit5_test.bzl", "junit5_test")
+
+def java_test_suite(
+ name,
+ srcs,
+ runner = "junit5",
+ test_suffixes = DEFAULT_TEST_SUFFIXES,
+ package = None,
+ deps = None,
+ runtime_deps = [],
+ size = None,
+ **kwargs):
+ create_jvm_test_suite(
+ name,
+ srcs = srcs,
+ test_suffixes = test_suffixes,
+ package = package,
+ define_library = java_library,
+ # We want to use our own test runner
+ define_test = junit5_test,
+ runner = runner,
+ deps = deps,
+ runtime_deps = runtime_deps,
+ size = size,
+ **kwargs
+ )
diff --git a/java/private/junit5_test.bzl b/java/private/junit5_test.bzl
new file mode 100644
index 0000000000000..9ef9d2857a328
--- /dev/null
+++ b/java/private/junit5_test.bzl
@@ -0,0 +1,27 @@
+load("@contrib_rules_jvm//java:defs.bzl", "java_test")
+load("@contrib_rules_jvm//java/private:package.bzl", "get_package_name")
+
+def junit5_test(
+ name,
+ test_class = None,
+ runtime_deps = [],
+ package_prefixes = [],
+ jvm_flags = [],
+ **kwargs):
+ if test_class:
+ clazz = test_class
+ else:
+ clazz = get_package_name(package_prefixes) + name
+
+ java_test(
+ name = name,
+ main_class = "com.github.bazel_contrib.contrib_rules_jvm.junit5.JUnit5Runner",
+ test_class = clazz,
+ runtime_deps = runtime_deps + [
+ "@contrib_rules_jvm//java/src/com/github/bazel_contrib/contrib_rules_jvm/junit5",
+ ],
+ jvm_flags = jvm_flags + ["-Djava.security.manager=allow"],
+ **kwargs
+ )
+
+ return name
diff --git a/java/private/selenium_test.bzl b/java/private/selenium_test.bzl
index e381712ef5d38..127285f82b087 100644
--- a/java/private/selenium_test.bzl
+++ b/java/private/selenium_test.bzl
@@ -1,4 +1,3 @@
-load("@contrib_rules_jvm//java:defs.bzl", "java_junit5_test")
load(
"//common:browsers.bzl",
"COMMON_TAGS",
@@ -16,6 +15,7 @@ load(
"firefox_dev_jvm_flags",
"firefox_jvm_flags",
)
+load(":junit5_test.bzl", "junit5_test")
DEFAULT_BROWSER = "firefox"
@@ -105,7 +105,7 @@ def selenium_test(name, test_class, size = "medium", browsers = DEFAULT_BROWSERS
test = name if browser == default_browser else "%s-%s" % (name, browser)
- java_junit5_test(
+ junit5_test(
name = test,
test_class = test_class,
size = size,
@@ -124,7 +124,7 @@ def selenium_test(name, test_class, size = "medium", browsers = DEFAULT_BROWSERS
all_tests.append(":%s" % test)
if remote:
- java_junit5_test(
+ junit5_test(
name = "%s-remote" % test,
test_class = test_class,
size = size,
diff --git a/java/private/suite.bzl b/java/private/suite.bzl
index 9f233eec0b42d..7655493cab23c 100644
--- a/java/private/suite.bzl
+++ b/java/private/suite.bzl
@@ -1,6 +1,6 @@
load(":library.bzl", "java_library", "java_test")
-load(":selenium_test.bzl", "BROWSERS", "selenium_test")
load(":package.bzl", "package_name")
+load(":selenium_test.bzl", "BROWSERS", "selenium_test")
_test_attrs = [
"browsers",
diff --git a/java/spotbugs-excludes.xml b/java/spotbugs-excludes.xml
index 26c908dffa18e..979a69248dad9 100644
--- a/java/spotbugs-excludes.xml
+++ b/java/spotbugs-excludes.xml
@@ -145,11 +145,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -165,6 +180,11 @@
+
+
+
+
+
diff --git a/java/src/org/openqa/selenium/Capabilities.java b/java/src/org/openqa/selenium/Capabilities.java
index 4a5fe4361e076..683e5e4e41b7d 100644
--- a/java/src/org/openqa/selenium/Capabilities.java
+++ b/java/src/org/openqa/selenium/Capabilities.java
@@ -77,8 +77,7 @@ default String getBrowserVersion() {
default boolean is(String capabilityName) {
Object cap = getCapability(capabilityName);
if (cap == null) {
- // If it's not set explicitly, javascriptEnabled is true.
- return "javascriptEnabled".equals(capabilityName);
+ return false;
}
return cap instanceof Boolean ? (Boolean) cap : Boolean.parseBoolean(String.valueOf(cap));
}
diff --git a/java/src/org/openqa/selenium/bidi/Connection.java b/java/src/org/openqa/selenium/bidi/Connection.java
index b4f46bbbe7a93..bc9f580824b87 100644
--- a/java/src/org/openqa/selenium/bidi/Connection.java
+++ b/java/src/org/openqa/selenium/bidi/Connection.java
@@ -36,6 +36,7 @@
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
@@ -72,6 +73,7 @@ public class Connection implements Closeable {
private final ReadWriteLock callbacksLock = new ReentrantReadWriteLock(true);
private final Multimap, Consumer>> eventCallbacks = HashMultimap.create();
private final HttpClient client;
+ private final AtomicBoolean underlyingSocketClosed;
public Connection(HttpClient client, String url) {
Require.nonNull("HTTP client", client);
@@ -79,6 +81,7 @@ public Connection(HttpClient client, String url) {
this.client = client;
socket = this.client.openSocket(new HttpRequest(GET, url), new Listener());
+ underlyingSocketClosed = new AtomicBoolean();
}
private static class NamedConsumer implements Consumer {
@@ -210,7 +213,14 @@ public void clearListeners() {
List events =
eventCallbacks.keySet().stream().map(Event::getMethod).collect(Collectors.toList());
- send(new Command<>("session.unsubscribe", ImmutableMap.of("events", events)));
+ // If WebDriver close() is called, it closes the session if it is the last browsing context.
+ // It also closes the WebSocket from the remote end.
+ // If we try to now send commands, depending on the underlying web socket implementation, it
+ // will throw errors.
+ // Ideally, such errors should not prevent freeing up resources.
+ if (!underlyingSocketClosed.get()) {
+ send(new Command<>("session.unsubscribe", ImmutableMap.of("events", events)));
+ }
eventCallbacks.clear();
} finally {
@@ -237,6 +247,12 @@ public void onText(CharSequence data) {
}
});
}
+
+ @Override
+ public void onClose(int code, String reason) {
+ LOG.fine("BiDi connection websocket closed");
+ underlyingSocketClosed.set(true);
+ }
}
private void handle(CharSequence data) {
diff --git a/java/src/org/openqa/selenium/bidi/browsingcontext/BrowsingContext.java b/java/src/org/openqa/selenium/bidi/browsingcontext/BrowsingContext.java
index 19e1c54ecf35c..200c60987f49a 100644
--- a/java/src/org/openqa/selenium/bidi/browsingcontext/BrowsingContext.java
+++ b/java/src/org/openqa/selenium/bidi/browsingcontext/BrowsingContext.java
@@ -226,6 +226,68 @@ public String captureScreenshot() {
}));
}
+ public String captureBoxScreenshot(double x, double y, double width, double height) {
+ return this.bidi.send(
+ new Command<>(
+ "browsingContext.captureScreenshot",
+ ImmutableMap.of(
+ CONTEXT,
+ id,
+ "clip",
+ ImmutableMap.of(
+ "type", "viewport",
+ "x", x,
+ "y", y,
+ "width", width,
+ "height", height)),
+ jsonInput -> {
+ Map result = jsonInput.read(Map.class);
+ return (String) result.get("data");
+ }));
+ }
+
+ public String captureElementScreenshot(String elementId) {
+ return this.bidi.send(
+ new Command<>(
+ "browsingContext.captureScreenshot",
+ ImmutableMap.of(
+ CONTEXT,
+ id,
+ "clip",
+ ImmutableMap.of(
+ "type",
+ "element",
+ "element",
+ ImmutableMap.of("sharedId", elementId),
+ "scrollIntoView",
+ false)),
+ jsonInput -> {
+ Map result = jsonInput.read(Map.class);
+ return (String) result.get("data");
+ }));
+ }
+
+ public String captureElementScreenshot(String elementId, boolean scrollIntoView) {
+ return this.bidi.send(
+ new Command<>(
+ "browsingContext.captureScreenshot",
+ ImmutableMap.of(
+ CONTEXT,
+ id,
+ "clip",
+ ImmutableMap.of(
+ "type",
+ "element",
+ "element",
+ ImmutableMap.of("sharedId", elementId),
+ "scrollIntoView",
+ scrollIntoView)),
+ jsonInput -> {
+ Map result = jsonInput.read(Map.class);
+ return (String) result.get("data");
+ }));
+ }
+
public void close() {
// This might need more clean up actions once the behavior is defined.
// Specially when last tab or window is closed.
diff --git a/java/src/org/openqa/selenium/chrome/ChromeDriverInfo.java b/java/src/org/openqa/selenium/chrome/ChromeDriverInfo.java
index d1e8ed0ba2026..2378ccee1b4ad 100644
--- a/java/src/org/openqa/selenium/chrome/ChromeDriverInfo.java
+++ b/java/src/org/openqa/selenium/chrome/ChromeDriverInfo.java
@@ -20,8 +20,6 @@
import static org.openqa.selenium.remote.Browser.CHROME;
import com.google.auto.service.AutoService;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import java.util.Optional;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ImmutableCapabilities;
@@ -43,17 +41,6 @@ public String getDisplayName() {
@Override
public Capabilities getCanonicalCapabilities() {
- if (!"jdk-http-client".equalsIgnoreCase(System.getProperty("webdriver.http.factory", ""))) {
- // Allowing any origin "*" through remote-allow-origins might sound risky but an attacker
- // would need to know the port used to start DevTools to establish a connection. Given
- // these sessions are relatively short-lived, the risk is reduced. Only set when the Java
- // 11 client is not used.
- return new ImmutableCapabilities(
- CapabilityType.BROWSER_NAME,
- CHROME.browserName(),
- ChromeOptions.CAPABILITY,
- ImmutableMap.of("args", ImmutableList.of("--remote-allow-origins=*")));
- }
return new ImmutableCapabilities(CapabilityType.BROWSER_NAME, CHROME.browserName());
}
diff --git a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java
index 14e1464d92d93..6846aedfc618c 100644
--- a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java
+++ b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java
@@ -76,13 +76,6 @@ public class ChromiumOptions>
public ChromiumOptions(String capabilityType, String browserType, String capability) {
this.capabilityName = capability;
setCapability(capabilityType, browserType);
- if (!"jdk-http-client".equalsIgnoreCase(System.getProperty("webdriver.http.factory", ""))) {
- // Allowing any origin "*" might sound risky but an attacker would need to know
- // the port used to start DevTools to establish a connection. Given these sessions
- // are relatively short-lived, the risk is reduced. Only set when the Java 11 client
- // is not used.
- addArguments("--remote-allow-origins=*");
- }
}
/**
diff --git a/java/src/org/openqa/selenium/devtools/CdpVersionFinder.java b/java/src/org/openqa/selenium/devtools/CdpVersionFinder.java
index 110d776104fdd..b2494e640af94 100644
--- a/java/src/org/openqa/selenium/devtools/CdpVersionFinder.java
+++ b/java/src/org/openqa/selenium/devtools/CdpVersionFinder.java
@@ -146,8 +146,9 @@ private Optional findNearestMatch(int version) {
} else {
LOG.log(
Level.WARNING,
- "Unable to find an exact match for CDP version {0}, so returning the closest version"
- + " found: {1}",
+ "Unable to find an exact match for CDP version {0}, returning the closest version; "
+ + "found: {1}; "
+ + "Please update to a Selenium version that supports CDP version {0}",
new Object[] {version, nearestMatch.getMajorVersion()});
}
diff --git a/java/src/org/openqa/selenium/devtools/v115/BUILD.bazel b/java/src/org/openqa/selenium/devtools/v118/BUILD.bazel
similarity index 98%
rename from java/src/org/openqa/selenium/devtools/v115/BUILD.bazel
rename to java/src/org/openqa/selenium/devtools/v118/BUILD.bazel
index 62fb997f9fd2c..1d57c53faf929 100644
--- a/java/src/org/openqa/selenium/devtools/v115/BUILD.bazel
+++ b/java/src/org/openqa/selenium/devtools/v118/BUILD.bazel
@@ -3,7 +3,7 @@ load("//common:defs.bzl", "copy_file")
load("//java:defs.bzl", "java_export", "java_library")
load("//java:version.bzl", "SE_VERSION")
-cdp_version = "v115"
+cdp_version = "v118"
java_export(
name = cdp_version,
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115CdpInfo.java b/java/src/org/openqa/selenium/devtools/v118/v118CdpInfo.java
similarity index 86%
rename from java/src/org/openqa/selenium/devtools/v115/v115CdpInfo.java
rename to java/src/org/openqa/selenium/devtools/v118/v118CdpInfo.java
index 4ed7b73d47efc..5266ef6626e21 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115CdpInfo.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118CdpInfo.java
@@ -15,15 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import com.google.auto.service.AutoService;
import org.openqa.selenium.devtools.CdpInfo;
@AutoService(CdpInfo.class)
-public class v115CdpInfo extends CdpInfo {
+public class v118CdpInfo extends CdpInfo {
- public v115CdpInfo() {
- super(115, v115Domains::new);
+ public v118CdpInfo() {
+ super(118, v118Domains::new);
}
}
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Domains.java b/java/src/org/openqa/selenium/devtools/v118/v118Domains.java
similarity index 77%
rename from java/src/org/openqa/selenium/devtools/v115/v115Domains.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Domains.java
index 43525847eab61..0985ae1ce9860 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Domains.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Domains.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.idealized.Domains;
@@ -26,21 +26,21 @@
import org.openqa.selenium.devtools.idealized.target.Target;
import org.openqa.selenium.internal.Require;
-public class v115Domains implements Domains {
+public class v118Domains implements Domains {
- private final v115Javascript js;
- private final v115Events events;
- private final v115Log log;
- private final v115Network network;
- private final v115Target target;
+ private final v118Javascript js;
+ private final v118Events events;
+ private final v118Log log;
+ private final v118Network network;
+ private final v118Target target;
- public v115Domains(DevTools devtools) {
+ public v118Domains(DevTools devtools) {
Require.nonNull("DevTools", devtools);
- events = new v115Events(devtools);
- js = new v115Javascript(devtools);
- log = new v115Log();
- network = new v115Network(devtools);
- target = new v115Target();
+ events = new v118Events(devtools);
+ js = new v118Javascript(devtools);
+ log = new v118Log();
+ network = new v118Network(devtools);
+ target = new v118Target();
}
@Override
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Events.java b/java/src/org/openqa/selenium/devtools/v118/v118Events.java
similarity index 86%
rename from java/src/org/openqa/selenium/devtools/v115/v115Events.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Events.java
index d9af58b1ccaca..d0793160edf10 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Events.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Events.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import com.google.common.collect.ImmutableList;
import java.time.Instant;
@@ -28,15 +28,15 @@
import org.openqa.selenium.devtools.events.ConsoleEvent;
import org.openqa.selenium.devtools.idealized.Events;
import org.openqa.selenium.devtools.idealized.runtime.model.RemoteObject;
-import org.openqa.selenium.devtools.v115.runtime.Runtime;
-import org.openqa.selenium.devtools.v115.runtime.model.ConsoleAPICalled;
-import org.openqa.selenium.devtools.v115.runtime.model.ExceptionDetails;
-import org.openqa.selenium.devtools.v115.runtime.model.ExceptionThrown;
-import org.openqa.selenium.devtools.v115.runtime.model.StackTrace;
+import org.openqa.selenium.devtools.v118.runtime.Runtime;
+import org.openqa.selenium.devtools.v118.runtime.model.ConsoleAPICalled;
+import org.openqa.selenium.devtools.v118.runtime.model.ExceptionDetails;
+import org.openqa.selenium.devtools.v118.runtime.model.ExceptionThrown;
+import org.openqa.selenium.devtools.v118.runtime.model.StackTrace;
-public class v115Events extends Events {
+public class v118Events extends Events {
- public v115Events(DevTools devtools) {
+ public v118Events(DevTools devtools) {
super(devtools);
}
@@ -77,7 +77,7 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {
protected JavascriptException toJsException(ExceptionThrown event) {
ExceptionDetails details = event.getExceptionDetails();
Optional maybeTrace = details.getStackTrace();
- Optional maybeException =
+ Optional maybeException =
details.getException();
String message =
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Javascript.java b/java/src/org/openqa/selenium/devtools/v118/v118Javascript.java
similarity index 81%
rename from java/src/org/openqa/selenium/devtools/v115/v115Javascript.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Javascript.java
index 11cf74a0928b4..987e170321645 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Javascript.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Javascript.java
@@ -15,21 +15,21 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import java.util.Optional;
import org.openqa.selenium.devtools.Command;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.Event;
import org.openqa.selenium.devtools.idealized.Javascript;
-import org.openqa.selenium.devtools.v115.page.Page;
-import org.openqa.selenium.devtools.v115.page.model.ScriptIdentifier;
-import org.openqa.selenium.devtools.v115.runtime.Runtime;
-import org.openqa.selenium.devtools.v115.runtime.model.BindingCalled;
+import org.openqa.selenium.devtools.v118.page.Page;
+import org.openqa.selenium.devtools.v118.page.model.ScriptIdentifier;
+import org.openqa.selenium.devtools.v118.runtime.Runtime;
+import org.openqa.selenium.devtools.v118.runtime.model.BindingCalled;
-public class v115Javascript extends Javascript {
+public class v118Javascript extends Javascript {
- public v115Javascript(DevTools devtools) {
+ public v118Javascript(DevTools devtools) {
super(devtools);
}
@@ -65,7 +65,8 @@ protected Command disablePage() {
@Override
protected Command addScriptToEvaluateOnNewDocument(String script) {
- return Page.addScriptToEvaluateOnNewDocument(script, Optional.empty(), Optional.empty());
+ return Page.addScriptToEvaluateOnNewDocument(
+ script, Optional.empty(), Optional.empty(), Optional.empty());
}
@Override
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Log.java b/java/src/org/openqa/selenium/devtools/v118/v118Log.java
similarity index 89%
rename from java/src/org/openqa/selenium/devtools/v115/v115Log.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Log.java
index 0ae650a2288da..b7eb6a55e423f 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Log.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Log.java
@@ -15,19 +15,19 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import java.util.function.Function;
import java.util.logging.Level;
import org.openqa.selenium.devtools.Command;
import org.openqa.selenium.devtools.ConverterFunctions;
import org.openqa.selenium.devtools.Event;
-import org.openqa.selenium.devtools.v115.log.Log;
-import org.openqa.selenium.devtools.v115.log.model.LogEntry;
-import org.openqa.selenium.devtools.v115.runtime.model.Timestamp;
+import org.openqa.selenium.devtools.v118.log.Log;
+import org.openqa.selenium.devtools.v118.log.model.LogEntry;
+import org.openqa.selenium.devtools.v118.runtime.model.Timestamp;
import org.openqa.selenium.json.JsonInput;
-public class v115Log implements org.openqa.selenium.devtools.idealized.log.Log {
+public class v118Log implements org.openqa.selenium.devtools.idealized.log.Log {
@Override
public Command enable() {
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Network.java b/java/src/org/openqa/selenium/devtools/v118/v118Network.java
similarity index 90%
rename from java/src/org/openqa/selenium/devtools/v115/v115Network.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Network.java
index d7b89012207f4..332335374402d 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Network.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Network.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import static java.net.HttpURLConnection.HTTP_OK;
@@ -24,12 +24,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
import java.util.logging.Logger;
import org.openqa.selenium.UsernameAndPassword;
import org.openqa.selenium.devtools.Command;
@@ -37,35 +32,35 @@
import org.openqa.selenium.devtools.DevToolsException;
import org.openqa.selenium.devtools.Event;
import org.openqa.selenium.devtools.idealized.Network;
-import org.openqa.selenium.devtools.v115.fetch.Fetch;
-import org.openqa.selenium.devtools.v115.fetch.model.*;
-import org.openqa.selenium.devtools.v115.network.model.Request;
+import org.openqa.selenium.devtools.v118.fetch.Fetch;
+import org.openqa.selenium.devtools.v118.fetch.model.*;
+import org.openqa.selenium.devtools.v118.network.model.Request;
import org.openqa.selenium.internal.Either;
import org.openqa.selenium.remote.http.HttpRequest;
import org.openqa.selenium.remote.http.HttpResponse;
-public class v115Network extends Network {
+public class v118Network extends Network {
- private static final Logger LOG = Logger.getLogger(v115Network.class.getName());
+ private static final Logger LOG = Logger.getLogger(v118Network.class.getName());
- public v115Network(DevTools devTools) {
+ public v118Network(DevTools devTools) {
super(devTools);
}
@Override
protected Command setUserAgentOverride(UserAgent userAgent) {
- return org.openqa.selenium.devtools.v115.network.Network.setUserAgentOverride(
+ return org.openqa.selenium.devtools.v118.network.Network.setUserAgentOverride(
userAgent.userAgent(), userAgent.acceptLanguage(), userAgent.platform(), Optional.empty());
}
@Override
protected Command enableNetworkCaching() {
- return org.openqa.selenium.devtools.v115.network.Network.setCacheDisabled(false);
+ return org.openqa.selenium.devtools.v118.network.Network.setCacheDisabled(false);
}
@Override
protected Command disableNetworkCaching() {
- return org.openqa.selenium.devtools.v115.network.Network.setCacheDisabled(true);
+ return org.openqa.selenium.devtools.v118.network.Network.setCacheDisabled(true);
}
@Override
diff --git a/java/src/org/openqa/selenium/devtools/v115/v115Target.java b/java/src/org/openqa/selenium/devtools/v118/v118Target.java
similarity index 83%
rename from java/src/org/openqa/selenium/devtools/v115/v115Target.java
rename to java/src/org/openqa/selenium/devtools/v118/v118Target.java
index e0b9592188431..df52150eb5533 100644
--- a/java/src/org/openqa/selenium/devtools/v115/v115Target.java
+++ b/java/src/org/openqa/selenium/devtools/v118/v118Target.java
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-package org.openqa.selenium.devtools.v115;
+package org.openqa.selenium.devtools.v118;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -28,21 +28,21 @@
import org.openqa.selenium.devtools.idealized.browser.model.BrowserContextID;
import org.openqa.selenium.devtools.idealized.target.model.SessionID;
import org.openqa.selenium.devtools.idealized.target.model.TargetID;
-import org.openqa.selenium.devtools.v115.target.Target;
-import org.openqa.selenium.devtools.v115.target.model.TargetInfo;
+import org.openqa.selenium.devtools.v118.target.Target;
+import org.openqa.selenium.devtools.v118.target.model.TargetInfo;
import org.openqa.selenium.json.JsonInput;
import org.openqa.selenium.json.TypeToken;
-public class v115Target implements org.openqa.selenium.devtools.idealized.target.Target {
+public class v118Target implements org.openqa.selenium.devtools.idealized.target.Target {
@Override
public Command detachFromTarget(
Optional sessionId, Optional targetId) {
return Target.detachFromTarget(
sessionId.map(
- id -> new org.openqa.selenium.devtools.v115.target.model.SessionID(id.toString())),
+ id -> new org.openqa.selenium.devtools.v118.target.model.SessionID(id.toString())),
targetId.map(
- id -> new org.openqa.selenium.devtools.v115.target.model.TargetID(id.toString())));
+ id -> new org.openqa.selenium.devtools.v118.target.model.TargetID(id.toString())));
}
@Override
@@ -74,19 +74,19 @@ public Command detachFromTarget(
@Override
public Command attachToTarget(TargetID targetId) {
- Function mapper =
+ Function mapper =
ConverterFunctions.map(
- "sessionId", org.openqa.selenium.devtools.v115.target.model.SessionID.class);
+ "sessionId", org.openqa.selenium.devtools.v118.target.model.SessionID.class);
return new Command<>(
"Target.attachToTarget",
ImmutableMap.of(
"targetId",
- new org.openqa.selenium.devtools.v115.target.model.TargetID(targetId.toString()),
+ new org.openqa.selenium.devtools.v118.target.model.TargetID(targetId.toString()),
"flatten",
true),
input -> {
- org.openqa.selenium.devtools.v115.target.model.SessionID id = mapper.apply(input);
+ org.openqa.selenium.devtools.v118.target.model.SessionID id = mapper.apply(input);
return new SessionID(id.toString());
});
}
@@ -101,9 +101,9 @@ public Event detached() {
return new Event<>(
"Target.detachedFromTarget",
input -> {
- Function converter =
+ Function converter =
ConverterFunctions.map(
- "targetId", org.openqa.selenium.devtools.v115.target.model.TargetID.class);
+ "targetId", org.openqa.selenium.devtools.v118.target.model.TargetID.class);
return new TargetID(converter.apply(input).toString());
});
}
diff --git a/java/src/org/openqa/selenium/devtools/versions.bzl b/java/src/org/openqa/selenium/devtools/versions.bzl
index 7749e728628fa..98dd41bc8fa74 100644
--- a/java/src/org/openqa/selenium/devtools/versions.bzl
+++ b/java/src/org/openqa/selenium/devtools/versions.bzl
@@ -1,8 +1,8 @@
CDP_VERSIONS = [
"v85", # Required by Firefox
- "v115",
"v116",
"v117",
+ "v118",
]
CDP_DEPS = ["//java/src/org/openqa/selenium/devtools/%s" % v for v in CDP_VERSIONS]
diff --git a/java/src/org/openqa/selenium/edge/EdgeDriverInfo.java b/java/src/org/openqa/selenium/edge/EdgeDriverInfo.java
index 2d3f74af50126..da23e005cf6b4 100644
--- a/java/src/org/openqa/selenium/edge/EdgeDriverInfo.java
+++ b/java/src/org/openqa/selenium/edge/EdgeDriverInfo.java
@@ -20,8 +20,6 @@
import static org.openqa.selenium.remote.Browser.EDGE;
import com.google.auto.service.AutoService;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import java.util.Optional;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ImmutableCapabilities;
@@ -43,17 +41,6 @@ public String getDisplayName() {
@Override
public Capabilities getCanonicalCapabilities() {
- if (!"jdk-http-client".equalsIgnoreCase(System.getProperty("webdriver.http.factory", ""))) {
- // Allowing any origin "*" through remote-allow-origins might sound risky but an attacker
- // would need to know the port used to start DevTools to establish a connection. Given
- // these sessions are relatively short-lived, the risk is reduced. Only set when the Java
- // 11 client is not used.
- return new ImmutableCapabilities(
- CapabilityType.BROWSER_NAME,
- EDGE.browserName(),
- EdgeOptions.CAPABILITY,
- ImmutableMap.of("args", ImmutableList.of("--remote-allow-origins=*")));
- }
return new ImmutableCapabilities(CapabilityType.BROWSER_NAME, EDGE.browserName());
}
diff --git a/java/src/org/openqa/selenium/grid/BUILD.bazel b/java/src/org/openqa/selenium/grid/BUILD.bazel
index 4c30d21144552..e61f15f4f3399 100644
--- a/java/src/org/openqa/selenium/grid/BUILD.bazel
+++ b/java/src/org/openqa/selenium/grid/BUILD.bazel
@@ -110,7 +110,6 @@ maven_bom(
"//java/src/org/openqa/selenium/json:json",
"//java/src/org/openqa/selenium/lift:lift",
"//java/src/org/openqa/selenium/manager:manager",
- "//java/src/org/openqa/selenium/remote/http/jdk:jdk",
"//java/src/org/openqa/selenium/remote/http:http",
"//java/src/org/openqa/selenium/remote:remote",
"//java/src/org/openqa/selenium/safari:safari",
diff --git a/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java b/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java
index 3b147de61b429..7d4c5de871d8b 100644
--- a/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java
+++ b/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java
@@ -45,6 +45,7 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -107,8 +108,7 @@
import org.openqa.selenium.remote.SessionId;
import org.openqa.selenium.remote.http.HttpClient;
import org.openqa.selenium.remote.tracing.AttributeKey;
-import org.openqa.selenium.remote.tracing.EventAttribute;
-import org.openqa.selenium.remote.tracing.EventAttributeValue;
+import org.openqa.selenium.remote.tracing.AttributeMap;
import org.openqa.selenium.remote.tracing.Span;
import org.openqa.selenium.remote.tracing.Status;
import org.openqa.selenium.remote.tracing.Tracer;
@@ -380,8 +380,9 @@ private void updateNodeStatus(NodeStatus status, Runnable healthCheck) {
.build();
LOG.log(getDebugLogLevel(), "Running health check for Node " + status.getExternalUri());
- Executors.newSingleThreadExecutor()
- .submit(() -> Failsafe.with(initialHealthCheckPolicy).run(healthCheck::run));
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ executor.submit(() -> Failsafe.with(initialHealthCheckPolicy).run(healthCheck::run));
+ executor.shutdown();
}
}
@@ -509,13 +510,11 @@ public Either newSession(
Require.nonNull("Requests to process", request);
Span span = tracer.getCurrentContext().createSpan("distributor.new_session");
- Map attributeMap = new HashMap<>();
+ AttributeMap attributeMap = tracer.createAttributeMap();
try {
- attributeMap.put(
- AttributeKey.LOGGER_CLASS.getKey(), EventAttribute.setValue(getClass().getName()));
+ attributeMap.put(AttributeKey.LOGGER_CLASS.getKey(), getClass().getName());
- attributeMap.put(
- "request.payload", EventAttribute.setValue(request.getDesiredCapabilities().toString()));
+ attributeMap.put("request.payload", request.getDesiredCapabilities().toString());
String sessionReceivedMessage = "Session request received by the Distributor";
span.addEvent(sessionReceivedMessage, attributeMap);
LOG.info(
@@ -528,8 +527,7 @@ public Either newSession(
EXCEPTION.accept(attributeMap, exception);
attributeMap.put(
AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue(
- "Unable to create session. No capabilities found: " + exception.getMessage()));
+ "Unable to create session. No capabilities found: " + exception.getMessage());
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
return Either.left(exception);
}
@@ -574,7 +572,7 @@ public Either newSession(
SESSION_ID_EVENT.accept(attributeMap, sessionId);
CAPABILITIES_EVENT.accept(attributeMap, sessionCaps);
span.setAttribute(SESSION_URI.getKey(), sessionUri);
- attributeMap.put(SESSION_URI.getKey(), EventAttribute.setValue(sessionUri));
+ attributeMap.put(SESSION_URI.getKey(), sessionUri);
String sessionCreatedMessage = "Session created by the Distributor";
span.addEvent(sessionCreatedMessage, attributeMap);
@@ -596,13 +594,13 @@ public Either newSession(
"Will re-attempt to find a node which can run this session", lastFailure);
attributeMap.put(
AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue("Will retry session " + request.getRequestId()));
+ "Will retry session " + request.getRequestId());
} else {
EXCEPTION.accept(attributeMap, lastFailure);
attributeMap.put(
AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue("Unable to create session: " + lastFailure.getMessage()));
+ "Unable to create session: " + lastFailure.getMessage());
}
span.setAttribute(AttributeKey.ERROR.getKey(), true);
span.setStatus(Status.ABORTED);
@@ -614,8 +612,7 @@ public Either newSession(
EXCEPTION.accept(attributeMap, e);
attributeMap.put(
- AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue("Unable to create session: " + e.getMessage()));
+ AttributeKey.EXCEPTION_MESSAGE.getKey(), "Unable to create session: " + e.getMessage());
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
return Either.left(e);
@@ -626,8 +623,7 @@ public Either newSession(
EXCEPTION.accept(attributeMap, e);
attributeMap.put(
AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue(
- "Unknown error in LocalDistributor while creating session: " + e.getMessage()));
+ "Unknown error in LocalDistributor while creating session: " + e.getMessage());
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
return Either.left(new SessionNotCreatedException(e.getMessage(), e));
@@ -817,14 +813,12 @@ private void handleNewSessionRequest(SessionRequest sessionRequest) {
try (Span span =
TraceSessionRequest.extract(tracer, sessionRequest)
.createSpan("distributor.poll_queue")) {
- Map attributeMap = new HashMap<>();
- attributeMap.put(
- AttributeKey.LOGGER_CLASS.getKey(), EventAttribute.setValue(getClass().getName()));
+ AttributeMap attributeMap = tracer.createAttributeMap();
+ attributeMap.put(AttributeKey.LOGGER_CLASS.getKey(), getClass().getName());
span.setAttribute(AttributeKey.REQUEST_ID.getKey(), reqId.toString());
- attributeMap.put(
- AttributeKey.REQUEST_ID.getKey(), EventAttribute.setValue(reqId.toString()));
+ attributeMap.put(AttributeKey.REQUEST_ID.getKey(), reqId.toString());
- attributeMap.put("request", EventAttribute.setValue(sessionRequest.toString()));
+ attributeMap.put("request", sessionRequest.toString());
Either response =
newSession(sessionRequest);
@@ -834,7 +828,7 @@ private void handleNewSessionRequest(SessionRequest sessionRequest) {
Debug.getDebugLogLevel(), "Retrying {0}", sessionRequest.getDesiredCapabilities());
boolean retried = sessionQueue.retryAddToQueue(sessionRequest);
- attributeMap.put("request.retry_add", EventAttribute.setValue(retried));
+ attributeMap.put("request.retry_add", retried);
childSpan.addEvent("Retry adding to front of queue. No slot available.", attributeMap);
if (retried) {
diff --git a/java/src/org/openqa/selenium/grid/graphql/GraphqlHandler.java b/java/src/org/openqa/selenium/grid/graphql/GraphqlHandler.java
index fda8333ae9386..aa998ed234e72 100644
--- a/java/src/org/openqa/selenium/grid/graphql/GraphqlHandler.java
+++ b/java/src/org/openqa/selenium/grid/graphql/GraphqlHandler.java
@@ -55,8 +55,7 @@
import org.openqa.selenium.remote.http.HttpRequest;
import org.openqa.selenium.remote.http.HttpResponse;
import org.openqa.selenium.remote.tracing.AttributeKey;
-import org.openqa.selenium.remote.tracing.EventAttribute;
-import org.openqa.selenium.remote.tracing.EventAttributeValue;
+import org.openqa.selenium.remote.tracing.AttributeMap;
import org.openqa.selenium.remote.tracing.Span;
import org.openqa.selenium.remote.tracing.Status;
import org.openqa.selenium.remote.tracing.Tracer;
@@ -120,9 +119,8 @@ public HttpResponse execute(HttpRequest req) throws UncheckedIOException {
HttpResponse response;
Map inputs = JSON.toType(Contents.string(req), MAP_TYPE);
- Map attributeMap = new HashMap<>();
- attributeMap.put(
- AttributeKey.LOGGER_CLASS.getKey(), EventAttribute.setValue(getClass().getName()));
+ AttributeMap attributeMap = tracer.createAttributeMap();
+ attributeMap.put(AttributeKey.LOGGER_CLASS.getKey(), getClass().getName());
HTTP_REQUEST.accept(span, req);
HTTP_REQUEST_EVENT.accept(attributeMap, req);
@@ -136,9 +134,7 @@ public HttpResponse execute(HttpRequest req) throws UncheckedIOException {
HTTP_RESPONSE.accept(span, response);
HTTP_RESPONSE_EVENT.accept(attributeMap, response);
- attributeMap.put(
- AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue("Unable to find query"));
+ attributeMap.put(AttributeKey.EXCEPTION_MESSAGE.getKey(), "Unable to find query");
span.setAttribute(AttributeKey.ERROR.getKey(), true);
span.setStatus(Status.NOT_FOUND);
@@ -178,9 +174,7 @@ public HttpResponse execute(HttpRequest req) throws UncheckedIOException {
HTTP_RESPONSE.accept(span, response);
HTTP_RESPONSE_EVENT.accept(attributeMap, response);
- attributeMap.put(
- AttributeKey.EXCEPTION_MESSAGE.getKey(),
- EventAttribute.setValue("Error while executing the query"));
+ attributeMap.put(AttributeKey.EXCEPTION_MESSAGE.getKey(), "Error while executing the query");
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
span.setAttribute(AttributeKey.ERROR.getKey(), true);
diff --git a/java/src/org/openqa/selenium/grid/node/config/DriverServiceSessionFactory.java b/java/src/org/openqa/selenium/grid/node/config/DriverServiceSessionFactory.java
index 3e41aaecce458..3525844462e51 100644
--- a/java/src/org/openqa/selenium/grid/node/config/DriverServiceSessionFactory.java
+++ b/java/src/org/openqa/selenium/grid/node/config/DriverServiceSessionFactory.java
@@ -64,8 +64,7 @@
import org.openqa.selenium.remote.service.DriverFinder;
import org.openqa.selenium.remote.service.DriverService;
import org.openqa.selenium.remote.tracing.AttributeKey;
-import org.openqa.selenium.remote.tracing.EventAttribute;
-import org.openqa.selenium.remote.tracing.EventAttributeValue;
+import org.openqa.selenium.remote.tracing.AttributeMap;
import org.openqa.selenium.remote.tracing.Span;
import org.openqa.selenium.remote.tracing.Status;
import org.openqa.selenium.remote.tracing.Tracer;
@@ -121,7 +120,7 @@ public Either apply(CreateSessionRequest sess
}
Span span = tracer.getCurrentContext().createSpan("driver_service_factory.apply");
- Map attributeMap = new HashMap<>();
+ AttributeMap attributeMap = tracer.createAttributeMap();
try {
Capabilities capabilities =
@@ -129,8 +128,7 @@ public Either apply(CreateSessionRequest sess
CAPABILITIES.accept(span, capabilities);
CAPABILITIES_EVENT.accept(attributeMap, capabilities);
- attributeMap.put(
- AttributeKey.LOGGER_CLASS.getKey(), EventAttribute.setValue(this.getClass().getName()));
+ attributeMap.put(AttributeKey.LOGGER_CLASS.getKey(), this.getClass().getName());
DriverService service = builder.build();
if (service.getExecutable() == null) {
@@ -155,8 +153,7 @@ public Either apply(CreateSessionRequest sess
service.start();
URL serviceURL = service.getUrl();
- attributeMap.put(
- AttributeKey.DRIVER_URL.getKey(), EventAttribute.setValue(serviceURL.toString()));
+ attributeMap.put(AttributeKey.DRIVER_URL.getKey(), serviceURL.toString());
ClientConfig clientConfig =
ClientConfig.defaultConfig().readTimeout(sessionTimeout).baseUrl(serviceURL);
@@ -175,13 +172,9 @@ public Either apply(CreateSessionRequest sess
Response response = result.createResponse();
- attributeMap.put(
- AttributeKey.UPSTREAM_DIALECT.getKey(), EventAttribute.setValue(upstream.toString()));
- attributeMap.put(
- AttributeKey.DOWNSTREAM_DIALECT.getKey(),
- EventAttribute.setValue(downstream.toString()));
- attributeMap.put(
- AttributeKey.DRIVER_RESPONSE.getKey(), EventAttribute.setValue(response.toString()));
+ attributeMap.put(AttributeKey.UPSTREAM_DIALECT.getKey(), upstream.toString());
+ attributeMap.put(AttributeKey.DOWNSTREAM_DIALECT.getKey(), downstream.toString());
+ attributeMap.put(AttributeKey.DRIVER_RESPONSE.getKey(), response.toString());
Capabilities caps = new ImmutableCapabilities((Map, ?>) response.getValue());
if (platformName.isPresent()) {
@@ -226,8 +219,7 @@ public void stop() {
+ e.getMessage();
LOG.warning(errorMessage);
- attributeMap.put(
- AttributeKey.EXCEPTION_MESSAGE.getKey(), EventAttribute.setValue(errorMessage));
+ attributeMap.put(AttributeKey.EXCEPTION_MESSAGE.getKey(), errorMessage);
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
service.stop();
return Either.left(new SessionNotCreatedException(errorMessage));
@@ -240,8 +232,7 @@ public void stop() {
"Error while creating session with the driver service. " + e.getMessage();
LOG.warning(errorMessage);
- attributeMap.put(
- AttributeKey.EXCEPTION_MESSAGE.getKey(), EventAttribute.setValue(errorMessage));
+ attributeMap.put(AttributeKey.EXCEPTION_MESSAGE.getKey(), errorMessage);
span.addEvent(AttributeKey.EXCEPTION_EVENT.getKey(), attributeMap);
return Either.left(new SessionNotCreatedException(e.getMessage()));
diff --git a/java/src/org/openqa/selenium/grid/node/config/NodeOptions.java b/java/src/org/openqa/selenium/grid/node/config/NodeOptions.java
index a174b22d22bc2..c7e45b6631e06 100644
--- a/java/src/org/openqa/selenium/grid/node/config/NodeOptions.java
+++ b/java/src/org/openqa/selenium/grid/node/config/NodeOptions.java
@@ -349,51 +349,50 @@ private void addDriverConfigs(
// get all driver configuration settings
config
- .getAll(NODE_SECTION, "driver-configuration")
- // if settings exist
+ .getArray(NODE_SECTION, "driver-configuration")
+ // if configurations exist
.ifPresent(
drivers -> {
- Map configMap = new HashMap<>();
List