@@ -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,28 @@ 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 ().setHeadless(capabilities.headless).setArgs(capabilities.launchOptions.asJava)
31+
32+ val browserType : BrowserType = capabilities match
33+ case capabilities : PlaywrightJSEnv .ChromeOptions =>
3334 playwright.chromium()
34- case " firefox" =>
35+ case capabilities : PlaywrightJSEnv .FirefoxOptions =>
36+ launchOptions.setFirefoxUserPrefs(
37+ capabilities
38+ .firefoxUserPrefs
39+ // .view
40+ // .mapValues(_.asInstanceOf[java.lang.Object])
41+ // .toMap
42+ .asJava)
3543 playwright.firefox()
36- case " webkit " =>
44+ case capabilities : PlaywrightJSEnv . WebkitOptions =>
3745 playwright.webkit()
38- case _ => throw new IllegalArgumentException (" Invalid browser type" )
39- }
40- val browser = browserType.launch(launchOptions.setHeadless(headless))
46+
47+ val browser = browserType.launch(launchOptions)
4148 scribe.info(
4249 s " Creating browser ${browser.browserType().name()} version ${browser.version()} with ${browser.hashCode()}"
4350 )
@@ -59,17 +66,13 @@ object PageFactory {
5966 })
6067
6168 def createPage (
62- browserName : String ,
63- headless : Boolean ,
64- launchOptions : LaunchOptions
69+ capabilities : PlaywrightJSEnv .Capabilities
6570 ): Resource [IO , Page ] =
6671 for {
6772 playwright <- playWrightBuilder
6873 browser <- browserBuilder(
6974 playwright,
70- browserName,
71- headless,
72- launchOptions
75+ capabilities
7376 )
7477 page <- pageBuilder(browser)
7578 } yield page
0 commit comments