1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-11-06 08:39:09 +02:00

Externalized common timeout values (#371)

* Externalized common timeout values

* Updated go.sum
This commit is contained in:
Tim Voronov
2019-09-05 12:17:22 -04:00
committed by GitHub
parent 9b762d32ee
commit 2d645434d8
27 changed files with 113 additions and 107 deletions

View File

@@ -326,19 +326,19 @@ func (doc *HTMLDocument) ClickBySelectorAll(ctx context.Context, selector values
}
func (doc *HTMLDocument) SelectBySelector(ctx context.Context, selector values.String, value *values.Array) (*values.Array, error) {
return doc.input.SelectBySelector(ctx, doc.element.id.nodeID, selector, value)
return doc.input.SelectBySelector(ctx, doc.element.id.nodeID, selector.String(), value)
}
func (doc *HTMLDocument) FocusBySelector(ctx context.Context, selector values.String) error {
return doc.input.FocusBySelector(ctx, doc.element.id.nodeID, selector)
return doc.input.FocusBySelector(ctx, doc.element.id.nodeID, selector.String())
}
func (doc *HTMLDocument) MoveMouseBySelector(ctx context.Context, selector values.String) error {
return doc.input.MoveMouseBySelector(ctx, doc.element.id.nodeID, selector)
return doc.input.MoveMouseBySelector(ctx, doc.element.id.nodeID, selector.String())
}
func (doc *HTMLDocument) MoveMouseByXY(ctx context.Context, x, y values.Float) error {
return doc.input.MoveMouseByXY(ctx, x, y)
return doc.input.MoveMouseByXY(ctx, float64(x), float64(y))
}
func (doc *HTMLDocument) WaitForElement(ctx context.Context, selector values.String, when drivers.WaitEvent) error {
@@ -497,11 +497,11 @@ func (doc *HTMLDocument) ScrollBottom(ctx context.Context) error {
}
func (doc *HTMLDocument) ScrollBySelector(ctx context.Context, selector values.String) error {
return doc.input.ScrollIntoViewBySelector(ctx, selector)
return doc.input.ScrollIntoViewBySelector(ctx, selector.String())
}
func (doc *HTMLDocument) ScrollByXY(ctx context.Context, x, y values.Float) error {
return doc.input.ScrollByXY(ctx, x, y)
return doc.input.ScrollByXY(ctx, float64(x), float64(y))
}
func (doc *HTMLDocument) loadChildren(ctx context.Context) (value core.Value, e error) {

View File

@@ -2,15 +2,13 @@ package cdp
import (
"context"
"sync"
"time"
"github.com/mafredri/cdp"
"github.com/mafredri/cdp/devtool"
"github.com/mafredri/cdp/protocol/target"
"github.com/mafredri/cdp/rpcc"
"github.com/mafredri/cdp/session"
"github.com/pkg/errors"
"sync"
"github.com/MontFerret/ferret/pkg/drivers"
"github.com/MontFerret/ferret/pkg/runtime/logging"
@@ -18,7 +16,6 @@ import (
const DriverName = "cdp"
const BlankPageURL = "about:blank"
const DefaultTimeout = 5000 * time.Millisecond
var defaultViewport = &drivers.Viewport{
Width: 1600,

View File

@@ -8,6 +8,7 @@ import (
"strconv"
"strings"
"sync"
"time"
"github.com/MontFerret/ferret/pkg/drivers"
"github.com/MontFerret/ferret/pkg/drivers/cdp/eval"
@@ -208,7 +209,7 @@ func (el *HTMLElement) MarshalJSON() ([]byte, error) {
}
func (el *HTMLElement) String() string {
ctx, cancel := context.WithTimeout(context.Background(), DefaultTimeout)
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(drivers.DefaultWaitTimeout)*time.Millisecond)
defer cancel()
res, err := el.GetInnerHTML(ctx)
@@ -1056,11 +1057,11 @@ func (el *HTMLElement) Click(ctx context.Context) error {
}
func (el *HTMLElement) ClickBySelector(ctx context.Context, selector values.String) error {
return el.input.ClickBySelector(ctx, el.id.nodeID, selector)
return el.input.ClickBySelector(ctx, el.id.nodeID, selector.String())
}
func (el *HTMLElement) ClickBySelectorAll(ctx context.Context, selector values.String) error {
return el.input.ClickBySelectorAll(ctx, el.id.nodeID, selector)
return el.input.ClickBySelectorAll(ctx, el.id.nodeID, selector.String())
}
func (el *HTMLElement) Input(ctx context.Context, value core.Value, delay values.Int) error {
@@ -1069,17 +1070,17 @@ func (el *HTMLElement) Input(ctx context.Context, value core.Value, delay values
}
return el.input.Type(ctx, el.id.objectID, input.TypeParams{
Text: value,
Text: value.String(),
Clear: false,
Delay: delay,
Delay: time.Duration(delay) * time.Millisecond,
})
}
func (el *HTMLElement) InputBySelector(ctx context.Context, selector values.String, value core.Value, delay values.Int) error {
return el.input.TypeBySelector(ctx, el.id.nodeID, selector, input.TypeParams{
Text: value,
return el.input.TypeBySelector(ctx, el.id.nodeID, selector.String(), input.TypeParams{
Text: value.String(),
Clear: false,
Delay: delay,
Delay: time.Duration(delay) * time.Millisecond,
})
}
@@ -1088,7 +1089,7 @@ func (el *HTMLElement) Clear(ctx context.Context) error {
}
func (el *HTMLElement) ClearBySelector(ctx context.Context, selector values.String) error {
return el.input.ClearBySelector(ctx, el.id.nodeID, selector)
return el.input.ClearBySelector(ctx, el.id.nodeID, selector.String())
}
func (el *HTMLElement) Select(ctx context.Context, value *values.Array) (*values.Array, error) {

View File

@@ -4,6 +4,7 @@ import (
"context"
"reflect"
"sync"
"time"
"github.com/mafredri/cdp/protocol/dom"
"github.com/mafredri/cdp/protocol/page"
@@ -289,7 +290,7 @@ func (broker *EventBroker) emit(ctx context.Context, event Event, message interf
case <-ctx.Done():
return
default:
ctx2, fn := drivers.WithDefaultTimeout(ctx)
ctx2, fn := context.WithTimeout(ctx, time.Duration(drivers.DefaultTimeout)*time.Millisecond)
listener(ctx2, message)

View File

@@ -62,7 +62,7 @@ func (k *Keyboard) Up(ctx context.Context, char string) error {
)
}
func (k *Keyboard) Type(ctx context.Context, text string, delay int) error {
func (k *Keyboard) Type(ctx context.Context, text string, delay time.Duration) error {
for _, ch := range text {
ch := string(ch)
@@ -70,7 +70,7 @@ func (k *Keyboard) Type(ctx context.Context, text string, delay int) error {
return err
}
releaseDelay := randomDuration(delay) * time.Millisecond
releaseDelay := randomDuration(int(delay))
time.Sleep(releaseDelay)
if err := k.Up(ctx, ch); err != nil {

View File

@@ -8,6 +8,7 @@ import (
"github.com/mafredri/cdp/protocol/dom"
"github.com/mafredri/cdp/protocol/runtime"
"github.com/MontFerret/ferret/pkg/drivers"
"github.com/MontFerret/ferret/pkg/drivers/cdp/eval"
"github.com/MontFerret/ferret/pkg/drivers/cdp/templates"
"github.com/MontFerret/ferret/pkg/runtime/core"
@@ -16,9 +17,9 @@ import (
type (
TypeParams struct {
Text core.Value
Clear values.Boolean
Delay values.Int
Text string
Clear bool
Delay time.Duration
}
Manager struct {
@@ -69,14 +70,14 @@ func (m *Manager) ScrollIntoView(ctx context.Context, objectID runtime.RemoteObj
)
}
func (m *Manager) ScrollIntoViewBySelector(ctx context.Context, selector values.String) error {
return m.exec.Eval(ctx, templates.ScrollIntoViewBySelector(selector.String()))
func (m *Manager) ScrollIntoViewBySelector(ctx context.Context, selector string) error {
return m.exec.Eval(ctx, templates.ScrollIntoViewBySelector(selector))
}
func (m *Manager) ScrollByXY(ctx context.Context, x, y values.Float) error {
func (m *Manager) ScrollByXY(ctx context.Context, x, y float64) error {
return m.exec.Eval(
ctx,
templates.Scroll(eval.ParamFloat(float64(x)), eval.ParamFloat(float64(y))),
templates.Scroll(eval.ParamFloat(x), eval.ParamFloat(y)),
)
}
@@ -90,14 +91,14 @@ func (m *Manager) Focus(ctx context.Context, objectID runtime.RemoteObjectID) er
return m.client.DOM.Focus(ctx, dom.NewFocusArgs().SetObjectID(objectID))
}
func (m *Manager) FocusBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String) error {
func (m *Manager) FocusBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string) error {
err := m.ScrollIntoViewBySelector(ctx, selector)
if err != nil {
return err
}
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector))
if err != nil {
return nil
@@ -120,12 +121,12 @@ func (m *Manager) MoveMouse(ctx context.Context, objectID runtime.RemoteObjectID
return m.mouse.Move(ctx, q.X, q.Y)
}
func (m *Manager) MoveMouseBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String) error {
func (m *Manager) MoveMouseBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string) error {
if err := m.ScrollIntoViewBySelector(ctx, selector); err != nil {
return err
}
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector))
if err != nil {
return err
@@ -140,12 +141,12 @@ func (m *Manager) MoveMouseBySelector(ctx context.Context, parentNodeID dom.Node
return m.mouse.Move(ctx, q.X, q.Y)
}
func (m *Manager) MoveMouseByXY(ctx context.Context, x, y values.Float) error {
func (m *Manager) MoveMouseByXY(ctx context.Context, x, y float64) error {
if err := m.ScrollByXY(ctx, x, y); err != nil {
return err
}
return m.mouse.Move(ctx, float64(x), float64(y))
return m.mouse.Move(ctx, x, y)
}
func (m *Manager) Click(ctx context.Context, objectID runtime.RemoteObjectID) error {
@@ -159,19 +160,19 @@ func (m *Manager) Click(ctx context.Context, objectID runtime.RemoteObjectID) er
return err
}
if err := m.mouse.Click(ctx, points.X, points.Y, 50); err != nil {
if err := m.mouse.Click(ctx, points.X, points.Y, drivers.DefaultInputDelay); err != nil {
return nil
}
return nil
}
func (m *Manager) ClickBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String) error {
func (m *Manager) ClickBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string) error {
if err := m.ScrollIntoViewBySelector(ctx, selector); err != nil {
return err
}
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector))
if err != nil {
return err
@@ -183,29 +184,29 @@ func (m *Manager) ClickBySelector(ctx context.Context, parentNodeID dom.NodeID,
return err
}
if err := m.mouse.Click(ctx, points.X, points.Y, 50); err != nil {
if err := m.mouse.Click(ctx, points.X, points.Y, drivers.DefaultInputDelay); err != nil {
return nil
}
return nil
}
func (m *Manager) ClickBySelectorAll(ctx context.Context, parentNodeID dom.NodeID, selector values.String) error {
func (m *Manager) ClickBySelectorAll(ctx context.Context, parentNodeID dom.NodeID, selector string) error {
if err := m.ScrollIntoViewBySelector(ctx, selector); err != nil {
return err
}
found, err := m.client.DOM.QuerySelectorAll(ctx, dom.NewQuerySelectorAllArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelectorAll(ctx, dom.NewQuerySelectorAllArgs(parentNodeID, selector))
if err != nil {
return err
}
for _, nodeID := range found.NodeIDs {
_, min := core.NumberBoundaries(100)
beforeTypeDelay := time.Duration(min)
_, min := core.NumberBoundaries(drivers.DefaultInputDelay * 2)
beforeTypeDelay := time.Duration(min) * time.Millisecond
time.Sleep(beforeTypeDelay * time.Millisecond)
time.Sleep(beforeTypeDelay)
points, err := GetClickablePointByNodeID(ctx, m.client, nodeID)
@@ -213,7 +214,7 @@ func (m *Manager) ClickBySelectorAll(ctx context.Context, parentNodeID dom.NodeI
return err
}
if err := m.mouse.Click(ctx, points.X, points.Y, 50); err != nil {
if err := m.mouse.Click(ctx, points.X, points.Y, drivers.DefaultInputDelay); err != nil {
return nil
}
}
@@ -246,22 +247,22 @@ func (m *Manager) Type(ctx context.Context, objectID runtime.RemoteObjectID, par
}
}
_, min := core.NumberBoundaries(float64(params.Delay))
beforeTypeDelay := time.Duration(min)
d := core.NumberLowerBoundary(float64(params.Delay))
beforeTypeDelay := time.Duration(d)
time.Sleep(beforeTypeDelay * time.Millisecond)
time.Sleep(beforeTypeDelay)
return m.keyboard.Type(ctx, params.Text.String(), int(params.Delay))
return m.keyboard.Type(ctx, params.Text, params.Delay)
}
func (m *Manager) TypeBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String, params TypeParams) error {
func (m *Manager) TypeBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string, params TypeParams) error {
err := m.ScrollIntoViewBySelector(ctx, selector)
if err != nil {
return err
}
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector))
if err != nil {
return err
@@ -285,12 +286,12 @@ func (m *Manager) TypeBySelector(ctx context.Context, parentNodeID dom.NodeID, s
}
}
_, min := core.NumberBoundaries(float64(params.Delay))
beforeTypeDelay := time.Duration(min)
d := core.NumberLowerBoundary(float64(params.Delay))
beforeTypeDelay := time.Duration(d)
time.Sleep(beforeTypeDelay * time.Millisecond)
time.Sleep(beforeTypeDelay)
return m.keyboard.Type(ctx, params.Text.String(), int(params.Delay))
return m.keyboard.Type(ctx, params.Text, params.Delay)
}
func (m *Manager) Clear(ctx context.Context, objectID runtime.RemoteObjectID) error {
@@ -315,14 +316,14 @@ func (m *Manager) Clear(ctx context.Context, objectID runtime.RemoteObjectID) er
return m.ClearByXY(ctx, points)
}
func (m *Manager) ClearBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String) error {
func (m *Manager) ClearBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string) error {
err := m.ScrollIntoViewBySelector(ctx, selector)
if err != nil {
return err
}
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector.String()))
found, err := m.client.DOM.QuerySelector(ctx, dom.NewQuerySelectorArgs(parentNodeID, selector))
if err != nil {
return err
@@ -375,12 +376,12 @@ func (m *Manager) Select(ctx context.Context, objectID runtime.RemoteObjectID, v
return arr, nil
}
func (m *Manager) SelectBySelector(ctx context.Context, parentNodeID dom.NodeID, selector values.String, value *values.Array) (*values.Array, error) {
func (m *Manager) SelectBySelector(ctx context.Context, parentNodeID dom.NodeID, selector string, value *values.Array) (*values.Array, error) {
if err := m.FocusBySelector(ctx, parentNodeID, selector); err != nil {
return values.NewArray(0), err
}
res, err := m.exec.EvalWithReturnValue(ctx, templates.SelectBySelector(selector.String(), value.String()))
res, err := m.exec.EvalWithReturnValue(ctx, templates.SelectBySelector(selector, value.String()))
if err != nil {
return values.NewArray(0), err

8
pkg/drivers/consts.go Normal file
View File

@@ -0,0 +1,8 @@
package drivers
const (
DefaultPageLoadTimeout = 60000
DefaultWaitTimeout = 5000
DefaultInputDelay = 25
DefaultTimeout = 30000
)

View File

@@ -2,14 +2,10 @@ package drivers
import (
"context"
"io"
"time"
"github.com/MontFerret/ferret/pkg/runtime/core"
"io"
)
const DefaultTimeout = time.Second * 30
type (
ctxKey struct{}

View File

@@ -1,15 +1,9 @@
package drivers
import (
"context"
"github.com/MontFerret/ferret/pkg/runtime/core"
)
func WithDefaultTimeout(ctx context.Context) (context.Context, context.CancelFunc) {
return context.WithTimeout(ctx, DefaultTimeout)
}
func ToPage(value core.Value) (HTMLPage, error) {
err := core.ValidateType(value, HTMLPageType)