Git Product home page Git Product logo

Comments (5)

jtnord avatar jtnord commented on August 27, 2024

geckodriver and the ATH need to be aligned (there is a certain range of compatability and firefox is moving towards a new BiDi mode for webdriver (whatever that means?) - however we are not aligning them AFAICT and they are updated differently

https://github.com/jenkinsci/acceptance-test-harness/blob/master/src/main/resources/ath-container/Dockerfile#L40-L53

It may be worth rethiking how we run the ATH so that we use selenium/firefox in a docker container separate from the SUT (and maven) aka remote-web-driver. This is how I always run locally and tend to not hit these types of issues.

from acceptance-test-harness.

raul-arabaolaza avatar raul-arabaolaza commented on August 27, 2024

It may be worth rethiking how we run the ATH so that we use selenium/firefox in a docker container separate from the SUT (and maven) aka remote-web-driver. This is how I always run locally and tend to not hit these types of issues.

Agree, That is also the way I run it since I decided I could not keep a native out of date web browser installation and keep a safe laptop at the same time...

from acceptance-test-harness.

julieheard avatar julieheard commented on August 27, 2024

Hi, I have done some testing and I am running the ATH tests using [selenium/standalone-firefox:4.11.0] and it is failing (https://hub.docker.com/layers/selenium/standalone-firefox/4.11.0/images/sha256-50a4620105b05ac3472065caf13f41209a894da0441a85816303c8d888ff5260?context=explore)

When running this locally, I am getting lots of tests failing with the same error message and stack trace. This may mean that when upgrading to a newer version of firefox we have some patching to do to get it working smoothly.

Here is an example of a test failing:

[ERROR] plugins.GroovyPluginTest.run_groovy -- Time elapsed: 0.345 s <<< ERROR!
com.google.inject.ProvisionException:
Unable to provision, see the following errors:

1) [Guice/ErrorInCustomProvider]: SessionNotCreatedException: Could not start a new session. Response code 500. Message: Could not start a new session. Unable to obtain: Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 116.0, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: {httpProxy: 192.168.176.1:62473, proxyType: manual, sslProxy: 192.168.176.1:62473}, se:noVncPort: 7900, se:vncEnabled: true}, error class LinkedHashMap cannot be cast to class Proxy (LinkedHashMap is in module java.base of loader 'bootstrap'; Proxy is in unnamed module of loader Bootstrap$PossessiveClassLoader @404b9385)
For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location/
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.90.1-microsoft-standard-WSL2', java.version: '11.0.20'
Driver info: driver.version: unknown
Host info: host: 'f05f320f3505', ip: '172.17.0.2'
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.90.1-microsoft-standard-WSL2', java.version: '11.0.20'
Driver info: driver.version: unknown
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.15'
Driver info: RemoteWebDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: true, browserName: firefox, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: Proxy(manual, http=192.168....}]}]
Capabilities {acceptInsecureCerts: true, browserName: firefox, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: Proxy(manual, http=192.168....}
  at FallbackConfig.createWebDriver(FallbackConfig.java:315)
      \_ installed by: World -> Modules$OverrideModule -> Modules$OverrideModule -> FallbackConfig
  at DiagnosticRule.driver(DiagnosticRule.java:18)
      \_ for field driver
  while locating DiagnosticRule

Learn more:
  https://github.com/google/guice/wiki/ERROR_IN_CUSTOM_PROVIDER

1 error

======================
Full classname legend:
======================
Bootstrap$PossessiveClassLoader: "org.openqa.selenium.grid.Bootstrap$PossessiveClassLoader"
DiagnosticRule:                  "org.jenkinsci.test.acceptance.junit.DiagnosticRule"
FallbackConfig:                  "org.jenkinsci.test.acceptance.FallbackConfig"
Modules$OverrideModule:          "com.google.inject.util.Modules$OverrideModule"
Proxy:                           "org.openqa.selenium.Proxy"
RemoteWebDriver:                 "org.openqa.selenium.remote.RemoteWebDriver"
SessionNotCreatedException:      "org.openqa.selenium.SessionNotCreatedException"
World:                           "org.jenkinsci.test.acceptance.guice.World"
========================
End of classname legend:
========================

        at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:251)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1151)
        at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1186)
        at org.jenkinsci.test.acceptance.junit.JenkinsAcceptanceTestRule$1.addRule(JenkinsAcceptanceTestRule.java:139)
        at org.jenkinsci.test.acceptance.junit.JenkinsAcceptanceTestRule$1.collectGlobalRules(JenkinsAcceptanceTestRule.java:115)
        at org.jenkinsci.test.acceptance.junit.JenkinsAcceptanceTestRule$1.decorateWithRules(JenkinsAcceptanceTestRule.java:84)
        at org.jenkinsci.test.acceptance.junit.JenkinsAcceptanceTestRule$1.evaluate(JenkinsAcceptanceTestRule.java:53)
        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:257)
        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)
Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: Could not start a new session. Unable to obtain: Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 116.0, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: {httpProxy: 192.168.176.1:62473, proxyType: manual, sslProxy: 192.168.176.1:62473}, se:noVncPort: 7900, se:vncEnabled: true}, error class java.util.LinkedHashMap cannot be cast to class org.openqa.selenium.Proxy (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; org.openqa.selenium.Proxy is in unnamed module of loader org.openqa.selenium.grid.Bootstrap$PossessiveClassLoader @404b9385)
For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location/
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.90.1-microsoft-standard-WSL2', java.version: '11.0.20'
Driver info: driver.version: unknown
Host info: host: 'f05f320f3505', ip: '172.17.0.2'
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.15.90.1-microsoft-standard-WSL2', java.version: '11.0.20'
Driver info: driver.version: unknown
Build info: version: '4.11.0', revision: '040bc5406b'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.15'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: true, browserName: firefox, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: Proxy(manual, http=192.168....}]}]
Capabilities {acceptInsecureCerts: true, browserName: firefox, moz:debuggerAddress: true, moz:firefoxOptions: {prefs: {dom.disable_beforeunload: false, dom.max_chrome_script_run_time: 600000, dom.max_script_run_time: 600000, intl.accept_languages: en}}, proxy: Proxy(manual, http=192.168....}
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:140)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:96)
        at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:68)
        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)
        at org.openqa.selenium.remote.TracedCommandExecutor.execute(TracedCommandExecutor.java:51)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:518)
        at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:232)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:159)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:139)
        at org.jenkinsci.test.acceptance.FallbackConfig.buildRemoteWebDriver(FallbackConfig.java:162)
        at org.jenkinsci.test.acceptance.FallbackConfig.createWebDriver(FallbackConfig.java:149)
        at org.jenkinsci.test.acceptance.FallbackConfig.createWebDriver(FallbackConfig.java:315)
        at org.jenkinsci.test.acceptance.FallbackConfig$$FastClassByGuice$$a7f2a.GUICE$TRAMPOLINE(<generated>)
        at org.jenkinsci.test.acceptance.FallbackConfig$$FastClassByGuice$$a7f2a.apply(<generated>)
        at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.doProvision(ProviderMethod.java:260)
        at com.google.inject.internal.ProviderMethod.doProvision(ProviderMethod.java:171)
        at com.google.inject.internal.InternalProviderInstanceBindingImpl$CyclicFactory.provision(InternalProviderInstanceBindingImpl.java:185)
        at com.google.inject.internal.InternalProviderInstanceBindingImpl$CyclicFactory.get(InternalProviderInstanceBindingImpl.java:162)
        at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
        at org.jenkinsci.test.acceptance.guice.TestLifecycle.lambda$scope$0(TestLifecycle.java:58)
        at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
        at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:50)
        at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:146)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:124)
        at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
        at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
        at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1148)
        ... 25 more

