A JavaScript environment for Scala.js (a JSEnv) running playwright. It is only build for Scala 3 (supported by Mill and SBT 2.x)
Playwright needs certain system dependencies read the docs
TLDR -> npx playwright install-deps
Add the following line to your project/plugins.sbt
// For Scala.js 1.x
libraryDependencies += "io.github.thijsbroersen" %% "scala-js-env-playwright" % "0.2.2"Add the following line to your build.sbt
Test / jsEnv := new PlaywrightJSEnv.chrome(
headless = true
)override def jsEnvConfig = JsEnvConfig.Playwright.chrome(
headless = true
)- This is a very early version. It may not work for all projects. It is tested on chrome/chromium and firefox.
- Few test cases are failing on webkit. Keep a watch on this space for updates.
- It works only with Scala.js 1.x
- Make sure the project is set up to use ModuleKind.ESModule in the Scala.js project.
- SBT 2.x
// For Scala.js 1.x scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.ESModule) }
- Mill
override def moduleKind = ModuleKind.ESModule
- Some projects which may need to use both Selenium and Playwright.
If it runs into google exception, add the following line to your
plugins.sbt
libraryDependencies += "com.google.guava" % "guava" % "33.0.0-jre"- chrome
- chromium (same as chrome)
- firefox
- webkit (experimental) - Works well on macOS. Mileage may vary on other platforms.
- This library can be used with any scala version 3.x
- This project is compiled with scala 3.7.2
- This library can be used with any sbt version 1.x
- This library can be used with playwright version 1.54.0
"com.microsoft.playwright" % "playwright" % "1.54.0"
- This library is tested on JDK17
jsEnv := new jsenv.playwright.PlaywrightJSEnv.chrome(
headless = true,
showLogs = false,
)The launch options are used to enable/disable the browser features. They can be overridden via the launchOptions parameter or extended via the additionalLaunchOptions parameter.
When not passing launchOptions, default launch options are as follows:
jsEnv := new jsenv.playwright.PlaywrightJSEnv.chrome(
launchOptions = List(
"--disable-extensions",
"--disable-web-security",
"--allow-running-insecure-content",
"--disable-site-isolation-trials",
"--allow-file-access-from-files",
"--disable-gpu"
)
)jsEnv := new jsenv.playwright.PlaywrightJSEnv.firefox(
firefoxUserPrefs = Map(
"security.mixed_content.block_active_content" -> false,
"security.mixed_content.upgrade_display_content" -> false,
"security.file_uri.strict_origin_policy" -> false
)
)jsEnv := new jsenv.playwright.PlaywrightJSEnv.webkit(
launchOptions = List(
"--disable-extensions",
"--disable-web-security",
"--allow-running-insecure-content",
"--disable-site-isolation-trials",
"--allow-file-access-from-files"
)
)It is work in progress. As a workaround introducing delay in the test cases may help to keep the browser alive.
debug parameter can be passed to the PlaywrightJSEnv constructor to enable debugging. It will also display the version of the browser which is used.
Test / jsEnv := new PlaywrightJSEnv.chrome(
headless = true,
showLogs = true,
debug = true
)