Skip to content

Commit 53edf60

Browse files
committed
returns Node instead DOM instance in wait_for_selector method
1 parent 0f0fbe0 commit 53edf60

File tree

2 files changed

+34
-47
lines changed

2 files changed

+34
-47
lines changed

lib/ferrum/frame/dom.rb

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,33 +37,31 @@ def body
3737
end
3838

3939
def wait_for_selector(css: nil, xpath: nil, timeout: 5000, interval: 100)
40-
tap do
41-
evaluate_func(%(
42-
function(selector, isXpath, timeout, interval) {
43-
var attempts = 0;
44-
var max = timeout / interval;
45-
function waitForSelector(resolve, reject) {
46-
if (attempts > ((max < 1) ? 1 : max)) {
47-
return reject(new Error("Not found element match the selector: " + selector));
48-
}
49-
var element = isXpath
50-
? document.
51-
evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
52-
: document.querySelector(selector);
53-
if (element !== null) {
54-
return resolve(element);
55-
}
56-
setTimeout(function () {
57-
waitForSelector(resolve, reject);
58-
}, interval);
59-
attempts++;
40+
evaluate_func(%(
41+
function(selector, isXpath, timeout, interval) {
42+
var attempts = 0;
43+
var max = timeout / interval;
44+
function waitForSelector(resolve, reject) {
45+
if (attempts > ((max < 1) ? 1 : max)) {
46+
return reject(new Error("Not found element match the selector: " + selector));
6047
}
61-
return new Promise(function (resolve, reject) {
48+
var element = isXpath
49+
? document.
50+
evaluate(selector, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
51+
: document.querySelector(selector);
52+
if (element !== null) {
53+
return resolve(element);
54+
}
55+
setTimeout(function () {
6256
waitForSelector(resolve, reject);
63-
});
57+
}, interval);
58+
attempts++;
6459
}
65-
), css || xpath, css.nil? && !xpath.nil?, timeout, interval, awaitPromise: true)
66-
end
60+
return new Promise(function (resolve, reject) {
61+
waitForSelector(resolve, reject);
62+
});
63+
}
64+
), css || xpath, css.nil? && !xpath.nil?, timeout, interval, awaitPromise: true)
6765
end
6866

6967
def xpath(selector, within: nil)

spec/browser_spec.rb

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -509,30 +509,25 @@ module Ferrum
509509
browser.go_to("/ferrum/with_js")
510510
end
511511

512+
it "returns Node by provided selector" do
513+
expect(browser.wait_for_selector(css: "div#wait_for_selector")).to be_kind_of(Ferrum::Node)
514+
expect(browser.wait_for_selector(xpath: "//div[@id='wait_for_selector']")).to be_kind_of(Ferrum::Node)
515+
end
516+
512517
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
518+
expect(browser.wait_for_selector(css: "div#wait_for_selector")).not_to be_nil
516519
end
517520

518521
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+
expect(browser.wait_for_selector(css: "div#wait_for_hidden_selector")).not_to be_nil
522523
end
523524

524525
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
526+
expect(browser.wait_for_selector(xpath: "//div[@id='wait_for_selector']")).not_to be_nil
528527
end
529528

530529
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
530+
expect(browser.wait_for_selector(xpath: "//div[@id='wait_for_hidden_selector']")).not_to be_nil
536531
end
537532

538533
it "raises error when timeout exceed" do
@@ -555,9 +550,7 @@ module Ferrum
555550

556551
it "waits less than provided timeout when node found" do
557552
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
553+
expect(browser.wait_for_selector(css: "div#wait_for_selector", timeout: 2000)).not_to be_nil
561554
end
562555
end
563556

@@ -572,12 +565,8 @@ module Ferrum
572565
iframeDocument.close();
573566
}, 900);
574567
JS
575-
frame = browser.wait_for_selector(xpath: "//iframe[@name='frame']").at_xpath("//iframe[@name='frame']").frame
576-
expect(
577-
frame
578-
.wait_for_selector(xpath: "//div[@id='wait_for_selector_within_frame']")
579-
.at_css("div#wait_for_selector_within_frame")
580-
).not_to be_nil
568+
frame = browser.wait_for_selector(xpath: "//iframe[@name='frame']").frame
569+
expect(frame.wait_for_selector(xpath: "//div[@id='wait_for_selector_within_frame']")).not_to be_nil
581570
end
582571
end
583572

0 commit comments

Comments
 (0)