I think the Unable to obtain: Capabilities issue is coming from:

private FirefoxOptions buildFirefoxOptions(TestName testName) throws IOException {
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.addPreference(LANGUAGE_SELECTOR, "en");
// Config screen with many plugins can cause FF to complain JS takes too long to complete - set longer timeout
firefoxOptions.addPreference(DOM_MAX_SCRIPT_RUN_TIME, (int)getElasticTime().seconds(600));
firefoxOptions.addPreference(DOM_MAX_CHROME_SCRIPT_RUN_TIME, (int)getElasticTime().seconds(600));
firefoxOptions.addPreference(DOM_DISABLE_BEFOREUNLOAD, false);
if (HarRecorder.isCaptureHarEnabled()) {
firefoxOptions.setProxy(createSeleniumProxy(testName.get()));
}
if (System.getenv("FIREFOX_BIN") != null) {
firefoxOptions.setBinary(System.getenv("FIREFOX_BIN"));
}
return firefoxOptions;
}

from acceptance-test-harness.

jtnord avatar jtnord commented on August 27, 2024

error class java.util.LinkedHashMap cannot be cast to class org.openqa.selenium.Proxy oohkay....

from acceptance-test-harness.

julieheard avatar julieheard commented on August 27, 2024

Can confirm that this works in 4.12.0 as that contains this fix. By works I mean that the tests pass.

from acceptance-test-harness.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.