Open tuxayo opened 3 years ago
There's a selenium 4? Why? The driver vendors have barely implemented WC3 webdriver.
Here is what I could find on the blog: https://www.selenium.dev/blog/2020/what-is-coming-in-selenium-4-why-the-major-version-bump/ https://www.selenium.dev/blog/2020/selenium-4-alpha-6-is-out/
Finally found the changelog! https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES
that's just version 4 of the ruby bindings. Why do I care about this? The standard is what matters to us.
that's just version 4 of the ruby bindings.
Indeed that wasn't the Selenium changelog.
Though the blogposts and the tags show that there is an upcoming version 4 https://github.com/SeleniumHQ/selenium/tags
The standard is what matters to us.
It seems it changed, I tried to run a test suite with selenium/standalone-firefox version 4.0.0-beta-1 instead of version 3 and the suite fails.
Logs where I run the tests:
STRACE: /usr/share/perl5/Try/Tiny.pm:124 in Selenium::Remote::Driver::catch {...}
/usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm:353 in Try::Tiny::try
(eval 1561):1 in Selenium::Remote::Driver::__ANON__
(eval 1563):2 in Selenium::Remote::Driver::__ANON__
/usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm:945 in Selenium::Remote::Driver::_execute_command
t/db_dependent/selenium/administration_tasks.t:52 in Selenium::Remote::Driver::get_title
Logs of the selenium container:
selenium_1 | 19:02:42.001 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "c4cbab0faa8d8a96e57f115f90704983","spanId": "a94fa897b2efbf1b","spanKind": "INTERNAL","eventTime": 1610564561997471255,"eventName": "Session created by the distributor","attributes": {"session.uri": "http:\u002f\u002f172.24.0.5:4444","logger": "org.openqa.selenium.grid.distributor.local.LocalDistributor","request.payload": "{\n \"desiredCapabilities\": {\n \"browserName\": \"firefox\",\n \"javascriptEnabled\": true,\n \"acceptSslCerts\": true,\n \"version\": \"\",\n \"platform\": \"ANY\"\n },\n \"capabilities\": {\n \"firstMatch\": [\n {\n \"browserName\": \"firefox\"\n },\n {\n \"acceptInsecureCerts\": true,\n \"browserVersion\": \"\",\n \"platformName\": \"ANY\",\n \"browserName\": \"firefox\"\n }\n ]\n },\n \"extra_capabilities\": {\n }\n}","session.capabilities": "Capabilities {acceptInsecureCerts: false, browserName: firefox, browserVersion: 84.0.2, moz:accessibilityChecks: false, moz:buildID: 20210105180113, moz:geckodriverVersion: 0.28.0, moz:headless: false, moz:processID: 134, moz:profile: \u002ftmp\u002frust_mozprofileRIGcgB, moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platformName: linux, platformVersion: 5.10.5-arch1-1, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}","session.id": "c8ad7dcc-5067-413b-b880-ade6cbb5d9f7"}}
selenium_1 |
selenium_1 | 19:02:42.022 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "c4cbab0faa8d8a96e57f115f90704983","spanId": "83a6d732c743220e","spanKind": "INTERNAL","eventTime": 1610564562020311820,"eventName": "HTTP request execution complete","attributes": {"http.status_code": 200,"http.target": "\u002fsession","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","http.handler_class": "org.openqa.selenium.grid.sessionqueue.local.LocalNewSessionQueuer","http.method": "POST","http.host": "selenium:4444","http.request_content_length": "275","http.scheme": "HTTP"}}
selenium_1 |
selenium_1 | 19:02:42.070 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "d21c6cff2ad339d52f021288e5a42d5c","spanId": "684ebf7346883be1","spanKind": "INTERNAL","eventTime": 1610564562069216450,"eventName": "HTTP request execution complete","attributes": {"http.status_code": 200,"http.target": "\u002fsession\u002fc8ad7dcc-5067-413b-b880-ade6cbb5d9f7\u002ftimeouts","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.method": "POST","http.host": "selenium:4444","http.request_content_length": "17","http.scheme": "HTTP"}}
selenium_1 |
selenium_1 | 19:02:43.654 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "e9f24cb4bd4cd9f330c0b6ae69d3179b","spanId": "339e3f1d0eee5221","spanKind": "INTERNAL","eventTime": 1610564563652200773,"eventName": "HTTP request execution complete","attributes": {"http.status_code": 200,"http.target": "\u002fsession\u002fc8ad7dcc-5067-413b-b880-ade6cbb5d9f7\u002furl","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.method": "POST","http.host": "selenium:4444","http.request_content_length": "51","http.scheme": "HTTP"}}
selenium_1 |
selenium_1 | 19:03:43.765 WARN [SpanWrappedHttpHandler.execute] - Unable to execute request: NettyHttpHandler request execution error
selenium_1 | java.lang.RuntimeException: NettyHttpHandler request execution error
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:76)
selenium_1 | at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
selenium_1 | at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:49)
selenium_1 | at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
selenium_1 | at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:75)
selenium_1 | at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)
selenium_1 | at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)
selenium_1 | at org.openqa.selenium.grid.node.ProtocolConvertingSession.execute(ProtocolConvertingSession.java:75)
selenium_1 | at org.openqa.selenium.grid.node.local.SessionSlot.execute(SessionSlot.java:115)
selenium_1 | at org.openqa.selenium.grid.node.local.LocalNode.executeWebDriverCommand(LocalNode.java:366)
selenium_1 | at org.openqa.selenium.grid.node.ForwardWebDriverCommand.execute(ForwardWebDriverCommand.java:35)
selenium_1 | at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.tracing.SpanWrappedHttpHandler.execute(SpanWrappedHttpHandler.java:86)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.node.Node.execute(Node.java:220)
selenium_1 | at org.openqa.selenium.grid.web.CombinedHandler.execute(CombinedHandler.java:59)
selenium_1 | at org.openqa.selenium.grid.web.RoutableHttpClientFactory$1.execute(RoutableHttpClientFactory.java:66)
selenium_1 | at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)
selenium_1 | at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:102)
selenium_1 | at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.router.Router.execute(Router.java:90)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:261)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.web.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:29)
selenium_1 | at org.openqa.selenium.grid.web.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.grid.web.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
selenium_1 | at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
selenium_1 | at java.util.concurrent.FutureTask.run(FutureTask.java:266)
selenium_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
selenium_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
selenium_1 | at java.lang.Thread.run(Thread.java:748)
selenium_1 | Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Request timeout to localhost/127.0.0.1:15144 after 60000 ms
selenium_1 | at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
selenium_1 | at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1928)
selenium_1 | at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:59)
selenium_1 | ... 46 more
selenium_1 | Caused by: java.util.concurrent.TimeoutException: Request timeout to localhost/127.0.0.1:15144 after 60000 ms
selenium_1 | at org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)
selenium_1 | at org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)
selenium_1 | at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)
selenium_1 | at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)
selenium_1 | at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)
selenium_1 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
selenium_1 | ... 1 more
selenium_1 | 19:03:43.768 WARN [LoggingOptions$1.lambda$export$0] - {"traceId": "b472c2d521e241f583f4af382598594c","spanId": "1c814c152406d5c9","spanKind": "INTERNAL","eventTime": 1610564623764942253,"eventName": "exception","attributes": {"http.target": "\u002fsession\u002fc8ad7dcc-5067-413b-b880-ade6cbb5d9f7\u002ftitle","exception.type": "java.lang.RuntimeException","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","exception.message": "Unable to execute request: NettyHttpHandler request execution error","http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","exception.stacktrace": "java.lang.RuntimeException: NettyHttpHandler request execution error\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:76)\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:49)\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:75)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)\n\tat org.openqa.selenium.grid.node.ProtocolConvertingSession.execute(ProtocolConvertingSession.java:75)\n\tat org.openqa.selenium.grid.node.local.SessionSlot.execute(SessionSlot.java:115)\n\tat org.openqa.selenium.grid.node.local.LocalNode.executeWebDriverCommand(LocalNode.java:366)\n\tat org.openqa.selenium.grid.node.ForwardWebDriverCommand.execute(ForwardWebDriverCommand.java:35)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.tracing.SpanWrappedHttpHandler.execute(SpanWrappedHttpHandler.java:86)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.node.Node.execute(Node.java:220)\n\tat org.openqa.selenium.grid.web.CombinedHandler.execute(CombinedHandler.java:59)\n\tat org.openqa.selenium.grid.web.RoutableHttpClientFactory$1.execute(RoutableHttpClientFactory.java:66)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:102)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:90)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:261)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.web.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:29)\n\tat org.openqa.selenium.grid.web.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.grid.web.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.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:15144 after 60000 ms\n\tat java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)\n\tat java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1928)\n\tat org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:59)\n\t... 46 more\nCaused by: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:15144 after 60000 ms\n\tat org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)\n\tat org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)\n\tat io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)\n\tat io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)\n\tat io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t... 1 more\n","http.method": "GET","http.host": "selenium:4444","http.request_content_length": "2","http.scheme": "HTTP"}}
selenium_1 |
Here is a simpler test script that works with version 3:
#!/usr/bin/perl
use Modern::Perl;
eval { require Selenium::Remote::Driver; };
my $driver = Selenium::Remote::Driver->new(
remote_server_addr => "selenium",
port => 4444,
);
$driver->get("https://example.org");
$driver->find_element("//*[contains(text(), 'Example Domain')]");
$driver->quit();
logs with Selenium 4:
kohadev-koha@c7b41b2de2e7:/kohadevbox/koha$ prove selenium_hello_world.t
selenium_hello_world.t .. Error while executing command: script timeout: NettyHttpHandler request execution error at /usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm line 403.
at /usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm line 353.
(in cleanup) Error while executing command: script timeout: NettyHttpHandler request execution error at /usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm line 403.
at /usr/local/share/perl/5.24.1/Selenium/Remote/Driver.pm line 353.
selenium_1 | 19:15:53.624 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "c76ef4187bcda6c6e8fbbb13fc6e26a4","spanId": "6141071f564ccb1e","spanKind": "INTERNAL","eventTime": 1610565353620442578,"eventName": "Session created by the distributor","attributes": {"session.uri": "http:\u002f\u002f172.25.0.4:4444","logger": "org.openqa.selenium.grid.distributor.local.LocalDistributor","request.payload": "{\n \"desiredCapabilities\": {\n \"browserName\": \"firefox\",\n \"javascriptEnabled\": true,\n \"acceptSslCerts\": true,\n \"version\": \"\",\n \"platform\": \"ANY\"\n },\n \"capabilities\": {\n \"firstMatch\": [\n {\n \"browserName\": \"firefox\"\n },\n {\n \"platformName\": \"ANY\",\n \"acceptInsecureCerts\": true,\n \"browserName\": \"firefox\",\n \"browserVersion\": \"\"\n }\n ]\n },\n \"extra_capabilities\": {\n }\n}","session.capabilities": "Capabilities {acceptInsecureCerts: false, browserName: firefox, browserVersion: 84.0.2, moz:accessibilityChecks: false, moz:buildID: 20210105180113, moz:geckodriverVersion: 0.28.0, moz:headless: false, moz:processID: 115, moz:profile: \u002ftmp\u002frust_mozprofileWMEkxR, moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platformName: linux, platformVersion: 5.10.5-arch1-1, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}","session.id": "416c3574-73b3-4fc3-9d1d-a42e1f4c3e24"}}
selenium_1 |
selenium_1 | 19:15:53.657 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "c76ef4187bcda6c6e8fbbb13fc6e26a4","spanId": "839fbbc01b33ea06","spanKind": "INTERNAL","eventTime": 1610565353655587395,"eventName": "HTTP request execution complete","attributes": {"http.status_code": 200,"http.target": "\u002fsession","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","http.handler_class": "org.openqa.selenium.grid.sessionqueue.local.LocalNewSessionQueuer","http.method": "POST","http.host": "selenium:4444","http.request_content_length": "275","http.scheme": "HTTP"}}
selenium_1 |
selenium_1 | 19:15:54.133 INFO [LoggingOptions$1.lambda$export$0] - {"traceId": "a4b437672296cf318c40e642a6481123","spanId": "41b00e75f5984b00","spanKind": "INTERNAL","eventTime": 1610565354131041881,"eventName": "HTTP request execution complete","attributes": {"http.status_code": 200,"http.target": "\u002fsession\u002f416c3574-73b3-4fc3-9d1d-a42e1f4c3e24\u002furl","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","http.method": "POST","http.host": "selenium:4444","http.request_content_length": "29","http.scheme": "HTTP"}}
selenium_1 |
selenium_1 | 19:16:54.273 WARN [SpanWrappedHttpHandler.execute] - Unable to execute request: NettyHttpHandler request execution error
selenium_1 | java.lang.RuntimeException: NettyHttpHandler request execution error
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:76)
selenium_1 | at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
selenium_1 | at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.execute(NettyHttpHandler.java:49)
selenium_1 | at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
selenium_1 | at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:56)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyClient.execute(NettyClient.java:75)
selenium_1 | at org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)
selenium_1 | at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)
selenium_1 | at org.openqa.selenium.grid.node.ProtocolConvertingSession.execute(ProtocolConvertingSession.java:75)
selenium_1 | at org.openqa.selenium.grid.node.local.SessionSlot.execute(SessionSlot.java:115)
selenium_1 | at org.openqa.selenium.grid.node.local.LocalNode.executeWebDriverCommand(LocalNode.java:366)
selenium_1 | at org.openqa.selenium.grid.node.ForwardWebDriverCommand.execute(ForwardWebDriverCommand.java:35)
selenium_1 | at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.tracing.SpanWrappedHttpHandler.execute(SpanWrappedHttpHandler.java:86)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.node.Node.execute(Node.java:220)
selenium_1 | at org.openqa.selenium.grid.web.CombinedHandler.execute(CombinedHandler.java:59)
selenium_1 | at org.openqa.selenium.grid.web.RoutableHttpClientFactory$1.execute(RoutableHttpClientFactory.java:66)
selenium_1 | at org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)
selenium_1 | at org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:102)
selenium_1 | at org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.router.Router.execute(Router.java:90)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:261)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)
selenium_1 | at org.openqa.selenium.remote.http.Route.execute(Route.java:67)
selenium_1 | at org.openqa.selenium.grid.web.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:29)
selenium_1 | at org.openqa.selenium.grid.web.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.grid.web.ErrorFilter.lambda$apply$0(ErrorFilter.java:44)
selenium_1 | at org.openqa.selenium.remote.http.Filter$1.execute(Filter.java:64)
selenium_1 | at org.openqa.selenium.netty.server.SeleniumHandler.lambda$channelRead0$0(SeleniumHandler.java:44)
selenium_1 | at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
selenium_1 | at java.util.concurrent.FutureTask.run(FutureTask.java:266)
selenium_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
selenium_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
selenium_1 | at java.lang.Thread.run(Thread.java:748)
selenium_1 | Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Request timeout to localhost/127.0.0.1:3277 after 60000 ms
selenium_1 | at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
selenium_1 | at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1928)
selenium_1 | at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)
selenium_1 | at org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:59)
selenium_1 | ... 46 more
selenium_1 | Caused by: java.util.concurrent.TimeoutException: Request timeout to localhost/127.0.0.1:3277 after 60000 ms
selenium_1 | at org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)
selenium_1 | at org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)
selenium_1 | at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)
selenium_1 | at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)
selenium_1 | at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)
selenium_1 | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
selenium_1 | ... 1 more
selenium_1 | 19:16:54.275 WARN [LoggingOptions$1.lambda$export$0] - {"traceId": "ef04c1a3018e30b751ddfdd20aafd83d","spanId": "d74a0f9fff3360df","spanKind": "INTERNAL","eventTime": 1610565414272992345,"eventName": "exception","attributes": {"http.target": "\u002fsession\u002f416c3574-73b3-4fc3-9d1d-a42e1f4c3e24","exception.type": "java.lang.RuntimeException","http.flavor": 1,"http.user_agent": "libwww-perl\u002f6.15","exception.message": "Unable to execute request: NettyHttpHandler request execution error","http.handler_class": "org.openqa.selenium.remote.http.Route$PredicatedRoute","exception.stacktrace": "java.lang.RuntimeException: NettyHttpHandler request execution error\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:76)\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:49)\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:75)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:55)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)\n\tat org.openqa.selenium.grid.node.ProtocolConvertingSession.execute(ProtocolConvertingSession.java:75)\n\tat org.openqa.selenium.grid.node.local.SessionSlot.execute(SessionSlot.java:115)\n\tat org.openqa.selenium.grid.node.local.LocalNode.executeWebDriverCommand(LocalNode.java:366)\n\tat org.openqa.selenium.grid.node.ForwardWebDriverCommand.execute(ForwardWebDriverCommand.java:35)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.tracing.SpanWrappedHttpHandler.execute(SpanWrappedHttpHandler.java:86)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.node.Node.execute(Node.java:220)\n\tat org.openqa.selenium.grid.web.CombinedHandler.execute(CombinedHandler.java:59)\n\tat org.openqa.selenium.grid.web.RoutableHttpClientFactory$1.execute(RoutableHttpClientFactory.java:66)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:100)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:102)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:90)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$NestedRoute.handle(Route.java:261)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.web.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:29)\n\tat org.openqa.selenium.grid.web.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.grid.web.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.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\nCaused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:3277 after 60000 ms\n\tat java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)\n\tat java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1928)\n\tat org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:206)\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:59)\n\t... 46 more\nCaused by: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:3277 after 60000 ms\n\tat org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)\n\tat org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)\n\tat io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)\n\tat io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)\n\tat io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t... 1 more\n","http.method": "DELETE","http.host": "selenium:4444","http.request_content_length": "2","http.scheme": "HTTP"}}
Again, version of the software (in this case the selenium JAR) does not imply new standards.
We can also not be shocked by alpha software not functioning. We also can't be shocked by the browser driver vendors ignoring the standard and doing what they want to instead. This is what appears to actually be happening: https://testguild.com/selenium-4/
The Selenium JAR is just adding features. Which means i'll have to be compatible with it at some point, but as of yet there's not a great changelog I'm seeing, just links to their Javadoc. Which reminds me immediately why selenium is being abandoned in droves in favor of Playwright.
What I'm actually doing about this all: https://github.com/Troglodyne-Internet-Widgets/seleinum-specification-perl
In short I'm making a machine readable copy of the WC3 spec which we can then use to interface with the spec without actually having to change Selenium::Remote::Driver every time they get a wild hair.
I use this exact same technique with the Playwright CPAN module, and it's automatically compatible with whatever version of the software you have installed.
Unfortunately, neither the selenium JAR nor the browser vendors will ever ship a JSON definition of what methods they actually implement and what their inputs and outputs are, unlike Playwright does out of the box. This alone should make it astonishingly obvious why it's catching on much faster with implementers and maintainers.
so as far as I can tell the big change is that they ripped out the JSONWire compat, which likely breaks an astonishing amount of the weird little hacks we've had to do over the years to make the browser drivers actually behave correctly
Ultimately means I'm probably gonna have to refactor and overhaul everything again
Thanks a lot for the analysis, it's more clear now.
I'll try and have the re-factors done before chinese new year https://troglodyne.net/video/1610589448
getting sessions and timeouts wrecked, and will probably never be fixed upstream, apparently
Broken:
get_alert_text get_current_window_handle get_window_handles switch_to_window close get_window_size get_window_position get_current_url get_title screenshot get_active_element get_log get_log_types get_all_cookies delete_all_cookies release_general_action get_cookie_named delete_cookie_named quit (WOW this takes the cake)
elements: screenshot get_property get_attribute get_tag_name toggling, is_enabled, submit and is_selected is broken thanks to get_tag_name being broken get_element_location get_size get_text
I also have to dismiss alerts() before go_back and go_forward(), yet more head-crammed-up-the-javascript-interpreter
Every method that fails to execute here hangs for a minute or more before failing. amazing
and this is just the results on geckodriver. I'm sure it's an absolute insane asylum on chrome
looks like we can omit /wd/hub prefix finally, but that fixes nothing
REQ: DELETE, http://localhost:4444/session/47517227-1b68-4975-b286-b04f55646de4, {} RES: { "value": { "error": "script timeout", "message": "NettyHttpHandler request execution error", "stacktrace": "java.lang.RuntimeException: NettyHttpHandler request execution error\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:47)\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:60)\n\tat org.openqa.selenium.remote.tracing.TracedHttpClient.execute(TracedHttpClient.java:59)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:96)\n\tat org.openqa.selenium.grid.node.ProtocolConvertingSession.execute(ProtocolConvertingSession.java:75)\n\tat org.openqa.selenium.grid.node.local.SessionSlot.execute(SessionSlot.java:115)\n\tat org.openqa.selenium.grid.node.local.LocalNode.executeWebDriverCommand(LocalNode.java:317)\n\tat org.openqa.selenium.grid.node.ForwardWebDriverCommand.execute(ForwardWebDriverCommand.java:35)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.tracing.SpanWrappedHttpHandler.execute(SpanWrappedHttpHandler.java:86)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.node.Node.execute(Node.java:202)\n\tat org.openqa.selenium.grid.web.CombinedHandler.execute(CombinedHandler.java:59)\n\tat org.openqa.selenium.grid.web.RoutableHttpClientFactory$1.execute(RoutableHttpClientFactory.java:66)\n\tat org.openqa.selenium.grid.web.ReverseProxyHandler.execute(ReverseProxyHandler.java:96)\n\tat org.openqa.selenium.grid.router.HandleSession.execute(HandleSession.java:102)\n\tat org.openqa.selenium.remote.http.Route$PredicatedRoute.handle(Route.java:364)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.remote.http.Route$CombinedRoute.handle(Route.java:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.router.Router.execute(Router.java:85)\n\tat org.openqa.selenium.grid.web.CheckOriginHeader.lambda$apply$0(CheckOriginHeader.java:66)\n\tat org.openqa.selenium.grid.web.CheckContentTypeHeader.lambda$apply$0(CheckContentTypeHeader.java:70)\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:327)\n\tat org.openqa.selenium.remote.http.Route.execute(Route.java:67)\n\tat org.openqa.selenium.grid.server.AddWebDriverSpecHeaders.lambda$apply$0(AddWebDriverSpecHeaders.java:30)\n\tat org.openqa.selenium.grid.server.WrapExceptions.lambda$apply$0(WrapExceptions.java:36)\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:46)\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:1130)\n\tat java.base\u002fjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)\n\tat java.base\u002fjava.lang.Thread.run(Thread.java:832)\nCaused by: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:16215 after 60000 ms\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)\n\tat java.base\u002fjava.util.concurrent.CompletableFuture.get(CompletableFuture.java:2063)\n\tat org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:201)\n\tat org.openqa.selenium.remote.http.netty.NettyHttpHandler.makeCall(NettyHttpHandler.java:57)\n\t... 42 more\nCaused by: java.util.concurrent.TimeoutException: Request timeout to localhost\u002f127.0.0.1:16215 after 60000 ms\n\tat org.asynchttpclient.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43)\n\tat org.asynchttpclient.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:50)\n\tat io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:672)\n\tat io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:747)\n\tat io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:472)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t... 1 more\n" } }
so yeah, as far as I can tell i'm executing things exactly as laid out by the spec, selenium 4 is just exploding
looks like basically the same situation with chrome
seems it's gagging on extra options. Not the biggest fan of an upstream straight up hanging on extra arguments which it could just ignore, but...whatever
I can say with confidence people are going to absolutely love this new behavior of the selenium server straight-up hanging on any unrecognized input, lol
and hanging for 30 seconds no less
They had a lot of quirks with their input processing but I think I've got a 100% working client now
Refactors will also mean lots of good new features like auto-spawn that isn't awful
On schedule for chinese new year!
OK, released the new backend to CPAN
https://github.com/Troglodyne-Internet-Widgets/selenium-client-perl/tree/1.00
Now for all the compat work
Thanks for the video, the updates and your great work to handle all those big changes :D
More in-depth discussion of things
https://troglodyne.net/posts/1612566669
Documentation updates for S::R::D probably coming early next week
Running Selenium Jar on my own, not related to this repo, was wondering how you fixed the java Timeouts in Selenium 4, specifically I'm trying to get window handles from Python and I'm getting the Java timeout @teodesian
I suppose that they finally got out of beta?
If so I probably will have to accelerate my plans to make Selenium::Client the backend for this module. That said, I'm working on a contract right now, so it'll probably be mid-june before I can get to it.
I'm referring to the Beta versions actually, I was just wondering how you handled the timeout issues.
I didn't handle them. I wrote a new module which should be much easier to maintain than this.
Selenium::Client
It's on CPAN, you can use it today. I plan to replace the backend of S::R::D with it at some point, but as I mentioned I'm busy with things that actually pay, unlike this.
Ok I figured it out, took over a month. The solution was to remove the Content-Length header from the HTTP GET requests. I'm sure if anyone else has this bug, it could be a different header that needs to be removed, but thats the gist of it. I think the new client that Sel 4 is using, Netty, is more particular about the headers and times out for that reason.
It is quite picky about headers, yes. It's much more of a stickler for the standard than before, and there are even more landmines waiting in various methods. I realized quickly it'd be a game of whack-a-mole if I didn't just replace RemoteConnection entirely, which is what lead to Selenium::Client.
The good news is that I finally might have time to deal with this before too long.
Hi :)
2 and 3 are supported and 4 alpha isn't, right?