@@ -41,6 +41,13 @@ type emulateMediaOpts struct {
41
41
ReducedMotion string `js:"reducedMotion"`
42
42
}
43
43
44
+ type jsFrameBaseOpts struct {
45
+ Timeout string
46
+ Strict bool
47
+ }
48
+
49
+ const sampleHTML = `<div><b>Test</b><ol><li><i>One</i></li></ol></div>`
50
+
44
51
func TestPageEmulateMedia (t * testing.T ) {
45
52
tb := newTestBrowser (t )
46
53
p := tb .NewPage (nil )
@@ -106,18 +113,8 @@ func TestPageEvaluate(t *testing.T) {
106
113
t .Run (tc .name , func (t * testing.T ) {
107
114
t .Parallel ()
108
115
109
- // Not using assert.Panics* because we want to match on an error substring.
110
116
defer func () {
111
- r := recover ()
112
- require .NotNil (t , r )
113
- require .IsType (t , & goja.Object {}, r )
114
- gotObj , _ := r .(* goja.Object )
115
- got := gotObj .Export ()
116
- expErr := fmt .Errorf ("%w" , errors .New (tc .errMsg ))
117
- require .IsType (t , expErr , got )
118
- gotErr , ok := got .(error )
119
- require .True (t , ok )
120
- assert .Contains (t , gotErr .Error (), expErr .Error ())
117
+ assertPanicErrorContains (t , recover (), tc .errMsg )
121
118
}()
122
119
123
120
tb := newTestBrowser (t )
@@ -182,6 +179,111 @@ func TestPageGotoWaitUntilDOMContentLoaded(t *testing.T) {
182
179
assert .EqualValues (t , "DOMContentLoaded" , actual [0 ], `expected "DOMContentLoaded" event to have fired` )
183
180
}
184
181
182
+ func TestPageInnerHTML (t * testing.T ) {
183
+ t .Parallel ()
184
+
185
+ t .Run ("ok" , func (t * testing.T ) {
186
+ t .Parallel ()
187
+
188
+ p := newTestBrowser (t ).NewPage (nil )
189
+ p .SetContent (sampleHTML , nil )
190
+ assert .Equal (t , `<b>Test</b><ol><li><i>One</i></li></ol>` , p .InnerHTML ("div" , nil ))
191
+ })
192
+
193
+ t .Run ("err_empty_selector" , func (t * testing.T ) {
194
+ t .Parallel ()
195
+
196
+ defer func () {
197
+ assertPanicErrorContains (t , recover (), "The provided selector is empty" )
198
+ }()
199
+
200
+ p := newTestBrowser (t ).NewPage (nil )
201
+ p .InnerHTML ("" , nil )
202
+ t .Error ("did not panic" )
203
+ })
204
+
205
+ t .Run ("err_wrong_selector" , func (t * testing.T ) {
206
+ t .Parallel ()
207
+
208
+ tb := newTestBrowser (t )
209
+ p := tb .NewPage (nil )
210
+ p .SetContent (sampleHTML , nil )
211
+ assert .Equal (t , "" , p .InnerHTML ("p" , tb .rt .ToValue (jsFrameBaseOpts {
212
+ Timeout : "100" ,
213
+ })))
214
+ })
215
+ }
216
+
217
+ func TestPageInnerText (t * testing.T ) {
218
+ t .Parallel ()
219
+
220
+ t .Run ("ok" , func (t * testing.T ) {
221
+ t .Parallel ()
222
+
223
+ p := newTestBrowser (t ).NewPage (nil )
224
+ p .SetContent (sampleHTML , nil )
225
+ assert .Equal (t , "Test\n One" , p .InnerText ("div" , nil ))
226
+ })
227
+
228
+ t .Run ("err_empty_selector" , func (t * testing.T ) {
229
+ t .Parallel ()
230
+
231
+ defer func () {
232
+ assertPanicErrorContains (t , recover (), "The provided selector is empty" )
233
+ }()
234
+
235
+ p := newTestBrowser (t ).NewPage (nil )
236
+ p .InnerText ("" , nil )
237
+ t .Error ("did not panic" )
238
+ })
239
+
240
+ t .Run ("err_wrong_selector" , func (t * testing.T ) {
241
+ t .Parallel ()
242
+
243
+ tb := newTestBrowser (t )
244
+ p := tb .NewPage (nil )
245
+ p .SetContent (sampleHTML , nil )
246
+ assert .Equal (t , "" , p .InnerText ("p" , tb .rt .ToValue (jsFrameBaseOpts {
247
+ Timeout : "100" ,
248
+ })))
249
+ })
250
+ }
251
+
252
+ func TestPageTextContent (t * testing.T ) {
253
+ t .Parallel ()
254
+
255
+ t .Run ("ok" , func (t * testing.T ) {
256
+ t .Parallel ()
257
+
258
+ p := newTestBrowser (t ).NewPage (nil )
259
+ p .SetContent (sampleHTML , nil )
260
+ assert .Equal (t , "TestOne" , p .TextContent ("div" , nil ))
261
+ })
262
+
263
+ t .Run ("err_empty_selector" , func (t * testing.T ) {
264
+ t .Parallel ()
265
+
266
+ defer func () {
267
+ assertPanicErrorContains (t , recover (), "The provided selector is empty" )
268
+ }()
269
+
270
+ p := newTestBrowser (t ).NewPage (nil )
271
+ p .TextContent ("" , nil )
272
+ t .Error ("did not panic" )
273
+ })
274
+
275
+ t .Run ("err_wrong_selector" , func (t * testing.T ) {
276
+ t .Parallel ()
277
+
278
+ tb := newTestBrowser (t )
279
+ p := tb .NewPage (nil )
280
+ p .SetContent (sampleHTML , nil )
281
+ assert .Equal (t , "" , p .TextContent ("p" , tb .rt .ToValue (jsFrameBaseOpts {
282
+ Timeout : "100" ,
283
+ })))
284
+ })
285
+ }
286
+
185
287
func TestPageInputValue (t * testing.T ) {
186
288
p := newTestBrowser (t ).NewPage (nil )
187
289
@@ -535,3 +637,17 @@ func TestPageWaitForNavigationShouldNotPanic(t *testing.T) {
535
637
<- ctx .Done ()
536
638
require .NotPanics (t , func () { p .WaitForNavigation (nil ) })
537
639
}
640
+
641
+ func assertPanicErrorContains (t * testing.T , err interface {}, expErrMsg string ) {
642
+ t .Helper ()
643
+
644
+ require .NotNil (t , err )
645
+ require .IsType (t , & goja.Object {}, err )
646
+ gotObj , _ := err .(* goja.Object )
647
+ got := gotObj .Export ()
648
+ expErr := fmt .Errorf ("%w" , errors .New (expErrMsg ))
649
+ require .IsType (t , expErr , got )
650
+ gotErr , ok := got .(error )
651
+ require .True (t , ok )
652
+ assert .Contains (t , gotErr .Error (), expErr .Error ())
653
+ }
0 commit comments