diff --git a/v2/pkg/protocols/headless/engine/action.go b/v2/pkg/protocols/headless/engine/action.go index 0be71fff..5f97217b 100644 --- a/v2/pkg/protocols/headless/engine/action.go +++ b/v2/pkg/protocols/headless/engine/action.go @@ -50,6 +50,8 @@ const ( ActionDebug // ActionSleep executes a sleep for a specified duration ActionSleep + // ActionWaitVisible waits until an element appears. + ActionWaitVisible ) // ActionStringToAction converts an action from string to internal representation @@ -75,6 +77,7 @@ var ActionStringToAction = map[string]ActionType{ "keyboard": ActionKeyboard, "debug": ActionDebug, "sleep": ActionSleep, + "waitvisible": ActionWaitVisible, } // ActionToActionString converts an action from internal representation to string @@ -100,6 +103,7 @@ var ActionToActionString = map[ActionType]string{ ActionKeyboard: "keyboard", ActionDebug: "debug", ActionSleep: "sleep", + ActionWaitVisible: "waitvisible", } // Action is an action taken by the browser to reach a navigation diff --git a/v2/pkg/protocols/headless/engine/page_actions.go b/v2/pkg/protocols/headless/engine/page_actions.go index 2ec2365b..bc4239b7 100644 --- a/v2/pkg/protocols/headless/engine/page_actions.go +++ b/v2/pkg/protocols/headless/engine/page_actions.go @@ -67,6 +67,8 @@ func (p *Page) ExecuteActions(baseURL *url.URL, actions []*Action) (map[string]s err = p.DebugAction(act, outData) case ActionSleep: err = p.SleepAction(act, outData) + case ActionWaitVisible: + err = p.WaitVisible(act, outData) default: continue } @@ -83,6 +85,15 @@ type requestRule struct { Args map[string]string } +// WaitVisible waits until an element appears. +func (p *Page) WaitVisible(act *Action, out map[string]string) error { + element, err := p.pageElementBy(act.Data) + if err != nil { + return err + } + return element.WaitVisible() +} + // ActionAddHeader executes a AddHeader action. func (p *Page) ActionAddHeader(act *Action, out map[string]string /*TODO review unused parameter*/) error { in := act.GetArg("part")