serenity-bdd / serenity-core

Serenity BDD is a test automation library designed to make writing automated acceptance tests easier, and more fun.
http://serenity-bdd.info
Other
714 stars 514 forks source link

Chrome extensions via serenity.conf #3423

Open pablowatson opened 3 months ago

pablowatson commented 3 months ago

I am trying include a chrome extension via the serenity.conf like the one below.

# Some sample Serenity configuration options

#
# WebDriver configuration
#
webdriver {
  driver = chrome
  autodownload = true

  capabilities{

      "goog:chromeOptions" {
           args = [
                    "start-maximized", "test-type", "no-sandbox", "ignore-certificate-errors",
                    "disable-popup-blocking", "disable-default-apps", "disable-extensions-file-access-check"
                    "incognito", "disable-infobars", "disable-gpu", "remote-allow-origins=*"
                   ]
           extensions = [src/test/resources/Dark-Reader.crx]
      }
  }

}
headless.mode = false

serenity {
  test.root = starter
  compress.filenames = false
//  take.screenshots = FOR_FAILURES
}

However when do that, I get the error below:

net.thucydides.core.webdriver.DriverConfigurationError: WebDriver was unable to create a new instance of type class org.openqa.selenium.chrome.ChromeDriver
WebDriver reported the following message: Could not start a new session. Response code 500. Message: session not created: cannot process extension #2
from unknown error: cannot base64 decode 
Host info: host: 'PWATSON-THINKPA', ip: '192.168.0.125'
Build info: version: '4.14.1', revision: '03f8ede370'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '19.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: false, browserName: chrome, goog:chromeOptions: {args: [start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, remote-allow-origins=*], binary: C:\Program Files (x86)\Goog..., extensions: [Q3IyNAMAAAAdBQAAEqwECqYCMII..., src/test/resources/Dark-Rea...]}}]}]
See below for more details.
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:152)
    at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:178)
    at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:169)
    at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:120)
    at net.thucydides.core.webdriver.WebDriverFacade.get(WebDriverFacade.java:209)
    at net.serenitybdd.core.pages.PageObject.openPageAtUrl(PageObject.java:982)
    at net.serenitybdd.core.pages.PageObject.openUrl(PageObject.java:928)
    at net.serenitybdd.screenplay.actions.OpenUrl.performAs(OpenUrl.java:18)
    at net.serenitybdd.screenplay.actions.OpenUrl$ByteBuddy$7rxSexBZ.performAs$accessor$5sknVZgW(Unknown Source)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at net.thucydides.core.steps.StepInterceptor.invokeMethod(StepInterceptor.java:519)
    at net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:499)
    at net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:471)
    at net.thucydides.core.steps.StepInterceptor.runOrSkipMethod(StepInterceptor.java:213)
    at net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:200)
    at net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:92)
    at net.thucydides.core.steps.ProxyConfiguration$InterceptorDispatcher.intercept(ProxyConfiguration.java:51)
    at net.serenitybdd.screenplay.actions.OpenUrl$ByteBuddy$7rxSexBZ.performAs(Unknown Source)
    at net.serenitybdd.screenplay.Actor.performTask(Actor.java:299)
    at net.serenitybdd.screenplay.Actor.perform(Actor.java:274)
    at net.serenitybdd.screenplay.Actor.attemptsTo(Actor.java:215)
    at net.serenitybdd.screenplay.Actor.attemptsTo(Actor.java:222)
    at starter.wikipedia.WhenSearchingForTerms.searchBySingleKeyword(WhenSearchingForTerms.java:18)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: session not created: cannot process extension #2
from unknown error: cannot base64 decode 
Host info: host: 'PWATSON-THINKPA', ip: '192.168.0.125'
Build info: version: '4.14.1', revision: '03f8ede370'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '19.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: false, browserName: chrome, goog:chromeOptions: {args: [start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, remote-allow-origins=*], binary: C:\Program Files (x86)\Goog..., extensions: [Q3IyNAMAAAAdBQAAEqwECqYCMII..., src/test/resources/Dark-Rea...]}}]}]
    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.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:200)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:175)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:163)
    at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:108)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:83)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:72)
    at net.serenitybdd.core.webdriver.driverproviders.ChromeDriverProvider.newInstance(ChromeDriverProvider.java:73)
    at net.thucydides.core.webdriver.WebDriverFactory.createWebDriver(WebDriverFactory.java:164)
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:142)
    ... 26 more

