Raise error when an invisible element receives #click so it resembles a browser more closely.
This commit is contained in:
parent
59ba8611ba
commit
04a1baaf2a
|
@ -1,5 +1,9 @@
|
||||||
class Capybara::Driver::Webkit
|
class Capybara::Driver::Webkit
|
||||||
class Node < Capybara::Driver::Node
|
class Node < Capybara::Driver::Node
|
||||||
|
|
||||||
|
class ElementNotDisplayedError < StandardError
|
||||||
|
end
|
||||||
|
|
||||||
NBSP = "\xC2\xA0"
|
NBSP = "\xC2\xA0"
|
||||||
NBSP.force_encoding("UTF-8") if NBSP.respond_to?(:force_encoding)
|
NBSP.force_encoding("UTF-8") if NBSP.respond_to?(:force_encoding)
|
||||||
|
|
||||||
|
@ -46,7 +50,11 @@ class Capybara::Driver::Webkit
|
||||||
end
|
end
|
||||||
|
|
||||||
def click
|
def click
|
||||||
invoke "click"
|
if visible?
|
||||||
|
invoke "click"
|
||||||
|
else
|
||||||
|
raise ElementNotDisplayedError, "This element is not visible so it may not be interacted with"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def drag_to(element)
|
def drag_to(element)
|
||||||
|
|
|
@ -639,6 +639,7 @@ describe Capybara::Driver::Webkit do
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<a href="/next">Next</a>
|
<a href="/next">Next</a>
|
||||||
|
<a href="/next" id="hidden" style="display:none;">Not displayed</a>
|
||||||
</body></html>
|
</body></html>
|
||||||
HTML
|
HTML
|
||||||
[200,
|
[200,
|
||||||
|
@ -647,7 +648,7 @@ describe Capybara::Driver::Webkit do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "clicks an element" do
|
it "clicks a visible element" do
|
||||||
subject.find("//a").first.click
|
subject.find("//a").first.click
|
||||||
subject.current_url =~ %r{/next$}
|
subject.current_url =~ %r{/next$}
|
||||||
end
|
end
|
||||||
|
@ -657,6 +658,12 @@ describe Capybara::Driver::Webkit do
|
||||||
subject.find("//*[@class='triggered']").should_not be_empty
|
subject.find("//*[@class='triggered']").should_not be_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "raises error when it tries to click an invisible element" do
|
||||||
|
expect {
|
||||||
|
subject.find("//*[@id='hidden']").first.click
|
||||||
|
}.to raise_error(Capybara::Driver::Webkit::Node::ElementNotDisplayedError)
|
||||||
|
end
|
||||||
|
|
||||||
it "fires a non-mouse event" do
|
it "fires a non-mouse event" do
|
||||||
subject.find("//*[@id='change']").first.trigger("change")
|
subject.find("//*[@id='change']").first.trigger("change")
|
||||||
subject.find("//*[@class='triggered']").should_not be_empty
|
subject.find("//*[@class='triggered']").should_not be_empty
|
||||||
|
|
Loading…
Reference in New Issue