Add viewport dimensions and dark mode support
This commit introduces optional viewport dimensions and dark mode support to the PlayWrightBrowserOptions struct and its usage. It ensures more control over browser display settings and improves flexibility when configuring browser contexts. Additionally, visibility checking logic in SetHidden was refined to avoid redundant operations.
This commit is contained in:
parent
0f9f6c776d
commit
7c0e44a22f
17
node.go
17
node.go
@ -87,8 +87,21 @@ func (n node) ForEach(selector string, fn func(Node) error) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n node) SetHidden(val bool) error {
|
func (n node) SetHidden(val bool) error {
|
||||||
_, err := n.locator.Evaluate(fmt.Sprintf(`(element) => element.hidden = %t;`, val), nil)
|
visible, err := n.locator.IsVisible()
|
||||||
return err
|
if err != nil {
|
||||||
|
return fmt.Errorf("error checking visibility: %w", err)
|
||||||
|
}
|
||||||
|
if visible == !val {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the hidden property
|
||||||
|
_, err = n.locator.Evaluate(fmt.Sprintf(`(element) => element.hidden = %t;`, val), nil)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error setting hidden property: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func escapeJavaScript(s string) string {
|
func escapeJavaScript(s string) string {
|
||||||
|
@ -36,6 +36,10 @@ const (
|
|||||||
PlayWrightBrowserSelectionWebKit PlayWrightBrowserSelection = "webkit"
|
PlayWrightBrowserSelectionWebKit PlayWrightBrowserSelection = "webkit"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Size struct {
|
||||||
|
Width int
|
||||||
|
Height int
|
||||||
|
}
|
||||||
type PlayWrightBrowserOptions struct {
|
type PlayWrightBrowserOptions struct {
|
||||||
UserAgent string // If empty, defaults to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
|
UserAgent string // If empty, defaults to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"
|
||||||
Browser PlayWrightBrowserSelection // If unset defaults to Firefox.
|
Browser PlayWrightBrowserSelection // If unset defaults to Firefox.
|
||||||
@ -46,6 +50,9 @@ type PlayWrightBrowserOptions struct {
|
|||||||
CookieJar
|
CookieJar
|
||||||
|
|
||||||
ShowBrowser bool // If false, browser will be headless
|
ShowBrowser bool // If false, browser will be headless
|
||||||
|
|
||||||
|
Dimensions Size
|
||||||
|
DarkMode bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie {
|
func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie {
|
||||||
@ -76,6 +83,7 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
|
|||||||
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
|
UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
|
||||||
Browser: PlayWrightBrowserSelectionFirefox,
|
Browser: PlayWrightBrowserSelectionFirefox,
|
||||||
Timeout: &thirtySeconds,
|
Timeout: &thirtySeconds,
|
||||||
|
DarkMode: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
@ -91,6 +99,13 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
|
|||||||
if o.CookieJar != nil {
|
if o.CookieJar != nil {
|
||||||
opt.CookieJar = o.CookieJar
|
opt.CookieJar = o.CookieJar
|
||||||
}
|
}
|
||||||
|
if o.Dimensions.Width > 0 && o.Dimensions.Height > 0 {
|
||||||
|
opt.Dimensions = o.Dimensions
|
||||||
|
}
|
||||||
|
if o.DarkMode {
|
||||||
|
opt.DarkMode = true
|
||||||
|
}
|
||||||
|
|
||||||
opt.ShowBrowser = o.ShowBrowser
|
opt.ShowBrowser = o.ShowBrowser
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,8 +148,26 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var viewport *playwright.Size
|
||||||
|
if opt.Dimensions.Width > 0 && opt.Dimensions.Height > 0 {
|
||||||
|
viewport = &playwright.Size{
|
||||||
|
Width: opt.Dimensions.Width,
|
||||||
|
Height: opt.Dimensions.Height,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var scheme *playwright.ColorScheme
|
||||||
|
|
||||||
|
if opt.DarkMode {
|
||||||
|
scheme = playwright.ColorSchemeDark
|
||||||
|
} else {
|
||||||
|
scheme = playwright.ColorSchemeNoPreference
|
||||||
|
}
|
||||||
|
|
||||||
c, err := browser.NewContext(playwright.BrowserNewContextOptions{
|
c, err := browser.NewContext(playwright.BrowserNewContextOptions{
|
||||||
UserAgent: playwright.String(opt.UserAgent),
|
UserAgent: playwright.String(opt.UserAgent),
|
||||||
|
Viewport: viewport,
|
||||||
|
ColorScheme: scheme,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user