Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add support for disabling JavaScript when clicking a link to enable t…
…esting of both JS and non-JS implementations LM/BH
  • Loading branch information
brynary committed Jun 20, 2008
1 parent 856b6cb commit 6074ec3
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
12 changes: 9 additions & 3 deletions lib/webrat/core/link.rb
Expand Up @@ -6,11 +6,17 @@ def initialize(page, element)
@element = element
end

def click(method = nil)
def click(method = nil, options = {})
method ||= http_method
return if href =~ /^#/ && method == :get

Page.new(@page.session, absolute_href, method, data)

options[:javascript] = true if options[:javascript].nil?

if options[:javascript]
Page.new(@page.session, absolute_href, method, data)
else
Page.new(@page.session, absolute_href, :get, {})
end
end

def matches_text?(link_text)
Expand Down
16 changes: 12 additions & 4 deletions lib/webrat/core/page.rb
Expand Up @@ -16,7 +16,7 @@ def initialize(session, url = nil, method = :get, data = {})
@data = data

reset_dom
reloads if @url
load_page if @url

session.current_page = self
end
Expand Down Expand Up @@ -128,11 +128,15 @@ def open_in_browser(path) # :nodoc
# JavaScript onclick handlers for PUT, POST and DELETE links, as well as
# CSRF authenticity tokens if they are present.
#
# Javascript imitation can be disabled by passing the option :javascript => false
#
# Example:
# clicks_link "Sign up"
def clicks_link(link_text)
#
# clicks_link "Sign up", :javascript => false
def clicks_link(link_text, options = {})
link = find_link(link_text)
link.click
link.click(nil, options)
end

# Works like clicks_link, but only looks for the link text within a given selector
Expand Down Expand Up @@ -207,13 +211,17 @@ def clicks_button(value = nil)
# Example:
# reloads
def reloads
request_page(@url, @method, @data)
load_page
end

def submits_form(form_id = nil) # :nodoc:
end

protected

def load_page
request_page(@url, @method, @data)
end

def find_select_option(option_text)
forms.each do |form|
Expand Down
14 changes: 14 additions & 0 deletions spec/api/clicks_link_spec.rb
Expand Up @@ -97,6 +97,20 @@
@session.clicks_link "Posts"
end

it "should click rails javascript post links without javascript" do
@session.response_body = <<-EOS
<a href="/posts" onclick="var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
f.submit();
return false;">Posts</a>
EOS
@session.expects(:get).with("/posts", {})
@session.clicks_link "Posts", :javascript => false
end

it "should click rails javascript put links" do
@session.response_body = <<-EOS
<a href="/posts" onclick="var f = document.createElement('form');
Expand Down

0 comments on commit 6074ec3

Please sign in to comment.