1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-03-19 21:28:32 +02:00
ferret/pkg/drivers/value.go
Tim Voronov 90427cd537
Feature/new selector type (#657)
* Added remote type reference resolver

* Added support of XPath query selector

* Added CDP e2e testss covering XPath integration

* Added additional CDP e2e tests covering XPath integration

* Added type check to QuerySelector casting function

* Fixed XPath e2e tests

* Fixed vuln issue

* Added support of XPath selectors to http driver

* Added e2e tests for XPAth
2021-09-16 21:40:20 -04:00

236 lines
7.6 KiB
Go

package drivers
import (
"context"
"io"
"github.com/MontFerret/ferret/pkg/runtime/collections"
"github.com/MontFerret/ferret/pkg/runtime/core"
"github.com/MontFerret/ferret/pkg/runtime/values"
)
type (
// WaitEvent is an enum that represents what event is needed to wait for
WaitEvent int
// HTMLNode is an interface from which a number of DOM API object types inherit.
// It allows those types to be treated similarly;
// for example, inheriting the same set of methods, or being tested in the same way.
HTMLNode interface {
core.Value
core.Iterable
core.Getter
core.Setter
collections.Measurable
io.Closer
GetNodeType(ctx context.Context) (values.Int, error)
GetNodeName(ctx context.Context) (values.String, error)
GetChildNodes(ctx context.Context) (*values.Array, error)
GetChildNode(ctx context.Context, idx values.Int) (core.Value, error)
QuerySelector(ctx context.Context, selector QuerySelector) (core.Value, error)
QuerySelectorAll(ctx context.Context, selector QuerySelector) (*values.Array, error)
CountBySelector(ctx context.Context, selector QuerySelector) (values.Int, error)
ExistsBySelector(ctx context.Context, selector QuerySelector) (values.Boolean, error)
XPath(ctx context.Context, expression values.String) (core.Value, error)
}
// HTMLElement is the most general base interface which most objects in a GetMainFrame implement.
HTMLElement interface {
HTMLNode
GetInnerText(ctx context.Context) (values.String, error)
SetInnerText(ctx context.Context, innerText values.String) error
GetInnerHTML(ctx context.Context) (values.String, error)
SetInnerHTML(ctx context.Context, innerHTML values.String) error
GetValue(ctx context.Context) (core.Value, error)
SetValue(ctx context.Context, value core.Value) error
GetStyles(ctx context.Context) (*values.Object, error)
GetStyle(ctx context.Context, name values.String) (core.Value, error)
SetStyles(ctx context.Context, values *values.Object) error
SetStyle(ctx context.Context, name, value values.String) error
RemoveStyle(ctx context.Context, name ...values.String) error
GetAttributes(ctx context.Context) (*values.Object, error)
GetAttribute(ctx context.Context, name values.String) (core.Value, error)
SetAttributes(ctx context.Context, values *values.Object) error
SetAttribute(ctx context.Context, name, value values.String) error
RemoveAttribute(ctx context.Context, name ...values.String) error
GetInnerHTMLBySelector(ctx context.Context, selector QuerySelector) (values.String, error)
SetInnerHTMLBySelector(ctx context.Context, selector QuerySelector, innerHTML values.String) error
GetInnerHTMLBySelectorAll(ctx context.Context, selector QuerySelector) (*values.Array, error)
GetInnerTextBySelector(ctx context.Context, selector QuerySelector) (values.String, error)
SetInnerTextBySelector(ctx context.Context, selector QuerySelector, innerText values.String) error
GetInnerTextBySelectorAll(ctx context.Context, selector QuerySelector) (*values.Array, error)
GetPreviousElementSibling(ctx context.Context) (core.Value, error)
GetNextElementSibling(ctx context.Context) (core.Value, error)
GetParentElement(ctx context.Context) (core.Value, error)
Click(ctx context.Context, count values.Int) error
ClickBySelector(ctx context.Context, selector QuerySelector, count values.Int) error
ClickBySelectorAll(ctx context.Context, selector QuerySelector, count values.Int) error
Clear(ctx context.Context) error
ClearBySelector(ctx context.Context, selector QuerySelector) error
Input(ctx context.Context, value core.Value, delay values.Int) error
InputBySelector(ctx context.Context, selector QuerySelector, value core.Value, delay values.Int) error
Press(ctx context.Context, keys []values.String, count values.Int) error
PressBySelector(ctx context.Context, selector QuerySelector, keys []values.String, count values.Int) error
Select(ctx context.Context, value *values.Array) (*values.Array, error)
SelectBySelector(ctx context.Context, selector QuerySelector, value *values.Array) (*values.Array, error)
ScrollIntoView(ctx context.Context, options ScrollOptions) error
Focus(ctx context.Context) error
FocusBySelector(ctx context.Context, selector QuerySelector) error
Blur(ctx context.Context) error
BlurBySelector(ctx context.Context, selector QuerySelector) error
Hover(ctx context.Context) error
HoverBySelector(ctx context.Context, selector QuerySelector) error
WaitForElement(ctx context.Context, selector QuerySelector, when WaitEvent) error
WaitForElementAll(ctx context.Context, selector QuerySelector, when WaitEvent) error
WaitForAttribute(ctx context.Context, name values.String, value core.Value, when WaitEvent) error
WaitForAttributeBySelector(ctx context.Context, selector QuerySelector, name values.String, value core.Value, when WaitEvent) error
WaitForAttributeBySelectorAll(ctx context.Context, selector QuerySelector, name values.String, value core.Value, when WaitEvent) error
WaitForStyle(ctx context.Context, name values.String, value core.Value, when WaitEvent) error
WaitForStyleBySelector(ctx context.Context, selector QuerySelector, name values.String, value core.Value, when WaitEvent) error
WaitForStyleBySelectorAll(ctx context.Context, selector QuerySelector, name values.String, value core.Value, when WaitEvent) error
WaitForClass(ctx context.Context, class values.String, when WaitEvent) error
WaitForClassBySelector(ctx context.Context, selector QuerySelector, class values.String, when WaitEvent) error
WaitForClassBySelectorAll(ctx context.Context, selector QuerySelector, class values.String, when WaitEvent) error
}
HTMLDocument interface {
HTMLNode
GetTitle() values.String
GetElement() HTMLElement
GetURL() values.String
GetName() values.String
GetParentDocument(ctx context.Context) (HTMLDocument, error)
GetChildDocuments(ctx context.Context) (*values.Array, error)
Scroll(ctx context.Context, options ScrollOptions) error
ScrollTop(ctx context.Context, options ScrollOptions) error
ScrollBottom(ctx context.Context, options ScrollOptions) error
ScrollBySelector(ctx context.Context, selector QuerySelector, options ScrollOptions) error
MoveMouseByXY(ctx context.Context, x, y values.Float) error
}
// HTMLPage interface represents any web page loaded in the browser
// and serves as an entry point into the web page's content
HTMLPage interface {
core.Value
core.Iterable
core.Getter
core.Setter
collections.Measurable
io.Closer
IsClosed() values.Boolean
GetURL() values.String
GetMainFrame() HTMLDocument
GetFrames(ctx context.Context) (*values.Array, error)
GetFrame(ctx context.Context, idx values.Int) (core.Value, error)
GetCookies(ctx context.Context) (*HTTPCookies, error)
SetCookies(ctx context.Context, cookies *HTTPCookies) error
DeleteCookies(ctx context.Context, cookies *HTTPCookies) error
GetResponse(ctx context.Context) (HTTPResponse, error)
PrintToPDF(ctx context.Context, params PDFParams) (values.Binary, error)
CaptureScreenshot(ctx context.Context, params ScreenshotParams) (values.Binary, error)
WaitForNavigation(ctx context.Context, targetURL values.String) error
WaitForFrameNavigation(ctx context.Context, frame HTMLDocument, targetURL values.String) error
Navigate(ctx context.Context, url values.String) error
NavigateBack(ctx context.Context, skip values.Int) (values.Boolean, error)
NavigateForward(ctx context.Context, skip values.Int) (values.Boolean, error)
}
)
const (
// WaitEventPresence indicating to wait for value to appear
WaitEventPresence = 0
// WaitEventAbsence indicating to wait for value to disappear
WaitEventAbsence = 1
)