Working with the response DOM

View: New views
4 Messages — Rating Filter:   Alert me  

Working with the response DOM

by Andy Watts :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

Anyone know a way to traverse/query the DOM in a response?

I'm trying to write reusable story step implementations and as much as possible want to work with the actual response from a previous GET.

As an example, I often have buttons that POST/PUT a hidden value.
My goal is a reusable step implementation that takes the button label and works the existing response DOM to make an appropriate POST/PUT.

- Andy

Re: Working with the response DOM

by Andy Watts :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I completely forgot about Hpricot
http://code.whytheluckystiff.net/hpricot/ 

Looks perfect for this.

- Andy


Andy Watts wrote:
Hi,

Anyone know a way to traverse/query the DOM in a response?

I'm trying to write reusable story step implementations and as much as possible want to work with the actual response from a previous GET.

As an example, I often have buttons that POST/PUT a hidden value.
My goal is a reusable step implementation that takes the button label and works the existing response DOM to make an appropriate POST/PUT.

- Andy

Re: Working with the response DOM

by Jonathan Linowes :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I've been wondering the same for quite a while
http://www.nabble.com/simple-story,-extract-link-t4518721.html
but hadnt asked the question so succinctly

In that thread, Pat suggests helpers like click_link and submit_form
If you progress along these lines, please post your solution, I'm  
very interested.

linoj


On Oct 24, 2007, at 12:43 AM, Andy Watts wrote:

>
> I completely forgot about Hpricot
> http://code.whytheluckystiff.net/hpricot/
>
> Looks perfect for this.
>
> - Andy
>
>
>
> Andy Watts wrote:
>>
>> Hi,
>>
>> Anyone know a way to traverse/query the DOM in a response?
>>
>> I'm trying to write reusable story step implementations and as  
>> much as
>> possible want to work with the actual response from a previous GET.
>>
>> As an example, I often have buttons that POST/PUT a hidden value.
>> My goal is a reusable step implementation that takes the button  
>> label and
>> works the existing response DOM to make an appropriate POST/PUT.
>>
>> - Andy
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Working-with- 
> the-response-DOM-tf4681975.html#a13378962
> Sent from the rspec-users mailing list archive at Nabble.com.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@...
> http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
rspec-users@...
http://rubyforge.org/mailman/listinfo/rspec-users

Re: Working with the response DOM - Step implementations using Hpricot

by Andy Watts :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I'm playing with step implementations that use hpricot to manipulate response.body.
Here's what I have so far.  
Very much work-in-progress, but may be of some use to you.

#This step implementation takes a button's label, collects the inputs and does the POST/PUT
add.when("I click the $button_text button") do |button_text|                                                                                  
   h = Hpricot(response.body)                                                                                                                        
   form = h.search("form[button][text()=#{button_text}]").first
   action = form[:action]                                                                                                                            
   method = form[:method]
   headers = {'HTTP_REFERER' => request.env['REQUEST_URI']}                                                                                            
   params = {}
   form.search('input').each{|i| params[i[:name]] = i[:value] }                                                                                      
   send(method, action, params, headers)
end  


#This step implementation takes an input field & value, and updates the response.body
add.when("I set the $input_field to $value") do |input_field,value|                                                                                
  input_field.each{|s| s = s.sub!(/^'(.*?)'$/,'\1') }  # strip the quotes if used in the input field
  input_field.gsub!(' ', '_')                            # join to get an id to search for..not robust enough?            
  h = Hpricot(response.body)                             # get body in Hpricot
  field_element = h.search("input##{input_field}").first # find the input field                                                                      
  field_element[:value] = value                          # update the field's value
  response.body = h.to_html                              # put the modified body back in the response                                          
end

- Andy




Jonathan Linowes wrote:
I've been wondering the same for quite a while
http://www.nabble.com/simple-story,-extract-link-t4518721.html
but hadnt asked the question so succinctly

In that thread, Pat suggests helpers like click_link and submit_form
If you progress along these lines, please post your solution, I'm  
very interested.

linoj


On Oct 24, 2007, at 12:43 AM, Andy Watts wrote:

>
> I completely forgot about Hpricot
> http://code.whytheluckystiff.net/hpricot/
>
> Looks perfect for this.
>
> - Andy
>
>
>
> Andy Watts wrote:
>>
>> Hi,
>>
>> Anyone know a way to traverse/query the DOM in a response?
>>
>> I'm trying to write reusable story step implementations and as  
>> much as
>> possible want to work with the actual response from a previous GET.
>>
>> As an example, I often have buttons that POST/PUT a hidden value.
>> My goal is a reusable step implementation that takes the button  
>> label and
>> works the existing response DOM to make an appropriate POST/PUT.
>>
>> - Andy
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Working-with- 
> the-response-DOM-tf4681975.html#a13378962
> Sent from the rspec-users mailing list archive at Nabble.com.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users