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 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)

View File

@ -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