Raise error when an invisible element receives #click so it resembles a browser more closely.

This commit is contained in:
Marco Antonio 2012-01-18 19:14:47 -02:00 committed by Joe Ferris
parent 59ba8611ba
commit 04a1baaf2a
2 changed files with 17 additions and 2 deletions

View File

@ -1,5 +1,9 @@
class Capybara::Driver::Webkit
class Node < Capybara::Driver::Node
class ElementNotDisplayedError < StandardError
end
NBSP = "\xC2\xA0"
NBSP.force_encoding("UTF-8") if NBSP.respond_to?(:force_encoding)
@ -46,7 +50,11 @@ class Capybara::Driver::Webkit
end
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
def drag_to(element)

View File

@ -639,6 +639,7 @@ describe Capybara::Driver::Webkit do
});
</script>
<a href="/next">Next</a>
<a href="/next" id="hidden" style="display:none;">Not displayed</a>
</body></html>
HTML
[200,
@ -647,7 +648,7 @@ describe Capybara::Driver::Webkit do
end
end
it "clicks an element" do
it "clicks a visible element" do
subject.find("//a").first.click
subject.current_url =~ %r{/next$}
end
@ -657,6 +658,12 @@ describe Capybara::Driver::Webkit do
subject.find("//*[@class='triggered']").should_not be_empty
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
subject.find("//*[@id='change']").first.trigger("change")
subject.find("//*[@class='triggered']").should_not be_empty