require File.expand_path('spec_helper', File.dirname(__FILE__)) require 'nokogiri' shared_examples_for "session" do def extract_results(session) YAML.load Nokogiri::HTML(session.body).xpath("//pre[@id='results']").first.text end describe '#app' do it "should remember the application" do @session.app.should == TestApp end end describe '#visit' do it "should fetch a response from the driver" do @session.visit('/') @session.body.should include('Hello world!') @session.visit('/foo') @session.body.should include('Another World') end end describe '#click_link' do before do @session.visit('/with_html') end context "with id given" do it "should take user to the linked page" do @session.click_link('foo') @session.body.should include('Another World') end end context "with text given" do it "should take user to the linked page" do @session.click_link('labore') @session.body.should include('

Bar

') end end context "with title given" do it "should take user to the linked page" do @session.click_link('awesome title') @session.body.should include('

Bar

') end end context "with a locator that doesn't exist" do it "should raise an error" do running do @session.click_link('does not exist') end.should raise_error(Capybara::ElementNotFound) end end it "should follow redirects" do @session.click_link('Redirect') @session.body.should include('You landed') end end describe '#click_button' do before do @session.visit('/form') end context "with multiple values with the same name" do it "should use the latest given value" do @session.check('Terms of Use') @session.click_button('awesome') extract_results(@session)['terms_of_use'].should == '1' end end context "with value given on a submit button" do before do @session.click_button('awesome') @results = extract_results(@session) end it "should serialize and submit text fields" do @results['first_name'].should == 'John' end it "should escape fields when submitting" do @results['phone'].should == '+1 555 7021' end it "should serialize and submit password fields" do @results['password'].should == 'seeekrit' end it "should serialize and submit hidden fields" do @results['token'].should == '12345' end it "should not serialize fields from other forms" do @results['middle_name'].should be_nil end it "should submit the button that was clicked, but not other buttons" do @results['awesome'].should == 'awesome' @results['crappy'].should be_nil end it "should serialize radio buttons" do @results['gender'].should == 'female' end it "should serialize check boxes" do @results['pets'].should include('dog', 'hamster') @results['pets'].should_not include('cat') end it "should serialize text areas" do @results['description'].should == 'Descriptive text goes here' end it "should serialize select tag with values" do @results['locale'].should == 'en' end it "should serialize select tag without values" do @results['region'].should == 'Norway' end it "should serialize first option for select tag with no selection" do @results['city'].should == 'London' end it "should not serialize a select tag without options" do @results['tendency'].should be_nil end end context "with id given on a submit button" do it "should submit the associated form" do @session.click_button('awe123') extract_results(@session)['first_name'].should == 'John' end end context "with value given on an image button" do it "should submit the associated form" do @session.click_button('okay') extract_results(@session)['first_name'].should == 'John' end end context "with id given on an image button" do it "should submit the associated form" do @session.click_button('okay556') extract_results(@session)['first_name'].should == 'John' end end context "with text given on a button defined by