@@ -296,5 +296,63 @@ module Ferrum
296
296
expect ( styles [ "font-weight" ] ) . to eq ( "700" )
297
297
end
298
298
end
299
+
300
+ describe "#wait_for_selector" do
301
+ before do
302
+ browser . go_to ( "/ferrum/with_js" )
303
+ end
304
+
305
+ it "waits for provided css selector" do
306
+ expect (
307
+ browser . wait_for_selector ( css : "div#wait_for_selector" ) . at_css ( "div#wait_for_selector" )
308
+ ) . not_to be_nil
309
+ end
310
+
311
+ it "waits for provided css hidden selector" do
312
+ expect (
313
+ browser . wait_for_selector ( css : "div#wait_for_hidden_selector" ) . at_css ( "div#wait_for_hidden_selector" )
314
+ ) . not_to be_nil
315
+ end
316
+
317
+ it "waits for provided xpath selector" do
318
+ expect (
319
+ browser . wait_for_selector ( xpath : "//div[@id='wait_for_selector']" ) . at_css ( "div#wait_for_selector" )
320
+ ) . not_to be_nil
321
+ end
322
+
323
+ it "waits for provided xpath hidden selector" do
324
+ expect (
325
+ browser
326
+ . wait_for_selector ( xpath : "//div[@id='wait_for_hidden_selector']" )
327
+ . at_css ( "div#wait_for_hidden_selector" )
328
+ ) . not_to be_nil
329
+ end
330
+
331
+ it "raises error when timeout exceed" do
332
+ expect do
333
+ browser . wait_for_selector ( css : "div#wait_for_selector" , timeout : 800 )
334
+ end . to raise_error ( Ferrum ::JavaScriptError , /Not found element match the selector/ )
335
+ end
336
+
337
+ it "raises error when provided invalid css" do
338
+ expect do
339
+ browser . wait_for_selector ( css : "//div[@id='wait_for_selector']" )
340
+ end . to raise_error ( Ferrum ::JavaScriptError , /Failed to execute 'querySelector' on 'Document'/ )
341
+ end
342
+
343
+ it "raises error when provided invalid xpath" do
344
+ expect do
345
+ browser . wait_for_selector ( xpath : "div#wait_for_selector" )
346
+ end . to raise_error ( Ferrum ::JavaScriptError , /Failed to execute 'evaluate' on 'Document'/ )
347
+ end
348
+
349
+ it "waits less than provided timeout when node found" do
350
+ Timeout . timeout ( 1 ) do
351
+ expect (
352
+ browser . wait_for_selector ( css : "div#wait_for_selector" , timeout : 2000 ) . at_css ( "div#wait_for_selector" )
353
+ ) . not_to be_nil
354
+ end
355
+ end
356
+ end
299
357
end
300
358
end
0 commit comments