Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

ATH doesn't work on recent Firefox #1170

Open
timja opened this issue May 11, 2023 · 5 comments
Open

ATH doesn't work on recent Firefox #1170

timja opened this issue May 11, 2023 · 5 comments
Labels

Comments

@timja
Copy link
Member

timja commented May 11, 2023

What feature do you want to see added?

  • ATH to either have Firefox unpinned or automatically updated.
  • ATH using the latest version of Firefox

Upstream changes

see #1043
and
#1039

@jtnord
Copy link
Member

jtnord commented May 12, 2023

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.

@raul-arabaolaza
Copy link
Contributor

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...

@julieheard
Copy link
Contributor

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

@jtnord
Copy link
Member

jtnord commented Sep 4, 2023

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

@julieheard
Copy link
Contributor

julieheard commented Sep 5, 2023

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

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

No branches or pull requests

4 participants