From 04a1baaf2ac3e95b368508f74d00ee645d67cc63 Mon Sep 17 00:00:00 2001 From: Marco Antonio Date: Wed, 18 Jan 2012 19:14:47 -0200 Subject: [PATCH] Raise error when an invisible element receives #click so it resembles a browser more closely. --- lib/capybara/driver/webkit/node.rb | 10 +++++++++- spec/driver_spec.rb | 9 ++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/capybara/driver/webkit/node.rb b/lib/capybara/driver/webkit/node.rb index 574db03..0876eb3 100644 --- a/lib/capybara/driver/webkit/node.rb +++ b/lib/capybara/driver/webkit/node.rb @@ -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) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 467a803..6767791 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -639,6 +639,7 @@ describe Capybara::Driver::Webkit do }); Next + 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