Skip to content

Commit c448d2f

Browse files
committed
all the actions of an element should use its own context
fix #842
1 parent 3a88bf4 commit c448d2f

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

element.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (el *Element) Hover() error {
8484
return err
8585
}
8686

87-
return el.page.Mouse.MoveTo(*pt)
87+
return el.page.Context(el.ctx).Mouse.MoveTo(*pt)
8888
}
8989

9090
// MoveMouseOut of the current element
@@ -113,7 +113,7 @@ func (el *Element) Click(button proto.InputMouseButton, clickCount int) error {
113113

114114
defer el.tryTrace(TraceTypeInput, string(button)+" click")()
115115

116-
return el.page.Mouse.Click(button, clickCount)
116+
return el.page.Context(el.ctx).Mouse.Click(button, clickCount)
117117
}
118118

119119
// Tap will scroll to the button and tap it just like a human.
@@ -136,7 +136,7 @@ func (el *Element) Tap() error {
136136

137137
defer el.tryTrace(TraceTypeInput, "tap")()
138138

139-
return el.page.Touch.Tap(pt.X, pt.Y)
139+
return el.page.Context(el.ctx).Touch.Tap(pt.X, pt.Y)
140140
}
141141

142142
// Interactable checks if the element is interactable with cursor.
@@ -163,12 +163,12 @@ func (el *Element) Interactable() (pt *proto.Point, err error) {
163163
return
164164
}
165165

166-
scroll, err := el.page.root.Eval(`() => ({ x: window.scrollX, y: window.scrollY })`)
166+
scroll, err := el.page.root.Context(el.ctx).Eval(`() => ({ x: window.scrollX, y: window.scrollY })`)
167167
if err != nil {
168168
return
169169
}
170170

171-
elAtPoint, err := el.page.ElementFromPoint(
171+
elAtPoint, err := el.page.Context(el.ctx).ElementFromPoint(
172172
int(pt.X)+scroll.Value.Get("x").Int(),
173173
int(pt.Y)+scroll.Value.Get("y").Int(),
174174
)
@@ -208,7 +208,7 @@ func (el *Element) Type(keys ...input.Key) error {
208208
if err != nil {
209209
return err
210210
}
211-
return el.page.Keyboard.Type(keys...)
211+
return el.page.Context(el.ctx).Keyboard.Type(keys...)
212212
}
213213

214214
// KeyActions is similar with Page.KeyActions.
@@ -219,7 +219,7 @@ func (el *Element) KeyActions() (*KeyActions, error) {
219219
return nil, err
220220
}
221221

222-
return el.page.KeyActions(), nil
222+
return el.page.Context(el.ctx).KeyActions(), nil
223223
}
224224

225225
// SelectText selects the text that matches the regular expression.
@@ -271,7 +271,7 @@ func (el *Element) Input(text string) error {
271271
return err
272272
}
273273

274-
err = el.page.InsertText(text)
274+
err = el.page.Context(el.ctx).InsertText(text)
275275
_, _ = el.Evaluate(evalHelper(js.InputEvent).ByUser())
276276
return err
277277
}
@@ -421,7 +421,7 @@ func (el *Element) ShadowRoot() (*Element, error) {
421421
return nil, err
422422
}
423423

424-
return el.page.ElementFromObject(shadowNode.Object)
424+
return el.page.Context(el.ctx).ElementFromObject(shadowNode.Object)
425425
}
426426

427427
// Frame creates a page instance that represents the iframe
@@ -532,9 +532,10 @@ func (el *Element) WaitStableRAF() error {
532532
defer el.tryTrace(TraceTypeWait, "stable RAF")()
533533

534534
var shape *proto.DOMGetContentQuadsResult
535+
page := el.page.Context(el.ctx)
535536

536537
for {
537-
err = el.page.WaitRepaint()
538+
err = page.WaitRepaint()
538539
if err != nil {
539540
return err
540541
}
@@ -625,7 +626,7 @@ func (el *Element) Resource() ([]byte, error) {
625626
return nil, err
626627
}
627628

628-
return el.page.GetResource(src.Value.String())
629+
return el.page.Context(el.ctx).GetResource(src.Value.String())
629630
}
630631

631632
// BackgroundImage returns the css background-image of the element
@@ -637,7 +638,7 @@ func (el *Element) BackgroundImage() ([]byte, error) {
637638

638639
u := res.Value.Str()
639640

640-
return el.page.GetResource(u)
641+
return el.page.Context(el.ctx).GetResource(u)
641642
}
642643

643644
// Screenshot of the area of the element
@@ -652,7 +653,7 @@ func (el *Element) Screenshot(format proto.PageCaptureScreenshotFormat, quality
652653
Format: format,
653654
}
654655

655-
bin, err := el.page.Screenshot(false, opts)
656+
bin, err := el.page.Context(el.ctx).Screenshot(false, opts)
656657
if err != nil {
657658
return nil, err
658659
}

element_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,16 @@ func TestElementContext(t *testing.T) {
237237
el.Sleeper(rod.DefaultSleeper).MustClick()
238238
}
239239

240+
func TestElementCancelContext(t *testing.T) {
241+
g := setup(t)
242+
243+
p := g.page.MustNavigate(g.srcFile("fixtures/click.html"))
244+
el := p.Timeout(time.Second).MustElement("button")
245+
el = el.CancelTimeout()
246+
utils.Sleep(1.1)
247+
el.MustClick()
248+
}
249+
240250
func TestIframes(t *testing.T) {
241251
g := setup(t)
242252

0 commit comments

Comments
 (0)