I was writing a feature in which I had webrat push a button. However, there are many buttons on this page with the same text. I wanted to specify which one would be push in as close a way I could to the way a person would describe which one he was pushing. Here is what I ended up with:
#custom_webrate_steps.rb require 'rexml/document' include REXML When /^I push "(.*)" near "(.*)"$/ do |button, text| #The dom element that contains the text must have an id rexml_doc = Document.new(response.body) regexp = /#{Regexp.escape(text)}/ nodes = find_nodes_with_regexp(rexml_doc, regexp) dom_id = nodes.first.attributes['id'] within '#' + dom_id do |scope| scope.clicks_button(button) end end def find_nodes_with_regexp(node, regexp) result = [] result << node if node.methods.include?('text') && node.text =~ regexp node.each {|n| result += find_nodes_with_regexp(n, regexp)} if node.methods.include?('each') result end Any ideas for making this *nicer*? -- Posted via http://www.ruby-forum.com/. _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users