selenium: java.util.concurrent.TimeoutException thrown at random netty read timeouts with RemoteWebDriver

šŸ› Bug Report

Netty at random times gets a read timeout at. This happens at different selenium commands ( for example: WebDriver.switchTo().defaultContent, WebElement.click, WebDriver.switchTo().window, WebElement.sendKeys, WebDriver.get, Alert.accept ) and at random in a quite small percentage chance (<1% test cases).

To Reproduce

I donā€™t have specific steps to reproduce. When our CI runs our test suite of thousands of tests run, about 10 fails at random due to this timeout. I could not reproduce by doing a simple long loop with a few commands on my development workstation.

Timeout details

This timeout always occurs at:

Caused by: java.util.concurrent.TimeoutException
	at java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
	at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
	at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:65)

I could confirm that it took 3 minutes there, confirming that it is due to the default 3 minutes read timeout the selenium configures the netty with. But the commands that are timing outs would normally run very fast, much less than one second.

Trying the code below in a method called probably thousands times by my test suite, it failed entering the catch. But after it called again driver.switchTo().defaultContent() at the end of the code below it worked. So it seems that although the read timeout happens in netty, it still works normally afterwards.

try
{
driver.switchTo().defaultContent();
}
catch (TimeoutException e)
{
// this should never happen, but started happening at random after updating to selenium 4
// output information to help troubleshoot
System.err.println("TimeoutException thrown while trying to go to defaultContent (stack below). Trying again...");
e.printStackTrace();

try
{
Thread.sleep(5000);
}
catch (InterruptedException e1)
{
}

driver.switchTo().defaultContent();
}

In this case, the stack trace got by the e.printStackTrace() above was:

org.openqa.selenium.TimeoutException: java.util.concurrent.TimeoutException
Build info: version: '4.0.0-beta-3', revision: '5d108f9a67'
System info: host: '51e5404d333b', ip: '172.18.0.7', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-1127.19.1.el7.x86_64', java.version: '11.0.1'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Command: [a5e3bf25-ba72-4023-b219-76406cf58660, switchToFrame {id=null}]
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 88.0, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20210415204500, moz:debuggerAddress: localhost:46562, moz:geckodriverVersion: 0.29.0, moz:headless: false, moz:processID: 9286, moz:profile: /tmp/rust_mozprofileQJRwQP, moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, platformVersion: 3.10.0-1127.19.1.el7.x86_64, rotatable: false, se:cdp: ws://172.18.0.3:4444/sessio..., se:cdpVersion: 85, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: a5e3bf25-ba72-4023-b219-76406cf58660
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:71)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:51)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
	at org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:103)
	at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)
	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:181)
	at org.openqa.selenium.remote.TracedCommandExecutor.execute(TracedCommandExecutor.java:39)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:619)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.defaultContent(RemoteWebDriver.java:1097)
	(...)
Caused by: java.util.concurrent.TimeoutException
	at java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
	at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
	at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:65)
	... 38 more

Environment

OS: Docker containers inside a CentOS Browser: RemoteWebDriver using Firefox in selenium/standalone-firefox:4.0.0-beta-3-20210426 docker image. Also tried the selenium/standalone-firefox:4.0.0-beta-4-prerelease-20210527 docker image, but the same thing happened. Browser Driver version: RemoteWebDriver from selenium-java 4.0.0-beta-3 Language Bindings version: Java 4.0.0-beta-3 The RemoteWebDriver runs in a container that is running in the same docker host as the browser container. So all network between them is only logical in the same machine. Previously we were using Selenium 2.52, in the same docker host, and never happened anything similar to such timeout.

Do you have any tips about what I can try to fix it or investigate more about this?

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 18
  • Comments: 165 (50 by maintainers)

Commits related to this issue

Most upvoted comments

Thank you @Cybermaxke for the workaround. This has been included already by @pujagani through #10220.

We are planning a 4.1.2 release for next week (which includes this fix).

