teodesian / Selenium-Remote-Driver

Perl Bindings to the Selenium Webdriver server
174 stars 90 forks source link

Selenium 4 support #452

Open tuxayo opened 3 years ago

tuxayo commented 3 years ago

Hi :)

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

teodesian commented 3 years ago

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

tuxayo commented 3 years ago

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 commented 3 years ago

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

teodesian commented 3 years ago

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

tuxayo commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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

teodesian commented 3 years ago

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

teodesian commented 3 years ago

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 commented 3 years ago

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

teodesian commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

looks like basically the same situation with chrome

teodesian commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

and hanging for 30 seconds no less

teodesian commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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

teodesian commented 3 years ago

More in-depth discussion of things

https://troglodyne.net/posts/1612566669

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

KevinLinSL commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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

teodesian commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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.