Could not start a new session. Response code 500. Message: session not created: cannot process extension #2
from unknown error: cannot base64 decode 
Host info: host: 'PWATSON-THINKPA', ip: '192.168.0.125'
Build info: version: '4.14.1', revision: '03f8ede370'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '19.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: false, browserName: chrome, goog:chromeOptions: {args: [start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, remote-allow-origins=*], binary: C:\Program Files (x86)\Goog..., extensions: [Q3IyNAMAAAAdBQAAEqwECqYCMII..., src/test/resources/Dark-Rea...]}}]}]
org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: session not created: cannot process extension #2
from unknown error: cannot base64 decode 
Host info: host: 'PWATSON-THINKPA', ip: '192.168.0.125'
Build info: version: '4.14.1', revision: '03f8ede370'
System info: os.name: 'Windows 11', os.arch: 'amd64', os.version: '10.0', java.version: '19.0.2'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Command: [null, newSession {capabilities=[Capabilities {acceptInsecureCerts: false, browserName: chrome, goog:chromeOptions: {args: [start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, start-maximized, test-type, no-sandbox, ignore-certificate-errors, disable-popup-blocking, disable-default-apps, disable-extensions-file-acc..., incognito, disable-infobars, disable-gpu, remote-allow-origins=*], binary: C:\Program Files (x86)\Goog..., extensions: [Q3IyNAMAAAAdBQAAEqwECqYCMII..., src/test/resources/Dark-Rea...]}}]}]
    at app//org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:140)
    at app//org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:96)
    at app//org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:68)
    at app//org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)
    at app//org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:200)
    at app//org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:175)
    at app//org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:602)
    at app//org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
    at app//org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:163)
    at app//org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:108)
    at app//org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
    at app//org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:83)
    at app//org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:72)
    at app//net.serenitybdd.core.webdriver.driverproviders.ChromeDriverProvider.newInstance(ChromeDriverProvider.java:73)
    at app//net.thucydides.core.webdriver.WebDriverFactory.createWebDriver(WebDriverFactory.java:164)
    at app//net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:142)
    at app//net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:178)
    at app//net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:169)
    at app//net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:120)
    at app//net.thucydides.core.webdriver.WebDriverFacade.get(WebDriverFacade.java:209)
    at app//net.serenitybdd.core.pages.PageObject.openPageAtUrl(PageObject.java:982)
    at app//net.serenitybdd.core.pages.PageObject.openUrl(PageObject.java:928)
    at app//net.serenitybdd.screenplay.actions.OpenUrl.performAs(OpenUrl.java:18)
    at app//net.serenitybdd.screenplay.actions.OpenUrl$ByteBuddy$7rxSexBZ.performAs$accessor$5sknVZgW(Unknown Source)
    at java.base@19.0.2/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base@19.0.2/java.lang.reflect.Method.invoke(Method.java:578)
    at app//net.thucydides.core.steps.StepInterceptor.invokeMethod(StepInterceptor.java:519)
    at app//net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:499)
    at app//net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:471)
    at app//net.thucydides.core.steps.StepInterceptor.runOrSkipMethod(StepInterceptor.java:213)
    at app//net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:200)
    at app//net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:92)
    at app//net.thucydides.core.steps.ProxyConfiguration$InterceptorDispatcher.intercept(ProxyConfiguration.java:51)
    at app//net.serenitybdd.screenplay.actions.OpenUrl$ByteBuddy$7rxSexBZ.performAs(Unknown Source)
    at app//net.serenitybdd.screenplay.Actor.performTask(Actor.java:299)
    at app//net.serenitybdd.screenplay.Actor.perform(Actor.java:274)
    at app//net.serenitybdd.screenplay.Actor.attemptsTo(Actor.java:215)
    at app//net.serenitybdd.screenplay.Actor.attemptsTo(Actor.java:222)
    at app//starter.wikipedia.WhenSearchingForTerms.searchBySingleKeyword(WhenSearchingForTerms.java:18)
    at java.base@19.0.2/java.lang.reflect.Method.invoke(Method.java:578)
    at java.base@19.0.2/java.util.ArrayList.forEach(ArrayList.java:1511)
    at java.base@19.0.2/java.util.ArrayList.forEach(ArrayList.java:1511)

Does anyone have any ideas what I am doing wrong here?

JefferCardenas commented 1 month ago

I am getting the same error, I have Serenity version 4.1.13, Chrome 124 and I am running them on a Linux server. These are my configurations:

headless.mode = true

webdriver {
  driver = chrome
  autodownload = true
  capabilities {
    browserName = "chrome"
    acceptInsecureCerts = true
    "goog:chromeOptions" {
        prefs {
            download.prompt_for_download=false,
            profile.default_content_settings.popups=0,
            download.default_directory = ${user.dir}"\\src\\test\\resources\\descargas",
            download.directory_upgrade = true,
            safebrowsing.enabled = true,
            plugins.always_open_pdf_externally = true
        }
    }
  }
}

chrome.switches = """--window-size=1920,1080;--start-maximized;--test-type;--no-sandbox;--ignore-certificate-errors;
                   --disable-popup-blocking;--disable-default-apps;--disable-extensions-file-access-check;
                   --incognito;--disable-infobars,--disable-gpu;--remote-allow-origins=*"""
wakaleo commented 1 month ago

In theory you can do this with the W3c properties but I haven't been able to get it to work, either in Serenity or in plain Selenium. Getting it working with plain Selenium would be the first step.

JefferCardenas commented 1 month ago

If I have my project with Screenplay, how would I make it work with Selenium Simple?

JefferCardenas commented 1 month ago

The strange thing is that it works locally for me. I use Windows 11, but when I run them on the server with Linux, it fails. I have 6 scenarios; it manages to execute the first one, but then it can't open the Chrome driver for the following ones. I see that the server's capacity is being fully consumed.