@@ -296,5 +296,63 @@ module Ferrum
296296 expect ( styles [ "font-weight" ] ) . to eq ( "700" )
297297 end
298298 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
299357 end
300358end
0 commit comments