diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6893dda..61d3112 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,10 +14,12 @@ jobs: matrix: jdk: [8, 11, 17, 21] os: [ubuntu-latest, windows-latest] + browser: ["${{ vars.E2E_TEST_BROWSER }}"] experimental: [false] include: - jdk: 11 os: macos-14 + browser: chrome experimental: true runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} @@ -40,5 +42,7 @@ jobs: run: corepack prepare pnpm@8.8.0 --activate - name: Run tests uses: coactions/setup-xvfb@v1 + env: + E2E_TEST_BROWSER: ${{ matrix.browser }} with: run: sbt scalafmtSbtCheck scalafmtCheckAll test "${{ steps.coursier-cache.outputs.cache-hit-coursier && 'scripted' || 'scriptedSequentialPerModule' }}${{ matrix.jdk == 8 && ' sbt-scalajs-esbuild/* sbt-scalajs-esbuild-electron/basic-project sbt-scalajs-esbuild-electron/e2e-test-playwright-node sbt-scalajs-esbuild-electron/electron-builder' || '' }}" diff --git a/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/basic-web-project/html.sbt b/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/basic-web-project/html.sbt index 4f8e644..b4c4ca5 100644 --- a/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/basic-web-project/html.sbt +++ b/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/basic-web-project/html.sbt @@ -1,5 +1,9 @@ InputKey[Unit]("html") := { + val log = streams.value.log + import org.openqa.selenium.WebDriver + import org.openqa.selenium.chrome.ChromeDriver + import org.openqa.selenium.chrome.ChromeOptions import org.openqa.selenium.firefox.FirefoxDriver import org.openqa.selenium.firefox.FirefoxOptions import org.scalatest.matchers.should.Matchers @@ -22,10 +26,9 @@ InputKey[Unit]("html") := { with Eventually with IntegrationPatience with Inside { - val webDriverOptions: FirefoxOptions = { - val value = new FirefoxOptions + implicit val webDriver: WebDriver = { // arguments recommended by https://itnext.io/how-to-run-a-headless-chrome-browser-in-selenium-webdriver-c5521bc12bf0 - value.addArguments( + val arguments = Seq( "--disable-gpu", "--window-size=1920,1200", "--ignore-certificate-errors", @@ -34,9 +37,19 @@ InputKey[Unit]("html") := { "--disable-dev-shm-usage", "--headless" ) - value + sys.env.get("E2E_TEST_BROWSER").map(_.toLowerCase).getOrElse("chrome") match { + case "chrome" => + val options = new ChromeOptions + options.addArguments(arguments: _*) + new ChromeDriver(options) + case "firefox" => + val options = new FirefoxOptions + options.addArguments(arguments: _*) + new FirefoxDriver(options) + case unhandled => + sys.error(s"Unhandled browser [$unhandled]") + } } - implicit val webDriver: WebDriver = new FirefoxDriver(webDriverOptions) } import webBrowser._ diff --git a/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/multiple-entry-points/html.sbt b/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/multiple-entry-points/html.sbt index 09ca9e4..3ed689d 100644 --- a/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/multiple-entry-points/html.sbt +++ b/sbt-scalajs-esbuild-web/src/sbt-test/sbt-scalajs-esbuild-web/multiple-entry-points/html.sbt @@ -2,6 +2,8 @@ import scala.util.control.NonFatal InputKey[Unit]("html") := { import org.openqa.selenium.WebDriver + import org.openqa.selenium.chrome.ChromeDriver + import org.openqa.selenium.chrome.ChromeOptions import org.openqa.selenium.firefox.FirefoxDriver import org.openqa.selenium.firefox.FirefoxOptions import org.scalatest.matchers.should.Matchers @@ -24,10 +26,9 @@ InputKey[Unit]("html") := { with Eventually with IntegrationPatience with Inside { - val webDriverOptions: FirefoxOptions = { - val value = new FirefoxOptions + implicit val webDriver: WebDriver = { // arguments recommended by https://itnext.io/how-to-run-a-headless-chrome-browser-in-selenium-webdriver-c5521bc12bf0 - value.addArguments( + val arguments = Seq( "--disable-gpu", "--window-size=1920,1200", "--ignore-certificate-errors", @@ -36,9 +37,19 @@ InputKey[Unit]("html") := { "--disable-dev-shm-usage", "--headless" ) - value + sys.env.get("E2E_TEST_BROWSER").map(_.toLowerCase).getOrElse("chrome") match { + case "chrome" => + val options = new ChromeOptions + options.addArguments(arguments: _*) + new ChromeDriver(options) + case "firefox" => + val options = new FirefoxOptions + options.addArguments(arguments: _*) + new FirefoxDriver(options) + case unhandled => + sys.error(s"Unhandled browser [$unhandled]") + } } - implicit val webDriver: WebDriver = new FirefoxDriver(webDriverOptions) } import webBrowser._ diff --git a/sbt-web-scalajs-esbuild/src/sbt-test/sbt-web-scalajs-esbuild/basic-project/html.sbt b/sbt-web-scalajs-esbuild/src/sbt-test/sbt-web-scalajs-esbuild/basic-project/html.sbt index b3bc71d..29c2651 100644 --- a/sbt-web-scalajs-esbuild/src/sbt-test/sbt-web-scalajs-esbuild/basic-project/html.sbt +++ b/sbt-web-scalajs-esbuild/src/sbt-test/sbt-web-scalajs-esbuild/basic-project/html.sbt @@ -1,5 +1,7 @@ InputKey[Unit]("html") := { import org.openqa.selenium.WebDriver + import org.openqa.selenium.chrome.ChromeDriver + import org.openqa.selenium.chrome.ChromeOptions import org.openqa.selenium.firefox.FirefoxDriver import org.openqa.selenium.firefox.FirefoxOptions import org.scalatest.matchers.should.Matchers @@ -20,10 +22,9 @@ InputKey[Unit]("html") := { with Matchers with Eventually with IntegrationPatience { - val webDriverOptions: FirefoxOptions = { - val value = new FirefoxOptions + implicit val webDriver: WebDriver = { // arguments recommended by https://itnext.io/how-to-run-a-headless-chrome-browser-in-selenium-webdriver-c5521bc12bf0 - value.addArguments( + val arguments = Seq( "--disable-gpu", "--window-size=1920,1200", "--ignore-certificate-errors", @@ -32,9 +33,19 @@ InputKey[Unit]("html") := { "--disable-dev-shm-usage", "--headless" ) - value + sys.env.get("E2E_TEST_BROWSER").map(_.toLowerCase).getOrElse("chrome") match { + case "chrome" => + val options = new ChromeOptions + options.addArguments(arguments: _*) + new ChromeDriver(options) + case "firefox" => + val options = new FirefoxOptions + options.addArguments(arguments: _*) + new FirefoxDriver(options) + case unhandled => + sys.error(s"Unhandled browser [$unhandled]") + } } - implicit val webDriver: WebDriver = new FirefoxDriver(webDriverOptions) } import webBrowser._