@@ -2,15 +2,16 @@ package io.github.thijsbroersen.jsenv.playwright
22
33import com .microsoft .playwright .Browser
44import com .microsoft .playwright .BrowserType
5- import com .microsoft .playwright .BrowserType .LaunchOptions
65import com .microsoft .playwright .Page
76import com .microsoft .playwright .Playwright
87
98import cats .effect .IO
109import cats .effect .Resource
1110
11+ import scala .jdk .CollectionConverters ._
12+
1213object PageFactory {
13- def pageBuilder (browser : Browser ): Resource [IO , Page ] =
14+ private def pageBuilder (browser : Browser ): Resource [IO , Page ] =
1415 Resource .make(IO {
1516 val pg = browser.newContext().newPage()
1617 scribe.debug(s " Creating page ${pg.hashCode()} " )
@@ -22,22 +23,30 @@ object PageFactory {
2223
2324 private def browserBuilder (
2425 playwright : Playwright ,
25- browserName : String ,
26- headless : Boolean ,
27- launchOptions : LaunchOptions
26+ capabilities : PlaywrightJSEnv .Capabilities
2827 ): Resource [IO , Browser ] =
2928 Resource .make(IO {
3029
31- val browserType : BrowserType = browserName.toLowerCase match {
32- case " chromium" | " chrome" =>
30+ val launchOptions = new BrowserType .LaunchOptions ()
31+ .setHeadless(capabilities.headless)
32+ .setArgs(capabilities.launchOptions.asJava)
33+
34+ val browserType : BrowserType = capabilities match
35+ case capabilities : PlaywrightJSEnv .ChromeOptions =>
3336 playwright.chromium()
34- case " firefox" =>
37+ case capabilities : PlaywrightJSEnv .FirefoxOptions =>
38+ launchOptions.setFirefoxUserPrefs(
39+ capabilities
40+ .firefoxUserPrefs
41+ // .view
42+ // .mapValues(_.asInstanceOf[java.lang.Object])
43+ // .toMap
44+ .asJava)
3545 playwright.firefox()
36- case " webkit " =>
46+ case capabilities : PlaywrightJSEnv . WebkitOptions =>
3747 playwright.webkit()
38- case _ => throw new IllegalArgumentException (" Invalid browser type" )
39- }
40- val browser = browserType.launch(launchOptions.setHeadless(headless))
48+
49+ val browser = browserType.launch(launchOptions)
4150 scribe.info(
4251 s " Creating browser ${browser.browserType().name()} version ${browser.version()} with ${browser.hashCode()}"
4352 )
@@ -59,17 +68,13 @@ object PageFactory {
5968 })
6069
6170 def createPage (
62- browserName : String ,
63- headless : Boolean ,
64- launchOptions : LaunchOptions
71+ capabilities : PlaywrightJSEnv .Capabilities
6572 ): Resource [IO , Page ] =
6673 for {
6774 playwright <- playWrightBuilder
6875 browser <- browserBuilder(
6976 playwright,
70- browserName,
71- headless,
72- launchOptions
77+ capabilities
7378 )
7479 page <- pageBuilder(browser)
7580 } yield page
0 commit comments