Selenium-Remote-Driver icon indicating copy to clipboard operation
Selenium-Remote-Driver copied to clipboard

Selenium 4 support

Open tuxayo opened this issue 5 years ago • 28 comments

Hi :)

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

tuxayo avatar Nov 20 '20 18:11 tuxayo

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

teodesian avatar Dec 03 '20 15:12 teodesian

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/

tuxayo avatar Dec 07 '20 15:12 tuxayo

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

tuxayo avatar Dec 07 '20 15:12 tuxayo

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

teodesian avatar Jan 08 '21 16:01 teodesian

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 avatar Jan 13 '21 19:01 tuxayo

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

tuxayo avatar Jan 13 '21 19:01 tuxayo

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 avatar Jan 13 '21 19:01 teodesian

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

teodesian avatar Jan 13 '21 19:01 teodesian

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

tuxayo avatar Jan 14 '21 17:01 tuxayo

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

teodesian avatar Jan 14 '21 19:01 teodesian

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 avatar Jan 19 '21 19:01 teodesian

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

teodesian avatar Jan 19 '21 20:01 teodesian

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 avatar Jan 19 '21 20:01 teodesian

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 avatar Jan 19 '21 21:01 teodesian

looks like basically the same situation with chrome

teodesian avatar Jan 19 '21 21:01 teodesian

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 avatar Jan 21 '21 15:01 teodesian

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 avatar Jan 26 '21 15:01 teodesian

and hanging for 30 seconds no less

teodesian avatar Jan 26 '21 15:01 teodesian

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 avatar Jan 28 '21 23:01 teodesian

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

teodesian avatar Feb 04 '21 17:02 teodesian

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

tuxayo avatar Feb 04 '21 19:02 tuxayo

More in-depth discussion of things

https://troglodyne.net/posts/1612566669

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

teodesian avatar Feb 05 '21 23:02 teodesian

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

KevinLinSL avatar May 31 '21 21:05 KevinLinSL

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.

teodesian avatar Jun 01 '21 02:06 teodesian

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

KevinLinSL avatar Jun 01 '21 16:06 KevinLinSL

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.

teodesian avatar Jun 01 '21 16:06 teodesian

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.

KevinLinSL avatar Jul 08 '21 21:07 KevinLinSL

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.

teodesian avatar Jul 08 '21 21:07 teodesian