@JulienBreton I was checking the attached log and I am confused about how the test is sending those commands. I followed the command for session f24ae2d1ba0f0d398cdaa093ef912389ā€¦

  • At 12:48:03.912, request in the Hub POST '/session/f24ae2d1ba0f0d398cdaa093ef912389/timeouts' which does not seem to get a response.
  • At 12:48:03.912, same request in the Node POST /session/f24ae2d1ba0f0d398cdaa093ef912389/timeouts HTTP/1.1 which does not seem to get a response.
  • At 12:48:03.931, request in the Hub DELETE /session/f24ae2d1ba0f0d398cdaa093ef912389 HTTP/1.1 which gets completed at 12:48:04.062
  • At 12:48:03.939, same request in the Node DELETE /session/f24ae2d1ba0f0d398cdaa093ef912389 HTTP/1.1 which gets completed at 12:48:03.995.
  • At 12:48:04.060 there is confirmation in the Hub logs that the session has been deleted

But thenā€¦

  • At 12:48:03.980, in the Hub there is a 3 minutes timeout after a request to http://172.18.0.4:5555/session/f24ae2d1ba0f0d398cdaa093ef912389/timeouts.
  • And later a few more requests to POST /session/f24ae2d1ba0f0d398cdaa093ef912389/timeouts HTTP/1.1

It seems our HTTP client is doing some extra retries we were not aware of (NettyRequestSender.retry) which I will deactivate in a moment. In this case, those automatic retries are happening after the session has been deleted. And yes, we need to switch to another HTTP client soon.

Deactivating those automatic retries should reduce or remove the amount of timeouts happening, and the let us rely on the configured session-timeout plus the retries that only happen between Hub and Node. I think we will do a new release in less than 1 week.

We are making some changes to the retry mechanisms since it might be hiding some issues. This will be part of 4.1.3

Weā€™re also seeing 5-10% failures due to this issue.

Hereā€™s @Cybermaxkeā€™s spectacular workaround verbosely written in Java. Would really prefer this to just be configurable or fixed.

RetryRequest retryRequest = new RetryRequest();

Field readTimeoutPolicyField = retryRequest.getClass().getDeclaredField("readTimeoutPolicy");
readTimeoutPolicyField.setAccessible(true);

RetryPolicy<HttpResponse> readTimeoutPolicy =
		new RetryPolicy<HttpResponse>()
				.handle(TimeoutException.class)
				.withBackoff(1, 4, ChronoUnit.SECONDS)
				.withMaxRetries(3)
				.withMaxDuration(Duration.ofSeconds(300))
				.onRetry(e -> CustomLog.info(String.format(
						"Read timeout #%s. Retrying.",
						e.getAttemptCount())));

FieldUtils.removeFinalModifier(readTimeoutPolicyField);
readTimeoutPolicyField.set(retryRequest, readTimeoutPolicy);

Filter filter = new AddSeleniumUserAgent().andThen(retryRequest);
ClientConfig config = ClientConfig
		.defaultConfig()
		.baseUrl(new URL(seleniumGridUrl))
		.readTimeout(Duration.ofSeconds(90))
		.withFilter(filter);
OpenTelemetryTracer tracer = OpenTelemetryTracer.getInstance();
HttpClient.Factory httpClientFactory = HttpClient.Factory.createDefault();
TracedHttpClient.Factory tracedHttpClientFactory = new TracedHttpClient.Factory(
		tracer,
		httpClientFactory);
CommandExecutor executor = new HttpCommandExecutor(Collections.emptyMap(), config, tracedHttpClientFactory);
TracedCommandExecutor tracedCommandExecutor = new TracedCommandExecutor(executor, tracer);
remoteWebDriver = new RemoteWebDriver(tracedCommandExecutor, getChromeOptions(runTimeProps));

@diemol with the 4.6.0 I donā€™t face issues anymore. The new Java 11 HTTP client and the fix for #11156 make Selenium 4 stable (in my case at least). Thanks a lot !

@diemol I can reproduce the java.util.concurrent.TimeoutException with the 4.2.0

I add a file with more logs. selenium_4.2.0_logs_3005.txt

[35mselenium-hub_1  |[0m 07:36:24.472 DEBUG [TimeoutTimerTask.expire] - Request timeout to 172.18.0.5/172.18.0.5:5555 after 180000 ms for NettyResponseFuture{currentRetry=0,
[35mselenium-hub_1  |[0m 	isDone=0,
[35mselenium-hub_1  |[0m 	isCancelled=0,
[35mselenium-hub_1  |[0m 	asyncHandler=org.asynchttpclient.AsyncCompletionHandlerBase@4d1dd9c1,
[35mselenium-hub_1  |[0m 	nettyRequest=org.asynchttpclient.netty.request.NettyRequest@11670799,
[35mselenium-hub_1  |[0m 	future=java.util.concurrent.CompletableFuture@27701a05[Not completed],
[35mselenium-hub_1  |[0m 	uri=http://172.18.0.5:5555/session/2b036b3c893b6f3780071155cb9e67e7/timeouts,
[35mselenium-hub_1  |[0m 	keepAlive=true,
[35mselenium-hub_1  |[0m 	redirectCount=0,
[35mselenium-hub_1  |[0m 	timeoutsHolder=org.asynchttpclient.netty.timeout.TimeoutsHolder@6aa36f29,
[35mselenium-hub_1  |[0m 	inAuth=0,
[35mselenium-hub_1  |[0m 	touch=1653896004378} after 180094 ms
[36mchrome_1        |[0m 07:36:24.473 DEBUG [RequestConverter.channelInactive] - Closing input pipe, channel became inactive.
[35mselenium-hub_1  |[0m 07:36:24.472 DEBUG [ChannelManager.closeChannel] - Closing Channel [id: 0xd7b8a183, L:/172.18.0.2:56434 - R:/172.18.0.5:5555] 
[35mselenium-hub_1  |[0m 07:36:24.473 DEBUG [NettyRequestSender.abort] - Aborting Future NettyResponseFuture{currentRetry=0,
[35mselenium-hub_1  |[0m 	isDone=0,
[35mselenium-hub_1  |[0m 	isCancelled=0,
[35mselenium-hub_1  |[0m 	asyncHandler=org.asynchttpclient.AsyncCompletionHandlerBase@4d1dd9c1,
[35mselenium-hub_1  |[0m 	nettyRequest=org.asynchttpclient.netty.request.NettyRequest@11670799,
[35mselenium-hub_1  |[0m 	future=java.util.concurrent.CompletableFuture@27701a05[Not completed],
[35mselenium-hub_1  |[0m 	uri=http://172.18.0.5:5555/session/2b036b3c893b6f3780071155cb9e67e7/timeouts,
[35mselenium-hub_1  |[0m 	keepAlive=true,
[35mselenium-hub_1  |[0m 	redirectCount=0,
[35mselenium-hub_1  |[0m 	timeoutsHolder=org.asynchttpclient.netty.timeout.TimeoutsHolder@6aa36f29,
[35mselenium-hub_1  |[0m 	inAuth=0,
[35mselenium-hub_1  |[0m 	touch=1653896004378}
[35mselenium-hub_1  |[0m 
[35mselenium-hub_1  |[0m 07:36:24.473 DEBUG [NettyRequestSender.abort] - Request timeout to 172.18.0.5/172.18.0.5:5555 after 180000 ms
[35mselenium-hub_1  |[0m java.util.concurrent.TimeoutException: Request timeout to 172.18.0.5/172.18.0.5:5555 after 180000 ms
[35mselenium-hub_1  |[0m 	at org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)
[35mselenium-hub_1  |[0m 	at org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelTimeout.run(HashedWheelTimer.java:715)
[35mselenium-hub_1  |[0m 	at io.netty.util.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:34)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:703)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:790)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:503)
[35mselenium-hub_1  |[0m 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
[35mselenium-hub_1  |[0m 	at java.base/java.lang.Thread.run(Thread.java:829)
[35mselenium-hub_1  |[0m 07:36:24.473 DEBUG [AsyncHttpClientHandler.channelInactive] - Channel Closed: [id: 0xd7b8a183, L:/172.18.0.2:56434 ! R:/172.18.0.5:5555] with attribute DISCARD
[35mselenium-hub_1  |[0m 07:36:24.473 DEBUG [AsyncCompletionHandler.onThrowable] - Request timeout to 172.18.0.5/172.18.0.5:5555 after 180000 ms
[35mselenium-hub_1  |[0m java.util.concurrent.TimeoutException: Request timeout to 172.18.0.5/172.18.0.5:5555 after 180000 ms
[35mselenium-hub_1  |[0m 	at org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)
[35mselenium-hub_1  |[0m 	at org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelTimeout.run(HashedWheelTimer.java:715)
[35mselenium-hub_1  |[0m 	at io.netty.util.concurrent.ImmediateExecutor.execute(ImmediateExecutor.java:34)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:703)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:790)
[35mselenium-hub_1  |[0m 	at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:503)
[35mselenium-hub_1  |[0m 	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
[35mselenium-hub_1  |[0m 	at java.base/java.lang.Thread.run(Thread.java:829)

Thank you for the feedback. I will close this issue and if something related comes up, please open a new one so we can address any variant individually.

@JulienBreton @evertones In 4.1.3 we removed the behavior of having retries everywhere by default. So it is not strange to see the error again, but the advantage now is that with your stacktraces we see where the timeout is exactly happening.

Before I go and apply a fix, would it be possible to get more detailed logs? (with --log-level "fine")

Weā€™re also seeing the same issue, when running about 700 tests, 20 will randomly fail. We have a grid setup (version 4.1.0) with 10 chrome nodes on AKS.

As a workaround, I was looking into a retry mechanism which caused me to stumble upon RetryRequest#readTimeoutPolicy, which never gets to retry due to its max duration. So I adjusted the read timeout of the remote driver and maximum duration policy to trigger some retries. Up to now, no action has failed twice in a row due to this timeout.

The workaround if anyone is interested:

var logger = LoggerFactory.getLogger("mylogger");
// the original read timeout of the remote driver was 300 seconds, but the default max duration of the policy
// is 10 seconds, so the retry doesn't do anything
// so decrease the read timeout to 90 seconds and increase the max duration of the policy to 300 seconds, this
// should give selenium 3 retries in the same timeframe as before
var field = RetryRequest.class.getDeclaredField("readTimeoutPolicy");
field.setAccessible(true);
var policy = (RetryPolicy<HttpResponse>) field.get(null);
policy.withMaxRetries(3).withMaxDuration(Duration.ofSeconds(300))
  .onRetry(event -> logger.info("Read timeout #{}. Retrying.", event.getAttemptCount()));

var capabilities = new DesiredCapabilities();
var tracer = OpenTelemetryTracer.getInstance();
var httpClientFactory = HttpClient.Factory.createDefault();
httpClientFactory = new TracedHttpClient.Factory(tracer, httpClientFactory);
var clientConfig = ClientConfig.defaultConfig()
        .readTimeout(Duration.ofSeconds(90)) // decrease read timeout to workaround timeout issue, see above
        .baseUrl(new URL("http://localhost:4444/wd/hub"));
CommandExecutor executor = new HttpCommandExecutor(Collections.emptyMap(), clientConfig, httpClientFactory);
executor = new TracedCommandExecutor(executor, tracer);
var driver = new RemoteWebDriver(executor, capabilities);

Do you know if there is a workaround for this issue ? Selenium 4 mades the tests flaky, we canā€™t use it.

Do we have anything in our docs about it, though? Blog post is good for explaining *why, but should be a straightforward what in the docs?

@JulienBreton As you told I am not getting java.util.concurrent.TimeoutException anymore when using Java11+http client instead of async http client. But getting this org.openqa.selenium.TimeoutException: java.net.http.HttpTimeoutException: request timed out Same exact scenes like how random java.util.concurrent.TimeoutException occurs, similarly now I am seeing this org.openqa.selenium.TimeoutException: java.net.http.HttpTimeoutException: request timed out exception.

This is the log I am seeing when testcase fails

org.openqa.selenium.TimeoutException: java.net.http.HttpTimeoutException: request timed out Build info: version: ā€˜4.5.0ā€™, revision: ā€˜fe167b119aā€™ System info: os.name: ā€˜Linuxā€™, os.arch: ā€˜amd64ā€™, os.version: ā€˜4.15.0-191-genericā€™, java.version: ā€˜11.0.16ā€™ Driver info: org.openqa.selenium.remote.RemoteWebDriver Command: [49a6dd37daa37d56faede5b8868bc81c, setTimeout {implicit=0}] Capabilities {acceptInsecureCerts: true, browserName: chrome, browserVersion: 105.0.5195.52, chrome: {chromedriverVersion: 105.0.5195.19 (b9c217c128c1ā€¦, userDataDir: /tmp/.com.google.Chrome.5fYJvn}, goog:chromeOptions: {debuggerAddress: localhost:40025}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: LINUX, proxy: Proxy(), se:cdp: ws://10.0.6.20:4444/sessionā€¦, se:cdpVersion: 105.0.5195.52, se:vnc: ws://10.0.6.20:4444/sessionā€¦, se:vncEnabled: true, se:vncLocalAddress: ws://10.0.6.20:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true} Session ID: 49a6dd37daa37d56faede5b8868bc81c at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:238) at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:181) at org.openqa.selenium.remote.TracedCommandExecutor.execute(TracedCommandExecutor.java:51) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:547) at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteTimeouts.implicitlyWait(RemoteWebDriver.java:858) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104) at org.testng.internal.InvokeMethodRunnable.runOne(InvokeMethodRunnable.java:54) at org.testng.internal.InvokeMethodRunnable.run(InvokeMethodRunnable.java:44) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.net.http.HttpTimeoutException: request timed out at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:559) at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:119) at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:236)

@diemol @titusfortner please throw some light on why this exception occurs Thanks!

Does anyone have a port of this workaround for python? I was hoping for a fix or a feature to enable this in the core codebase.

@diemol Any update on the next release which contains the above fix?

Hi, I canā€™t reproduce the issue with the java.util.concurrent.TimeoutException. My tests work well now. Thanks for your hard work and this awesome tool !

Do we have any update on this issue? We are facing this issue in our project and we are stuck for a long time.

@manu141 they do not help because you are using an old version of Grid.

@JulienBreton thatā€™s right ā€¦even we are able to reproduce @diemol the same issue on IE Edge mode in selenium grid-HUB and NODE configuration and itā€™s a huge blocker for us. As we run about 3000 tests during our regression time on and currently we went back to IE in some cases. We did try to limit nodes from 10 to 3 we saw some improvement but it happen at least on one node in 3 and tests fail on that nodeā€¦no alternate solution we had to restart that test and node.

@amyreit in the 4.1.2 there is a temporary fix but this fix is removed since 4.1.3 for a better way to solve the issue. The issue occurs always in 4.1.4, then it seems the team needs to add a fix (maybe it is already the case in the trunk).

Just another piece of information - I moved from 4.0 to 4.1.2 standalone firefox in early April and the occurrence of the issue has dropped significantly. From several runs a day to once every week.

I can see the same exception mentioned by @JulienBreton. I am using:

  • kubernetes
  • 1 hub + 88 nodes using Chrome
  • using Docker Selenium with version 4.1.3-20220327

Logs in the hub

12:48:51.090 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "8738dc89d6201cb04b52f555524193f7","eventTime": 1648691331088857077,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.util.concurrent.TimeoutException
Build info: version: '4.1.3', revision: '7b1ebf28ef'
System info: host: 'selenium-hub-644bf6c986-5l8kv', ip: '10.32.128.0', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-105-generic', java.version: '11.0.14'
Driver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.util.concurrent.TimeoutException
Build info: version: '4.1.3', revision: '7b1ebf28ef'
System info: host: 'selenium-hub-644bf6c986-5l8kv', ip: '10.32.128.0', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-105-generic', java.version: '11.0.14'
Driver info: driver.version: unknown
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:72)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:51)
	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
	at org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:124)
	at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)
	at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:92)
	at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:121)
	at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:373)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.grid.router.Router.execute(Router.java:91)
	at org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
	at org.openqa.selenium.remote.http.Route.execute(Route.java:68)
	at org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
	at org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
	at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
	at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
	at java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base\u002fjava.lang.Thread.run(Thread.java:829)
Caused by: java.util.concurrent.TimeoutException
	at java.base\u002fjava.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
	at java.base\u002fjava.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
	at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
	at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:66)
	... 35 more
","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "ourserver.io:31002","http.method": "POST","http.request_content_length": "53","http.scheme": "HTTP","http.target": "\u002fsession\u002ff51005fbae4da8700f6635873d778f5c\u002felement","http.user_agent": "selenium\u002f4.1.3 (java unix)","session.id": "f51005fbae4da8700f6635873d778f5c"}}

Logs in the node (node-chrome)

chrome_1        | 07:34:59.520 INFO [ProtocolHandshake.createSession] - Detected dialect: W3C
chrome_1        | Starting ChromeDriver 99.0.4844.51 (d537ec02474b5afe23684e7963d538896c63ac77-refs/branch-heads/4844@{#875}) on port 57734
chrome_1        | Only local connections are allowed.
chrome_1        | Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
chrome_1        | [C1648672499.877][SEVEhromeDriver was started successfulRlEy]: bi.
chrome_1        | nd() failed: Cannot assign requested address (99)

Above I found really strange the messages in the last 2 lines to be messed up. It looks like a concurrency issue printing them out.

Hi @diemol I am sorry to say that but with 4.1.3 the issue with the java.util.concurrent.TimeoutException is back. I have run many times my tests with 4.1.2 and I have not encountered the problem. With 4.1.3 I have the problem several times.

My config : Selenium Java 4.1.3 docker-selenium : 4.1.3-20220327

selenium-hub_1  | 09:01:40.184 INFO [LocalDistributor.newSession] - Session request received by the distributor: 
selenium-hub_1  |  [Capabilities {browserName: chrome, goog:chromeOptions: {args: [], extensions: []}}]
chrome_1        | Starting ChromeDriver 99.0.4844.51 (d537ec02474b5afe23684e7963d538896c63ac77-refs/branch-heads/4844@{#875}) on port 50633
chrome_1        | Only local connections are allowed.
chrome_1        | Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
chrome_1        | ChromeDriver was started successf[u1l6l4y8.6
chrome_1        | 30900.194][SEVERE]: bind() failed: Cannot assign requested address (99)
chrome_1        | 09:01:40.466 INFO [ProtocolHandshake.createSession] - Detected dialect: W3C
selenium-hub_1  | 09:01:40.475 INFO [LocalDistributor.newSession] - Session created by the distributor. Id: 92dd11e854c16327d4893c464dde0fb2, Caps: Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 99.0.4844.84, chrome: {chromedriverVersion: 99.0.4844.51 (d537ec02474b5..., userDataDir: /tmp/.com.google.Chrome.aBn0OB}, goog:chromeOptions: {debuggerAddress: localhost:37185}, networkConnectionEnabled: false, pageLoadStrategy: normal, platformName: linux, proxy: {}, se:cdp: ws://172.18.0.4:4444/sessio..., se:cdpVersion: 99.0.4844.84, se:vnc: ws://172.18.0.4:4444/sessio..., se:vncEnabled: true, se:vncLocalAddress: ws://172.18.0.4:7900, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:credBlob: true, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
selenium-hub_1  | 09:05:27.597 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "a1b01ed41d42ddfad0af45f2313d32cc","eventTime": 1648631127596733857,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.util.concurrent.TimeoutException\nBuild info: version: '4.1.3', revision: '7b1ebf28ef'\nSystem info: host: '4541b7a89eeb', ip: '172.18.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-105-generic', java.version: '11.0.14'\nDriver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.util.concurrent.TimeoutException\nBuild info: version: '4.1.3', revision: '7b1ebf28ef'\nSystem info: host: '4541b7a89eeb', ip: '172.18.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-105-generic', java.version: '11.0.14'\nDriver info: driver.version: unknown\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:72)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:51)\n\tat org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)\n\tat org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)\n\tat org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:124)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:92)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:121)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:373)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:68)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:68)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:91)\n\tat org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:68)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:68)\n\tat org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)\n\tat org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)\n\tat org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)\n\tat org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)\n\tat java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:829)\nCaused by: java.util.concurrent.TimeoutException\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)\n\tat org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:66)\n\t... 31 more\n","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "localhost:4444","http.method": "POST","http.request_content_length": "46","http.scheme": "HTTP","http.target": "\u002fsession\u002f92dd11e854c16327d4893c464dde0fb2\u002furl","http.user_agent": "selenium\u002f4.1.3 (java unix)","session.id": "92dd11e854c16327d4893c464dde0fb2"}}
selenium-hub_1  | 
chrome_1        | [1648631303.333][SEVERE]: Timed out receiving message from renderer: 299.728
chrome_1        | [1648631303.341][SEVERE]: Timed out receiving message from renderer: 299.728
selenium-hub_1  | 09:10:32.096 INFO [LocalSessionMap.lambda$new$0] - Deleted session from local session map, Id: 92dd11e854c16327d4893c464dde0fb2

We are making some changes to the retry mechanisms since it might be hiding some issues. This will be part of 4.1.3

Awesome, thank you @diemol , any rough time line for 4.1.3 release?

import org.openqa.selenium.remote.http.RetryRequest;

	<dependency>
		<groupId>org.seleniumhq.selenium</groupId>
		<artifactId>selenium-java</artifactId>
		<version>4.1.1</version>
	</dependency>

Do you know if there is a workaround for this issue ? Selenium 4 mades the tests flaky, we canā€™t use it.

@JulienBreton , in my case I use the Java Selenium client. The workaround I found for my case is to use the Selenium 4 client (I am still using a beta, I did not upgrade to the final yet, but I guess it will work too) connecting via RemoteWebDriver to the Selenium Server version 3 docker (example: selenium/standalone-firefox:3.141.59-20210422).

Seems we could use this repo to reproduce the issue. https://github.com/kasperSiteimprove/GridTimeoutRepro

I can see it every time I run the suite of tests that I have. Out of ~320 specs, usually there are random 32 or 33 specs that fail with the org.openqa.selenium.TimeoutException. Every time I run, different specs fail with this exception.

Environment
  • Linux (ubuntu)
  • Grid started as Hub/Nodes in a Linux server with 88 cores using Kubernetes
  • 130 Nodes distributed in different machines started using Kubernetes
  • Tests implemented with Jave/Scala running with Chrome browser
  • Tests running with Selenium 4.0 (final release)
Logs on the Hub
04:35:07.240 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "b005219d41e121bd53f61caa9e9ded41","eventTime": 1634751307239903954,"eventName": "exception","attributes": {"exception.message": "Unable to execute request for an existing session: java.util.concurrent.TimeoutException
Build info: version: '4.0.0', revision: '3a21814679'
System info: host: 'selenium-hub-7f774c84d4-v5rh5', ip: '10.38.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-80-generic', java.version: '11.0.11'
Driver info: driver.version: unknown","exception.stacktrace": "org.openqa.selenium.TimeoutException: java.util.concurrent.TimeoutException
Build info: version: '4.0.0', revision: '3a21814679'
System info: host: 'selenium-hub-7f774c84d4-v5rh5', ip: '10.38.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-80-generic', java.version: '11.0.11'
Driver info: driver.version: unknown
     org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:72)
     org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
     org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
     org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:51)
     org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
     org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
     org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:119)
     org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)
     org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:92)
     org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:110)
     org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:373)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.grid.router.Router.execute(Router.java:91)
     org.openqa.selenium.grid.web.EnsureSpecCompliantResponseHeaders.lambda$apply$0(EnsureSpecCompliantResponseHeaders.java:34)
     org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
     org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:270)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:336)
     org.openqa.selenium.remote.http.Route.execute(Route.java:68)
     org.openqa.selenium.remote.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:35)
     org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
     org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
     org.openqa.selenium.remote.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
     org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
     org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
     java.base\u002fjava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
     java.base\u002fjava.util.concurrent.FutureTask.run(FutureTask.java:264)
     java.base\u002fjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
     java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
     java.base\u002fjava.lang.Thread.run(Thread.java:829)
Caused by: java.util.concurrent.TimeoutException
     java.base\u002fjava.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
     java.base\u002fjava.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
     org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
     org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:66)
     ... 35 more
","exception.type": "org.openqa.selenium.TimeoutException","http.flavor": 1,"http.handler_class": "org.openqa.selenium.grid.router.HandleSession","http.host": "seleniumserver.mycompany:4444","http.method": "POST","http.request_content_length": "50","http.scheme": "HTTP","http.target": "\u002fsession\u002f6c1e5340d84ae80f95225328a382ceca\u002felement\u002fecc9bb9c-537a-4f18-ba55-1bffee18a02f\u002fclick","http.user_agent": "selenium\u002f4.0.0 (java unix)","session.id": "6c1e5340d84ae80f95225328a382ceca"}}
Logs on the Node
Starting ChromeDriver 94.0.4606.61 (418b78f5838ed0b1c69bb4e51ea0252171854915-refs/branch-heads/4606@{#1204}) on port 53852
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[1634751054.077][SEVERE]: bind() failed: Cannot assign requested address (99)
04:30:54.478 INFO [ProtocolHandshake.createSession] - Detected dialect: W3C
04:31:10.602 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "feacaa143077624f51266c887176de8d","eventTime": 1634751070601890876,"eventName": "HTTP request execution complete","attributes": {"http.flavor": 1,"http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.host": "seleniumserver.mycompany:4444","http.method": "POST","http.request_content_length": "48780","http.scheme": "HTTP","http.status_code": 404,"http.target": "\u002fsession\u002f39cbd903608b78739dfc34d4104913cb\u002fexecute\u002fsync","http.user_agent": "selenium\u002f4.0.0 (java unix)"}}

04:31:14.690 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "a9e66e1dac5fed0e440bf94a23083755","eventTime": 1634751074689648608,"eventName": "HTTP request execution complete","attributes": {"http.flavor": 1,"http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.host": "seleniumserver.mycompany:4444","http.method": "GET","http.scheme": "HTTP","http.status_code": 404,"http.target": "\u002fsession\u002f39cbd903608b78739dfc34d4104913cb\u002felement\u002fa997d7b6-0ab5-4a32-874d-b35b14033edf\u002fenabled","http.user_agent": "selenium\u002f4.0.0 (java unix)"}}

04:31:24.777 WARN [SeleniumSpanExporter$1.lambda$export$0] - {"traceId": "3f383b3e195d52bbae075aec229d14e9","eventTime": 1634751084776014440,"eventName": "HTTP request execution complete","attributes": {"http.flavor": 1,"http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.host": "seleniumserver.mycompany:4444","http.method": "GET","http.scheme": "HTTP","http.status_code": 404,"http.target": "\u002fsession\u002f39cbd903608b78739dfc34d4104913cb\u002felement\u002f3c73b7fa-7b1a-40c8-adad-549fa2871438\u002fenabled","http.user_agent": "selenium\u002f4.0.0 (java unix)"}}