Add DontLaunchOnConnectFailure and refine server connection logic

Introduced the `DontLaunchOnConnectFailure` option to prevent browser launch on connection failure when connecting to a Playwright server. Enhanced environment variable handling for server address based on browser type, improving flexibility and reliability in connection scenarios.
This commit is contained in:
2025-08-29 01:38:00 -04:00
parent 6f4ca22b6a
commit 8b4e43c40f

View File

@@ -59,6 +59,10 @@ type PlayWrightBrowserOptions struct {
// PlayWrightServerAddress is the address of a PlayWright server to connect to. // PlayWrightServerAddress is the address of a PlayWright server to connect to.
// Defaults to the value of the environment variable PLAYWRIGHT_SERVER_ADDRESS. // Defaults to the value of the environment variable PLAYWRIGHT_SERVER_ADDRESS.
PlayWrightServerAddress string PlayWrightServerAddress string
// DontLaunchOnConnectFailure will, if set, not launch the browser if the connection to the PlayWright server,
// and return an error if the connection fails.
DontLaunchOnConnectFailure bool
} }
func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie { func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie {
@@ -90,7 +94,7 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
Browser: PlayWrightBrowserSelectionFirefox, Browser: PlayWrightBrowserSelectionFirefox,
Timeout: &thirtySeconds, Timeout: &thirtySeconds,
DarkMode: false, DarkMode: false,
PlayWrightServerAddress: os.Getenv("PLAYWRIGHT_SERVER_ADDRESS"), PlayWrightServerAddress: "",
} }
for _, o := range opts { for _, o := range opts {
@@ -112,7 +116,9 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
if o.DarkMode { if o.DarkMode {
opt.DarkMode = true opt.DarkMode = true
} }
if o.PlayWrightServerAddress != "" {
opt.PlayWrightServerAddress = o.PlayWrightServerAddress
}
opt.ShowBrowser = o.ShowBrowser opt.ShowBrowser = o.ShowBrowser
} }
@@ -137,24 +143,41 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
switch opt.Browser { switch opt.Browser {
case PlayWrightBrowserSelectionChromium: case PlayWrightBrowserSelectionChromium:
bt = pw.Chromium bt = pw.Chromium
if opt.PlayWrightServerAddress == "" {
opt.PlayWrightServerAddress = os.Getenv("PLAYWRIGHT_SERVER_ADDRESS_CHROMIUM")
}
case PlayWrightBrowserSelectionFirefox: case PlayWrightBrowserSelectionFirefox:
bt = pw.Firefox bt = pw.Firefox
if opt.PlayWrightServerAddress == "" {
opt.PlayWrightServerAddress = os.Getenv("PLAYWRIGHT_SERVER_ADDRESS_FIREFOX")
}
case PlayWrightBrowserSelectionWebKit: case PlayWrightBrowserSelectionWebKit:
bt = pw.WebKit bt = pw.WebKit
if opt.PlayWrightServerAddress == "" {
opt.PlayWrightServerAddress = os.Getenv("PLAYWRIGHT_SERVER_ADDRESS_WEBKIT")
}
default: default:
return nil, ErrInvalidBrowserSelection return nil, ErrInvalidBrowserSelection
} }
var browser playwright.Browser var browser playwright.Browser
var launch = true
if opt.PlayWrightServerAddress != "" { if opt.PlayWrightServerAddress != "" {
launch = false
browser, err = bt.Connect(opt.PlayWrightServerAddress, playwright.BrowserTypeConnectOptions{}) browser, err = bt.Connect(opt.PlayWrightServerAddress, playwright.BrowserTypeConnectOptions{})
if err != nil { if err != nil {
if opt.DontLaunchOnConnectFailure {
return nil, err return nil, err
} }
} else { launch = true
}
}
if launch {
browser, err = bt.Launch(playwright.BrowserTypeLaunchOptions{ browser, err = bt.Launch(playwright.BrowserTypeLaunchOptions{
Headless: playwright.Bool(!opt.ShowBrowser), Headless: playwright.Bool(!opt.ShowBrowser),
}) })