@@ -504,6 +504,64 @@ module Ferrum
504504 expect ( browser . evaluate ( "window.last_hashchange" ) ) . to eq ( "#foo" )
505505 end
506506
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+
507565 context "current_url" do
508566 it "supports whitespace characters" do
509567 browser . go_to ( "/ferrum/arbitrary_path/200/foo%20bar%20baz" )
0 commit comments