Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Selenium 4 support #452

Open
tuxayo opened this issue Nov 20, 2020 · 28 comments
Open

Selenium 4 support #452

tuxayo opened this issue Nov 20, 2020 · 28 comments

Comments

@tuxayo
Copy link

tuxayo commented Nov 20, 2020

Hi :)

2 and 3 are supported and 4 alpha isn't, right?

@tuxayo tuxayo changed the title Document state of compatibility with Selenium version Document state of compatibility with Selenium versions Nov 20, 2020
@teodesian
Copy link
Owner

There's a selenium 4? Why? The driver vendors have barely implemented WC3 webdriver.

@tuxayo
Copy link
Author

tuxayo commented Dec 7, 2020

@tuxayo
Copy link
Author

tuxayo commented Dec 7, 2020

Finally found the changelog!
https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES

@teodesian
Copy link
Owner

that's just version 4 of the ruby bindings. Why do I care about this? The standard is what matters to us.

@tuxayo
Copy link
Author

tuxayo commented Jan 13, 2021

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   | 

@tuxayo
Copy link
Author

tuxayo commented Jan 13, 2021

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"}}

@teodesian
Copy link
Owner

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.

@teodesian
Copy link
Owner

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

@tuxayo
Copy link
Author

tuxayo commented Jan 14, 2021

Thanks a lot for the analysis, it's more clear now.

@teodesian
Copy link
Owner

I'll try and have the re-factors done before chinese new year
https://troglodyne.net/video/1610589448

@teodesian
Copy link
Owner

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

@teodesian
Copy link
Owner

looks like we can omit /wd/hub prefix finally, but that fixes nothing

@teodesian
Copy link
Owner

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" } }

@teodesian
Copy link
Owner

so yeah, as far as I can tell i'm executing things exactly as laid out by the spec, selenium 4 is just exploding

@teodesian
Copy link
Owner

looks like basically the same situation with chrome

@teodesian
Copy link
Owner

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

@teodesian
Copy link
Owner

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

@teodesian
Copy link
Owner

and hanging for 30 seconds no less

@teodesian
Copy link
Owner

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!

@teodesian
Copy link
Owner

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

@tuxayo
Copy link
Author

tuxayo commented Feb 4, 2021

Thanks for the video, the updates and your great work to handle all those big changes :D

@tuxayo tuxayo changed the title Document state of compatibility with Selenium versions Selenium 4 support Feb 4, 2021
@teodesian
Copy link
Owner

More in-depth discussion of things

https://troglodyne.net/posts/1612566669

Documentation updates for S::R::D probably coming early next week

@KevinLinSL
Copy link

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

@teodesian
Copy link
Owner

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.

@KevinLinSL
Copy link

I'm referring to the Beta versions actually, I was just wondering how you handled the timeout issues.

@teodesian
Copy link
Owner

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.

@KevinLinSL
Copy link

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.

@teodesian
Copy link
Owner

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants