@@ -504,6 +504,64 @@ module Ferrum
504
504
expect ( browser . evaluate ( "window.last_hashchange" ) ) . to eq ( "#foo" )
505
505
end
506
506
507
+ context "wait_for_selector" do
508
+ before do
509
+ browser . go_to ( "/ferrum/with_js" )
510
+ end
511
+
512
+ it "waits for provided css selector" do
513
+ expect (
514
+ browser . wait_for_selector ( css : "div#wait_for_selector" ) . at_css ( "div#wait_for_selector" )
515
+ ) . not_to be_nil
516
+ end
517
+
518
+ it "waits for provided css hidden selector" do
519
+ expect (
520
+ browser . wait_for_selector ( css : "div#wait_for_hidden_selector" ) . at_css ( "div#wait_for_hidden_selector" )
521
+ ) . not_to be_nil
522
+ end
523
+
524
+ it "waits for provided xpath selector" do
525
+ expect (
526
+ browser . wait_for_selector ( xpath : "//div[@id='wait_for_selector']" ) . at_css ( "div#wait_for_selector" )
527
+ ) . not_to be_nil
528
+ end
529
+
530
+ it "waits for provided xpath hidden selector" do
531
+ expect (
532
+ browser
533
+ . wait_for_selector ( xpath : "//div[@id='wait_for_hidden_selector']" )
534
+ . at_css ( "div#wait_for_hidden_selector" )
535
+ ) . not_to be_nil
536
+ end
537
+
538
+ it "raises error when timeout exceed" do
539
+ expect do
540
+ browser . wait_for_selector ( css : "div#wait_for_selector" , timeout : 800 )
541
+ end . to raise_error ( Ferrum ::JavaScriptError , /Not found element match the selector/ )
542
+ end
543
+
544
+ it "raises error when provided invalid css" do
545
+ expect do
546
+ browser . wait_for_selector ( css : "//div[@id='wait_for_selector']" )
547
+ end . to raise_error ( Ferrum ::JavaScriptError , /Failed to execute 'querySelector' on 'Document'/ )
548
+ end
549
+
550
+ it "raises error when provided invalid xpath" do
551
+ expect do
552
+ browser . wait_for_selector ( xpath : "div#wait_for_selector" )
553
+ end . to raise_error ( Ferrum ::JavaScriptError , /Failed to execute 'evaluate' on 'Document'/ )
554
+ end
555
+
556
+ it "waits less than provided timeout when node found" do
557
+ Timeout . timeout ( 1 ) do
558
+ expect (
559
+ browser . wait_for_selector ( css : "div#wait_for_selector" , timeout : 2000 ) . at_css ( "div#wait_for_selector" )
560
+ ) . not_to be_nil
561
+ end
562
+ end
563
+ end
564
+
507
565
context "current_url" do
508
566
it "supports whitespace characters" do
509
567
browser . go_to ( "/ferrum/arbitrary_path/200/foo%20bar%20baz" )
0 commit comments