markhobson / docker-maven-chrome

Docker image for Java automated UI tests.
https://hub.docker.com/r/markhobson/maven-chrome/
Apache License 2.0
98 stars 82 forks source link

Update chromedriver location #51

Closed drewheasman closed 10 months ago

drewheasman commented 10 months ago

Hey @markhobson I had a go at making the changes mentioned in https://github.com/markhobson/docker-maven-chrome/pull/49#issuecomment-1710758280

I've made minimal changes to allow chrome/chromedriver to be updated, wasn't sure if you were intending to rework anything else here

markhobson commented 10 months ago

Thanks @drewheasman! I'll take a look soon :)

markhobson commented 10 months ago

Hi @drewheasman, thanks for the PR. I encountered problems building your branch due to the different layout of the newer ChromeDriver zips. Your changes were similar to my work-in-progress though which I've now pushed to the branch chrome-for-testing.

Unfortunately this branch fails the tests in ./build.sh due to Chrome crashing:

   [INFO] -------------------------------------------------------
   [INFO]  T E S T S
   [INFO] -------------------------------------------------------
   [INFO] Running org.hobsoft.docker.mavenchrome.BrowserTest
   Starting ChromeDriver 119.0.6045.105 (38c72552c5e15ba9b3117c0967a0fd105072d7c6-refs/branch-heads/6045@{#1103}) on port 6513
   Only local connecti[o1n7s0 0ar34e0 1a1ll1.ow42e1d].
   [SPlEeVEaRsEe ]s: ebe inhdt(t)p sf:a/i/lcherdo:m Ceadrnniovter .acsshrigomn irume.qouregs/tesde caudrdirtyes-cso (n9s9id)
   erations for suggestions on keeping ChromeDriver safe.
   ChromeDriver was started successfully.
   [ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.475 s <<< FAILURE! - in org.hobsoft.docker.mavenchrome.BrowserTest
   [ERROR] org.hobsoft.docker.mavenchrome.BrowserTest.canDuck  Time elapsed: 0.446 s  <<< ERROR!
   org.openqa.selenium.SessionNotCreatedException: 
   session not created: Chrome failed to start: exited normally.
     (session not created: DevToolsActivePort file doesn't exist)
     (The process started from chrome location /opt/google/chrome/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
   Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
   System info: host: 'c365d50409d2', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '6.2.0-36-generic', java.version: '1.8.0_372'
   Driver info: driver.version: ChromeDriver
   remote stacktrace: #0 0x55ec3f7175e3 <unknown>
   #1 0x55ec3f3da0b7 <unknown>
   #2 0x55ec3f410e55 <unknown>
   #3 0x55ec3f40db81 <unknown>
   #4 0x55ec3f45847f <unknown>
   #5 0x55ec3f44ecc3 <unknown>
   #6 0x55ec3f41a0e4 <unknown>
   #7 0x55ec3f41b0ae <unknown>
   #8 0x55ec3f6ddce1 <unknown>
   #9 0x55ec3f6e1b7e <unknown>
   #10 0x55ec3f6cb4b5 <unknown>
   #11 0x55ec3f6e27d6 <unknown>
   #12 0x55ec3f6aedbf <unknown>
   #13 0x55ec3f705748 <unknown>
   #14 0x55ec3f705917 <unknown>
   #15 0x55ec3f716773 <unknown>
   #16 0x7ff2dd17bb43 <unknown>

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
    at org.hobsoft.docker.mavenchrome.BrowserTest.setUp(BrowserTest.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)

I'm guessing something has changed with recent versions of Chrome, perhaps to do with the --no-sandbox that we invoke it with.

I'd be interested if others encounter the same and welcome any ideas.

drewheasman commented 10 months ago

Ah that's a shame, I had some issues running the bats script (not used this framework for testing before) so I had just ensured the build ran, and ran the test class separately, so apologies for costing you some time trying out.

I'll try to have a look at your branch also to see if I can help

markhobson commented 10 months ago

No problem, thanks for nudging me to take another look :)

drewheasman commented 10 months ago

So I bumped Selenium to latest (4.15.0, not committed to this branch) and I can get the tests to run against JDK17 (had some issues with some of the others that not looked into), but this is probably because Selenium now does the browser/driver management https://www.selenium.dev/documentation/selenium_manager/

If it's ok to bump the Selenium version, maybe could store the driver binary in ~/.cache/selenium and make sure stable chrome is preinstalled as per that page?

markhobson commented 10 months ago

Thanks for the suggestion. I've upgraded Selenium to 4.13.0 (the latest that supports Java 8) and switched the tests to use DuckDuckGo Lite - for some reason the new DuckDuckGo site crashes Chrome in the tests.

Hopefully the latest images should work for you now!