From 6e00d2da2449ce6c0b21b6596c91753757b4a70a Mon Sep 17 00:00:00 2001 From: Jacob Budzis Date: Sun, 5 Feb 2023 21:01:28 -0800 Subject: [PATCH] Add Element.Disabled() and Element.MustDisabled() This change allows users to check if an element is disabled. More information about the disabled attribute can be found at: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled Similar methods already exist in other browser automation frameworks. For example, Playwright has `elementHandle.isDisabled()`: https://playwright.dev/docs/api/class-elementhandle#element-handle-is-disabled This commit is based on discussions in #798 --- element.go | 9 +++++++++ element_test.go | 15 +++++++++++++++ fixtures/input.html | 8 ++++++++ must.go | 7 +++++++ 4 files changed, 39 insertions(+) diff --git a/element.go b/element.go index 7d1e7da0..7d9af036 100644 --- a/element.go +++ b/element.go @@ -365,6 +365,15 @@ func (el *Element) Property(name string) (gson.JSON, error) { return prop.Value, nil } +// Disabled checks if the element is disabled. +func (el *Element) Disabled() (bool, error) { + prop, err := el.Property("disabled") + if err != nil { + return false, err + } + return prop.Bool(), nil +} + // SetFiles of the current file input element func (el *Element) SetFiles(paths []string) error { absPaths := utils.AbsolutePaths(paths) diff --git a/element_test.go b/element_test.go index 7dff62bd..9de223de 100644 --- a/element_test.go +++ b/element_test.go @@ -490,6 +490,21 @@ func TestProperty(t *testing.T) { }) } +func TestDisabled(t *testing.T) { + g := setup(t) + + p := g.page.MustNavigate(g.srcFile("fixtures/input.html")) + + g.False(p.MustElement("#EnabledButton").MustDisabled()) + g.True(p.MustElement("#DisabledButton").MustDisabled()) + + g.Panic(func() { + el := p.MustElement("#EnabledButton") + g.mc.stubErr(1, proto.RuntimeCallFunctionOn{}) + el.MustDisabled() + }) +} + func TestSetFiles(t *testing.T) { g := setup(t) diff --git a/fixtures/input.html b/fixtures/input.html index 31481915..33970cae 100644 --- a/fixtures/input.html +++ b/fixtures/input.html @@ -66,6 +66,14 @@
+ + + + +
+ diff --git a/must.go b/must.go index be181d48..96950c9e 100644 --- a/must.go +++ b/must.go @@ -834,6 +834,13 @@ func (el *Element) MustProperty(name string) gson.JSON { return prop } +// MustDisabled is similar to Element.Disabled +func (el *Element) MustDisabled() bool { + disabled, err := el.Disabled() + el.e(err) + return disabled +} + // MustContainsElement is similar to Element.ContainsElement func (el *Element) MustContainsElement(target *Element) bool { contains, err := el.ContainsElement(target)