raldred-webrat 0.4.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +346 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +85 -0
- data/Rakefile +168 -0
- data/install.rb +1 -0
- data/lib/webrat.rb +31 -0
- data/lib/webrat/core.rb +14 -0
- data/lib/webrat/core/configuration.rb +102 -0
- data/lib/webrat/core/elements/area.rb +31 -0
- data/lib/webrat/core/elements/element.rb +33 -0
- data/lib/webrat/core/elements/field.rb +405 -0
- data/lib/webrat/core/elements/form.rb +103 -0
- data/lib/webrat/core/elements/label.rb +31 -0
- data/lib/webrat/core/elements/link.rb +92 -0
- data/lib/webrat/core/elements/select_option.rb +35 -0
- data/lib/webrat/core/locators.rb +20 -0
- data/lib/webrat/core/locators/area_locator.rb +38 -0
- data/lib/webrat/core/locators/button_locator.rb +54 -0
- data/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/lib/webrat/core/locators/field_locator.rb +25 -0
- data/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/lib/webrat/core/locators/form_locator.rb +19 -0
- data/lib/webrat/core/locators/label_locator.rb +34 -0
- data/lib/webrat/core/locators/link_locator.rb +75 -0
- data/lib/webrat/core/locators/locator.rb +20 -0
- data/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/lib/webrat/core/logging.rb +24 -0
- data/lib/webrat/core/matchers.rb +4 -0
- data/lib/webrat/core/matchers/have_content.rb +73 -0
- data/lib/webrat/core/matchers/have_selector.rb +74 -0
- data/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/lib/webrat/core/matchers/have_xpath.rb +147 -0
- data/lib/webrat/core/methods.rb +63 -0
- data/lib/webrat/core/mime.rb +29 -0
- data/lib/webrat/core/save_and_open_page.rb +50 -0
- data/lib/webrat/core/scope.rb +350 -0
- data/lib/webrat/core/session.rb +289 -0
- data/lib/webrat/core/xml.rb +115 -0
- data/lib/webrat/core/xml/hpricot.rb +19 -0
- data/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/lib/webrat/core/xml/rexml.rb +24 -0
- data/lib/webrat/core_extensions/blank.rb +58 -0
- data/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/lib/webrat/mechanize.rb +74 -0
- data/lib/webrat/merb.rb +9 -0
- data/lib/webrat/merb_session.rb +65 -0
- data/lib/webrat/rack.rb +24 -0
- data/lib/webrat/rack_test.rb +32 -0
- data/lib/webrat/rails.rb +105 -0
- data/lib/webrat/rspec-rails.rb +13 -0
- data/lib/webrat/selenium.rb +81 -0
- data/lib/webrat/selenium/application_server.rb +73 -0
- data/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/lib/webrat/selenium/location_strategy_javascript/label.js +15 -0
- data/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/lib/webrat/selenium/matchers.rb +4 -0
- data/lib/webrat/selenium/matchers/have_content.rb +66 -0
- data/lib/webrat/selenium/matchers/have_selector.rb +49 -0
- data/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/lib/webrat/selenium/merb_application_server.rb +48 -0
- data/lib/webrat/selenium/rails_application_server.rb +42 -0
- data/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/lib/webrat/selenium/selenium_rc_server.rb +84 -0
- data/lib/webrat/selenium/selenium_session.rb +242 -0
- data/lib/webrat/selenium/silence_stream.rb +18 -0
- data/lib/webrat/selenium/sinatra_application_server.rb +35 -0
- data/lib/webrat/sinatra.rb +44 -0
- data/spec/fakes/test_session.rb +34 -0
- data/spec/integration/merb/app/controllers/application.rb +2 -0
- data/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/spec/integration/merb/app/controllers/testing.rb +18 -0
- data/spec/integration/merb/config/environments/development.rb +15 -0
- data/spec/integration/merb/config/environments/rake.rb +11 -0
- data/spec/integration/merb/config/environments/test.rb +14 -0
- data/spec/integration/merb/config/init.rb +25 -0
- data/spec/integration/merb/config/rack.rb +11 -0
- data/spec/integration/merb/config/router.rb +33 -0
- data/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/spec/integration/merb/spec/webrat_spec.rb +32 -0
- data/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/spec/integration/rack/rack_app.rb +16 -0
- data/spec/integration/rack/test/test_helper.rb +20 -0
- data/spec/integration/rack/test/webrat_rack_test.rb +67 -0
- data/spec/integration/rails/app/controllers/application.rb +15 -0
- data/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/spec/integration/rails/app/controllers/webrat_controller.rb +39 -0
- data/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/spec/integration/rails/config/boot.rb +109 -0
- data/spec/integration/rails/config/environment.rb +12 -0
- data/spec/integration/rails/config/environments/development.rb +17 -0
- data/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/spec/integration/rails/config/environments/test.rb +22 -0
- data/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/spec/integration/rails/config/routes.rb +17 -0
- data/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/spec/integration/rails/test/integration/link_click_test.rb +21 -0
- data/spec/integration/rails/test/integration/webrat_test.rb +75 -0
- data/spec/integration/rails/test/test_helper.rb +25 -0
- data/spec/integration/sinatra/classic_app.rb +64 -0
- data/spec/integration/sinatra/modular_app.rb +16 -0
- data/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/spec/private/core/configuration_spec.rb +106 -0
- data/spec/private/core/field_spec.rb +85 -0
- data/spec/private/core/link_spec.rb +24 -0
- data/spec/private/core/logging_spec.rb +10 -0
- data/spec/private/core/session_spec.rb +198 -0
- data/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/spec/private/merb/merb_session_spec.rb +42 -0
- data/spec/private/nokogiri_spec.rb +77 -0
- data/spec/private/rails/attaches_file_spec.rb +81 -0
- data/spec/private/rails/rails_session_spec.rb +110 -0
- data/spec/public/basic_auth_spec.rb +24 -0
- data/spec/public/check_spec.rb +191 -0
- data/spec/public/choose_spec.rb +118 -0
- data/spec/public/click_area_spec.rb +106 -0
- data/spec/public/click_button_spec.rb +496 -0
- data/spec/public/click_link_spec.rb +541 -0
- data/spec/public/fill_in_spec.rb +209 -0
- data/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/spec/public/locators/field_labeled_spec.rb +172 -0
- data/spec/public/locators/field_with_id_spec.rb +16 -0
- data/spec/public/matchers/contain_spec.rb +114 -0
- data/spec/public/matchers/have_selector_spec.rb +142 -0
- data/spec/public/matchers/have_tag_spec.rb +39 -0
- data/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/spec/public/reload_spec.rb +10 -0
- data/spec/public/save_and_open_spec.rb +51 -0
- data/spec/public/select_date_spec.rb +112 -0
- data/spec/public/select_datetime_spec.rb +137 -0
- data/spec/public/select_spec.rb +249 -0
- data/spec/public/select_time_spec.rb +100 -0
- data/spec/public/set_hidden_field_spec.rb +5 -0
- data/spec/public/submit_form_spec.rb +5 -0
- data/spec/public/visit_spec.rb +58 -0
- data/spec/public/within_spec.rb +177 -0
- data/spec/spec_helper.rb +50 -0
- data/vendor/selenium-server.jar +0 -0
- metadata +220 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe "choose" do
|
|
4
|
+
it "should fail if no radio buttons found" do
|
|
5
|
+
with_html <<-HTML
|
|
6
|
+
<html>
|
|
7
|
+
<form method="post" action="/login">
|
|
8
|
+
</form>
|
|
9
|
+
</html>
|
|
10
|
+
HTML
|
|
11
|
+
|
|
12
|
+
lambda { choose "first option" }.should raise_error(Webrat::NotFoundError)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should fail if input is not a radio button" do
|
|
16
|
+
with_html <<-HTML
|
|
17
|
+
<html>
|
|
18
|
+
<form method="post" action="/login">
|
|
19
|
+
<input type="text" name="first_option" />
|
|
20
|
+
</form>
|
|
21
|
+
</html>
|
|
22
|
+
HTML
|
|
23
|
+
|
|
24
|
+
lambda { choose "first_option" }.should raise_error(Webrat::NotFoundError)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should check rails style radio buttons" do
|
|
28
|
+
with_html <<-HTML
|
|
29
|
+
<html>
|
|
30
|
+
<form method="get" action="/login">
|
|
31
|
+
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
|
32
|
+
<label for="user_gender_male">Male</label>
|
|
33
|
+
<input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
|
34
|
+
<label for="user_gender_female">Female</label>
|
|
35
|
+
<input type="submit" />
|
|
36
|
+
</form>
|
|
37
|
+
</html>
|
|
38
|
+
HTML
|
|
39
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "M"})
|
|
40
|
+
choose "Male"
|
|
41
|
+
click_button
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should only submit last chosen value" do
|
|
45
|
+
with_html <<-HTML
|
|
46
|
+
<html>
|
|
47
|
+
<form method="get" action="/login">
|
|
48
|
+
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
|
49
|
+
<label for="user_gender_male">Male</label>
|
|
50
|
+
<input id="user_gender_female" name="user[gender]" type="radio" value="F" />
|
|
51
|
+
<label for="user_gender_female">Female</label>
|
|
52
|
+
<input type="submit" />
|
|
53
|
+
</form>
|
|
54
|
+
</html>
|
|
55
|
+
HTML
|
|
56
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "M"})
|
|
57
|
+
choose "Female"
|
|
58
|
+
choose "Male"
|
|
59
|
+
click_button
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should fail if the radio button is disabled" do
|
|
63
|
+
with_html <<-HTML
|
|
64
|
+
<html>
|
|
65
|
+
<form method="post" action="/login">
|
|
66
|
+
<input type="radio" name="first_option" disabled="disabled" />
|
|
67
|
+
<input type="submit" />
|
|
68
|
+
</form>
|
|
69
|
+
</html>
|
|
70
|
+
HTML
|
|
71
|
+
|
|
72
|
+
lambda { choose "first_option" }.should raise_error(Webrat::DisabledFieldError)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should result in the value on being posted if not specified" do
|
|
76
|
+
with_html <<-HTML
|
|
77
|
+
<html>
|
|
78
|
+
<form method="post" action="/login">
|
|
79
|
+
<input type="radio" name="first_option" />
|
|
80
|
+
<input type="submit" />
|
|
81
|
+
</form>
|
|
82
|
+
</html>
|
|
83
|
+
HTML
|
|
84
|
+
webrat_session.should_receive(:post).with("/login", "first_option" => "on")
|
|
85
|
+
choose "first_option"
|
|
86
|
+
click_button
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should result in the value on being posted if not specified and checked by default" do
|
|
90
|
+
with_html <<-HTML
|
|
91
|
+
<html>
|
|
92
|
+
<form method="post" action="/login">
|
|
93
|
+
<input type="radio" name="first_option" checked="checked"/>
|
|
94
|
+
<input type="submit" />
|
|
95
|
+
</form>
|
|
96
|
+
</html>
|
|
97
|
+
HTML
|
|
98
|
+
webrat_session.should_receive(:post).with("/login", "first_option" => "on")
|
|
99
|
+
click_button
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should result in the value of the selected radio button being posted when a subsequent one is checked by default" do
|
|
103
|
+
with_html <<-HTML
|
|
104
|
+
<html>
|
|
105
|
+
<form method="post" action="/login">
|
|
106
|
+
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
|
107
|
+
<label for="user_gender_male">Male</label>
|
|
108
|
+
<input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
|
|
109
|
+
<label for="user_gender_female">Female</label>
|
|
110
|
+
<input type="submit" />
|
|
111
|
+
</form>
|
|
112
|
+
</html>
|
|
113
|
+
HTML
|
|
114
|
+
webrat_session.should_receive(:post).with("/login", "user" => {"gender" => "M"})
|
|
115
|
+
choose "Male"
|
|
116
|
+
click_button
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe "click_area" do
|
|
4
|
+
it "should use get by default" do
|
|
5
|
+
with_html <<-HTML
|
|
6
|
+
<html>
|
|
7
|
+
<map name="map_de" id="map_de">
|
|
8
|
+
<area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
9
|
+
</map>
|
|
10
|
+
</html>
|
|
11
|
+
HTML
|
|
12
|
+
webrat_session.should_receive(:get).with("/page", {})
|
|
13
|
+
click_area "Berlin"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should assert valid response" do
|
|
17
|
+
with_html <<-HTML
|
|
18
|
+
<html>
|
|
19
|
+
<map name="map_de" id="map_de">
|
|
20
|
+
<area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
21
|
+
</map>
|
|
22
|
+
</html>
|
|
23
|
+
HTML
|
|
24
|
+
webrat_session.response_code = 501
|
|
25
|
+
lambda { click_area "Berlin" }.should raise_error(Webrat::PageLoadError)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
[200, 300, 400, 499].each do |status|
|
|
29
|
+
it "should consider the #{status} status code as success" do
|
|
30
|
+
with_html <<-HTML
|
|
31
|
+
<html>
|
|
32
|
+
<map name="map_de" id="map_de">
|
|
33
|
+
<area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
34
|
+
</map>
|
|
35
|
+
</html>
|
|
36
|
+
HTML
|
|
37
|
+
webrat_session.stub!(:redirect? => false)
|
|
38
|
+
webrat_session.response_code = status
|
|
39
|
+
lambda { click_area "Berlin" }.should_not raise_error
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should fail if the area doesn't exist" do
|
|
44
|
+
with_html <<-HTML
|
|
45
|
+
<html>
|
|
46
|
+
<map name="map_de" id="map_de">
|
|
47
|
+
<area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
48
|
+
</map>
|
|
49
|
+
</html>
|
|
50
|
+
HTML
|
|
51
|
+
|
|
52
|
+
lambda {
|
|
53
|
+
click_area "Missing area"
|
|
54
|
+
}.should raise_error(Webrat::NotFoundError)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should not be case sensitive" do
|
|
58
|
+
with_html <<-HTML
|
|
59
|
+
<html>
|
|
60
|
+
<map name="map_de" id="map_de">
|
|
61
|
+
<area href="/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
62
|
+
</map>
|
|
63
|
+
</html>
|
|
64
|
+
HTML
|
|
65
|
+
webrat_session.should_receive(:get).with("/page", {})
|
|
66
|
+
click_area "berlin"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
it "should follow relative links" do
|
|
71
|
+
webrat_session.stub!(:current_url => "/page")
|
|
72
|
+
with_html <<-HTML
|
|
73
|
+
<html>
|
|
74
|
+
<map name="map_de" id="map_de">
|
|
75
|
+
<area href="sub" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
76
|
+
</map>
|
|
77
|
+
</html>
|
|
78
|
+
HTML
|
|
79
|
+
webrat_session.should_receive(:get).with("/page/sub", {})
|
|
80
|
+
click_area "Berlin"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "should follow fully qualified local links" do
|
|
84
|
+
with_html <<-HTML
|
|
85
|
+
<html>
|
|
86
|
+
<map name="map_de" id="map_de">
|
|
87
|
+
<area href="http://www.example.com/page" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
88
|
+
</map>
|
|
89
|
+
</html>
|
|
90
|
+
HTML
|
|
91
|
+
webrat_session.should_receive(:get).with("http://www.example.com/page", {})
|
|
92
|
+
click_area "Berlin"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should follow query parameters" do
|
|
96
|
+
with_html <<-HTML
|
|
97
|
+
<html>
|
|
98
|
+
<map name="map_de" id="map_de">
|
|
99
|
+
<area href="/page?foo=bar" title="Berlin" id="berlin" shape="poly" alt="Berlin" coords="180,89,180" />
|
|
100
|
+
</map>
|
|
101
|
+
</html>
|
|
102
|
+
HTML
|
|
103
|
+
webrat_session.should_receive(:get).with("/page?foo=bar", {})
|
|
104
|
+
click_area "Berlin"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe "click_button" do
|
|
4
|
+
it "should fail if no buttons" do
|
|
5
|
+
with_html <<-HTML
|
|
6
|
+
<html>
|
|
7
|
+
<form method="get" action="/login"></form>
|
|
8
|
+
</html>
|
|
9
|
+
HTML
|
|
10
|
+
|
|
11
|
+
lambda { click_button }.should raise_error(Webrat::NotFoundError)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should fail if input is not a submit button" do
|
|
15
|
+
with_html <<-HTML
|
|
16
|
+
<html>
|
|
17
|
+
<form method="get" action="/login">
|
|
18
|
+
<input type="reset" />
|
|
19
|
+
</form>
|
|
20
|
+
</html>
|
|
21
|
+
HTML
|
|
22
|
+
|
|
23
|
+
lambda { click_button }.should raise_error(Webrat::NotFoundError)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
it "should fail if button is disabled" do
|
|
28
|
+
with_html <<-HTML
|
|
29
|
+
<html>
|
|
30
|
+
<form method="get" action="/login">
|
|
31
|
+
<input type="submit" disabled="disabled" />
|
|
32
|
+
</form>
|
|
33
|
+
</html>
|
|
34
|
+
HTML
|
|
35
|
+
|
|
36
|
+
lambda { click_button }.should raise_error(Webrat::DisabledFieldError)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should default to get method" do
|
|
40
|
+
with_html <<-HTML
|
|
41
|
+
<html>
|
|
42
|
+
<form action="/login">
|
|
43
|
+
<input type="submit" />
|
|
44
|
+
</form>
|
|
45
|
+
</html>
|
|
46
|
+
HTML
|
|
47
|
+
webrat_session.should_receive(:get)
|
|
48
|
+
click_button
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should assert valid response" do
|
|
52
|
+
with_html <<-HTML
|
|
53
|
+
<html>
|
|
54
|
+
<form action="/login">
|
|
55
|
+
<input type="submit" />
|
|
56
|
+
</form>
|
|
57
|
+
</html>
|
|
58
|
+
HTML
|
|
59
|
+
webrat_session.response_code = 501
|
|
60
|
+
lambda { click_button }.should raise_error(Webrat::PageLoadError)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
[200, 300, 400, 499].each do |status|
|
|
64
|
+
it "should consider the #{status} status code as success" do
|
|
65
|
+
with_html <<-HTML
|
|
66
|
+
<html>
|
|
67
|
+
<form action="/login">
|
|
68
|
+
<input type="submit" />
|
|
69
|
+
</form>
|
|
70
|
+
</html>
|
|
71
|
+
HTML
|
|
72
|
+
webrat_session.stub!(:redirect? => false)
|
|
73
|
+
webrat_session.response_code = status
|
|
74
|
+
lambda { click_button }.should_not raise_error
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should submit the first form by default" do
|
|
79
|
+
with_html <<-HTML
|
|
80
|
+
<html>
|
|
81
|
+
<form method="get" action="/form1">
|
|
82
|
+
<input type="submit" />
|
|
83
|
+
</form>
|
|
84
|
+
<form method="get" action="/form2">
|
|
85
|
+
<input type="submit" />
|
|
86
|
+
</form>
|
|
87
|
+
</html>
|
|
88
|
+
HTML
|
|
89
|
+
webrat_session.should_receive(:get).with("/form1", {})
|
|
90
|
+
click_button
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should not explode on file fields" do
|
|
94
|
+
with_html <<-HTML
|
|
95
|
+
<html>
|
|
96
|
+
<form method="get" action="/form1">
|
|
97
|
+
<input type="file" />
|
|
98
|
+
<input type="submit" />
|
|
99
|
+
</form>
|
|
100
|
+
</html>
|
|
101
|
+
HTML
|
|
102
|
+
click_button
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "should submit the form with the specified button" do
|
|
106
|
+
with_html <<-HTML
|
|
107
|
+
<html>
|
|
108
|
+
<form method="get" action="/form1">
|
|
109
|
+
<input type="submit" />
|
|
110
|
+
</form>
|
|
111
|
+
<form method="get" action="/form2">
|
|
112
|
+
<input type="submit" value="Form2" />
|
|
113
|
+
</form>
|
|
114
|
+
</html>
|
|
115
|
+
HTML
|
|
116
|
+
webrat_session.should_receive(:get).with("/form2", {})
|
|
117
|
+
click_button "Form2"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should use action from form" do
|
|
121
|
+
with_html <<-HTML
|
|
122
|
+
<html>
|
|
123
|
+
<form method="get" action="/login">
|
|
124
|
+
<input type="submit" />
|
|
125
|
+
</form>
|
|
126
|
+
</html>
|
|
127
|
+
HTML
|
|
128
|
+
webrat_session.should_receive(:get).with("/login", {})
|
|
129
|
+
click_button
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should use method from form" do
|
|
133
|
+
with_html <<-HTML
|
|
134
|
+
<html>
|
|
135
|
+
<form method="post" action="/login">
|
|
136
|
+
<input type="submit" />
|
|
137
|
+
</form>
|
|
138
|
+
</html>
|
|
139
|
+
HTML
|
|
140
|
+
webrat_session.should_receive(:post)
|
|
141
|
+
click_button
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "should send button as param if it has a name" do
|
|
145
|
+
with_html <<-HTML
|
|
146
|
+
<html>
|
|
147
|
+
<form method="post" action="/login">
|
|
148
|
+
<input type="submit" name="cancel" value="Cancel" />
|
|
149
|
+
<input type="submit" name="login" value="Login" />
|
|
150
|
+
</form>
|
|
151
|
+
</html>
|
|
152
|
+
HTML
|
|
153
|
+
webrat_session.should_receive(:post).with("/login", "login" => "Login")
|
|
154
|
+
click_button("Login")
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should not send button as param if it has no name" do
|
|
158
|
+
with_html <<-HTML
|
|
159
|
+
<html>
|
|
160
|
+
<form method="post" action="/login">
|
|
161
|
+
<input type="submit" name="cancel" value="Cancel" />
|
|
162
|
+
<input type="submit" value="Login" />
|
|
163
|
+
</form>
|
|
164
|
+
</html>
|
|
165
|
+
HTML
|
|
166
|
+
webrat_session.should_receive(:post).with("/login", {})
|
|
167
|
+
click_button("Login")
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "should send default password field values" do
|
|
171
|
+
with_html <<-HTML
|
|
172
|
+
<html>
|
|
173
|
+
<form method="get" action="/login">
|
|
174
|
+
<input id="user_password" name="user[password]" value="mypass" type="password" />
|
|
175
|
+
<input type="submit" />
|
|
176
|
+
</form>
|
|
177
|
+
</html>
|
|
178
|
+
HTML
|
|
179
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"password" => "mypass"})
|
|
180
|
+
click_button
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "should send default hidden field values" do
|
|
184
|
+
with_html <<-HTML
|
|
185
|
+
<html>
|
|
186
|
+
<form method="get" action="/login">
|
|
187
|
+
<input id="user_email" name="user[email]" value="test@example.com" type="hidden" />
|
|
188
|
+
<input type="submit" />
|
|
189
|
+
</form>
|
|
190
|
+
</html>
|
|
191
|
+
HTML
|
|
192
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
|
|
193
|
+
click_button
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "should send default text field values" do
|
|
197
|
+
with_html <<-HTML
|
|
198
|
+
<html>
|
|
199
|
+
<form method="get" action="/login">
|
|
200
|
+
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
|
|
201
|
+
<input type="submit" />
|
|
202
|
+
</form>
|
|
203
|
+
</html>
|
|
204
|
+
HTML
|
|
205
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"email" => "test@example.com"})
|
|
206
|
+
click_button
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "should not send disabled field values" do
|
|
210
|
+
with_html <<-HTML
|
|
211
|
+
<html>
|
|
212
|
+
<form method="get" action="/login">
|
|
213
|
+
<input disabled="disabled" id="user_email" name="user[email]" value="test@example.com" type="text" />
|
|
214
|
+
<input disabled="disabled" id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
|
215
|
+
<label for="user_gender_male">Male</label>
|
|
216
|
+
<input disabled="disabled" id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
|
|
217
|
+
<label for="user_gender_female">Female</label>
|
|
218
|
+
<input type="submit" />
|
|
219
|
+
</form>
|
|
220
|
+
</html>
|
|
221
|
+
HTML
|
|
222
|
+
webrat_session.should_receive(:get).with("/login", {})
|
|
223
|
+
click_button
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "should send default checked fields" do
|
|
227
|
+
with_html <<-HTML
|
|
228
|
+
<html>
|
|
229
|
+
<form method="get" action="/login">
|
|
230
|
+
<input id="user_tos" name="user[tos]" value="1" type="checkbox" checked="checked" />
|
|
231
|
+
<input type="submit" />
|
|
232
|
+
</form>
|
|
233
|
+
</html>
|
|
234
|
+
HTML
|
|
235
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
|
|
236
|
+
click_button
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it "should send default radio options" do
|
|
240
|
+
with_html <<-HTML
|
|
241
|
+
<html>
|
|
242
|
+
<form method="get" action="/login">
|
|
243
|
+
<input id="user_gender_male" name="user[gender]" type="radio" value="M" />
|
|
244
|
+
<label for="user_gender_male">Male</label>
|
|
245
|
+
<input id="user_gender_female" name="user[gender]" type="radio" value="F" checked="checked" />
|
|
246
|
+
<label for="user_gender_female">Female</label>
|
|
247
|
+
<input type="submit" />
|
|
248
|
+
</form>
|
|
249
|
+
</html>
|
|
250
|
+
HTML
|
|
251
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"gender" => "F"})
|
|
252
|
+
click_button
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
it "should send correct data for rails style unchecked fields" do
|
|
256
|
+
with_html <<-HTML
|
|
257
|
+
<html>
|
|
258
|
+
<form method="get" action="/login">
|
|
259
|
+
<input id="user_tos" name="user[tos]" type="checkbox" value="1" />
|
|
260
|
+
<input name="user[tos]" type="hidden" value="0" /> TOS
|
|
261
|
+
<input type="submit" />
|
|
262
|
+
</form>
|
|
263
|
+
</html>
|
|
264
|
+
HTML
|
|
265
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "0"})
|
|
266
|
+
click_button
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should send correct data for rails style checked fields" do
|
|
270
|
+
with_html <<-HTML
|
|
271
|
+
<html>
|
|
272
|
+
<form method="get" action="/login">
|
|
273
|
+
<input id="user_tos" name="user[tos]" type="checkbox" value="1" checked="checked" />
|
|
274
|
+
<input name="user[tos]" type="hidden" value="0" /> TOS
|
|
275
|
+
<input type="submit" />
|
|
276
|
+
</form>
|
|
277
|
+
</html>
|
|
278
|
+
HTML
|
|
279
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"tos" => "1"})
|
|
280
|
+
click_button
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
it "should send default collection fields" do
|
|
284
|
+
with_html <<-HTML
|
|
285
|
+
<html>
|
|
286
|
+
<form method="post" action="/login">
|
|
287
|
+
<input type="checkbox" name="options[]" value="burger" checked="checked" />
|
|
288
|
+
<input type="radio" name="options[]" value="fries" checked="checked" />
|
|
289
|
+
<input type="text" name="options[]" value="soda" />
|
|
290
|
+
<!-- Same value appearing twice -->
|
|
291
|
+
<input type="text" name="options[]" value="soda" />
|
|
292
|
+
<input type="hidden" name="options[]" value="dessert" />
|
|
293
|
+
<input type="hidden" name="response[choices][][selected]" value="one" />
|
|
294
|
+
<input type="hidden" name="response[choices][][selected]" value="two" />
|
|
295
|
+
<!-- Same value appearing twice -->
|
|
296
|
+
<input type="hidden" name="response[choices][][selected]" value="two" />
|
|
297
|
+
<input type="submit" />
|
|
298
|
+
</form>
|
|
299
|
+
</html>
|
|
300
|
+
HTML
|
|
301
|
+
webrat_session.should_receive(:post).with("/login",
|
|
302
|
+
"options" => ["burger", "fries", "soda", "soda", "dessert"],
|
|
303
|
+
"response" => { "choices" => [{"selected" => "one"}, {"selected" => "two"}, {"selected" => "two"}]})
|
|
304
|
+
click_button
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
it "should not send default unchecked fields" do
|
|
308
|
+
with_html <<-HTML
|
|
309
|
+
<html>
|
|
310
|
+
<form method="get" action="/login">
|
|
311
|
+
<input id="user_tos" name="user[tos]" value="1" type="checkbox" />
|
|
312
|
+
<input type="submit" />
|
|
313
|
+
</form>
|
|
314
|
+
</html>
|
|
315
|
+
HTML
|
|
316
|
+
webrat_session.should_receive(:get).with("/login", {})
|
|
317
|
+
click_button
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
it "should send default textarea values" do
|
|
321
|
+
with_html <<-HTML
|
|
322
|
+
<html>
|
|
323
|
+
<form method="post" action="/posts">
|
|
324
|
+
<textarea name="post[body]">Post body here!</textarea>
|
|
325
|
+
<input type="submit" />
|
|
326
|
+
</form>
|
|
327
|
+
</html>
|
|
328
|
+
HTML
|
|
329
|
+
webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Post body here!"})
|
|
330
|
+
click_button
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
it "should properly handle HTML entities in textarea default values" do
|
|
334
|
+
pending "needs bug fix" do
|
|
335
|
+
with_html <<-HTML
|
|
336
|
+
<html>
|
|
337
|
+
<form method="post" action="/posts">
|
|
338
|
+
<textarea name="post[body]">Peanut butter & jelly</textarea>
|
|
339
|
+
<input type="submit" />
|
|
340
|
+
</form>
|
|
341
|
+
</html>
|
|
342
|
+
HTML
|
|
343
|
+
webrat_session.should_receive(:post).with("/posts", "post" => {"body" => "Peanut butter & jelly"})
|
|
344
|
+
click_button
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
it "should send default selected option value from select" do
|
|
349
|
+
with_html <<-HTML
|
|
350
|
+
<html>
|
|
351
|
+
<form method="get" action="/login">
|
|
352
|
+
<select name="month">
|
|
353
|
+
<option value="1">January</option>
|
|
354
|
+
<option value="2" selected="selected">February</option>
|
|
355
|
+
</select>
|
|
356
|
+
<input type="submit" />
|
|
357
|
+
</form>
|
|
358
|
+
</html>
|
|
359
|
+
HTML
|
|
360
|
+
webrat_session.should_receive(:get).with("/login", "month" => "2")
|
|
361
|
+
click_button
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "should send default selected option inner html from select when no value attribute" do
|
|
365
|
+
with_html <<-HTML
|
|
366
|
+
<html>
|
|
367
|
+
<form method="get" action="/login">
|
|
368
|
+
<select name="month">
|
|
369
|
+
<option>January</option>
|
|
370
|
+
<option selected="selected">February</option>
|
|
371
|
+
</select>
|
|
372
|
+
<input type="submit" />
|
|
373
|
+
</form>
|
|
374
|
+
</html>
|
|
375
|
+
HTML
|
|
376
|
+
webrat_session.should_receive(:get).with("/login", "month" => "February")
|
|
377
|
+
click_button
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
it "should send first select option value when no option selected" do
|
|
381
|
+
with_html <<-HTML
|
|
382
|
+
<html>
|
|
383
|
+
<form method="get" action="/login">
|
|
384
|
+
<select name="month">
|
|
385
|
+
<option value="1">January</option>
|
|
386
|
+
<option value="2">February</option>
|
|
387
|
+
</select>
|
|
388
|
+
<input type="submit" />
|
|
389
|
+
</form>
|
|
390
|
+
</html>
|
|
391
|
+
HTML
|
|
392
|
+
webrat_session.should_receive(:get).with("/login", "month" => "1")
|
|
393
|
+
click_button
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
it "should handle nested properties" do
|
|
397
|
+
with_html <<-HTML
|
|
398
|
+
<html>
|
|
399
|
+
<form method="post" action="/login">
|
|
400
|
+
<input type="text" id="contestant_scores_12" name="contestant[scores][1]" value="2"/>
|
|
401
|
+
<input type="text" id="contestant_scores_13" name="contestant[scores][3]" value="4"/>
|
|
402
|
+
<input type="submit" />
|
|
403
|
+
</form>
|
|
404
|
+
</html>
|
|
405
|
+
HTML
|
|
406
|
+
webrat_session.should_receive(:post).with("/login", "contestant" => {"scores" => {'1' => '2', '3' => '4'}})
|
|
407
|
+
click_button
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
it "should send default empty text field values" do
|
|
411
|
+
with_html <<-HTML
|
|
412
|
+
<html>
|
|
413
|
+
<form method="get" action="/login">
|
|
414
|
+
<input id="user_email" name="user[email]" value="" type="text" />
|
|
415
|
+
<input type="submit" />
|
|
416
|
+
</form>
|
|
417
|
+
</html>
|
|
418
|
+
HTML
|
|
419
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
|
|
420
|
+
click_button
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
it "should recognize button tags" do
|
|
424
|
+
with_html <<-HTML
|
|
425
|
+
<html>
|
|
426
|
+
<form method="get" action="/login">
|
|
427
|
+
<input id="user_email" name="user[email]" value="" type="text" />
|
|
428
|
+
<button type="submit" />
|
|
429
|
+
</form>
|
|
430
|
+
</html>
|
|
431
|
+
HTML
|
|
432
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
|
|
433
|
+
click_button
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
it "should recognize input tags with the type button" do
|
|
437
|
+
with_html <<-HTML
|
|
438
|
+
<html>
|
|
439
|
+
<form action="/">
|
|
440
|
+
<input type="button" />
|
|
441
|
+
</form>
|
|
442
|
+
</html>
|
|
443
|
+
HTML
|
|
444
|
+
webrat_session.should_receive(:get)
|
|
445
|
+
click_button
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
it "should recognize image button tags" do
|
|
449
|
+
with_html <<-HTML
|
|
450
|
+
<html>
|
|
451
|
+
<form action="/">
|
|
452
|
+
<input type="image" />
|
|
453
|
+
</form>
|
|
454
|
+
</html>
|
|
455
|
+
HTML
|
|
456
|
+
webrat_session.should_receive(:get)
|
|
457
|
+
click_button
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
it "should find buttons by their IDs" do
|
|
461
|
+
with_html <<-HTML
|
|
462
|
+
<html>
|
|
463
|
+
<form action="/">
|
|
464
|
+
<input type="submit" id="my_button" />
|
|
465
|
+
</form>
|
|
466
|
+
</html>
|
|
467
|
+
HTML
|
|
468
|
+
webrat_session.should_receive(:get)
|
|
469
|
+
click_button "my_button"
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
it "should find image buttons by their alt text" do
|
|
473
|
+
with_html <<-HTML
|
|
474
|
+
<html>
|
|
475
|
+
<form action="/">
|
|
476
|
+
<input type="image" alt="Go" />
|
|
477
|
+
</form>
|
|
478
|
+
</html>
|
|
479
|
+
HTML
|
|
480
|
+
webrat_session.should_receive(:get)
|
|
481
|
+
click_button "Go"
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
it "should recognize button tags by content" do
|
|
485
|
+
with_html <<-HTML
|
|
486
|
+
<html>
|
|
487
|
+
<form method="get" action="/login">
|
|
488
|
+
<input id="user_email" name="user[email]" value="" type="text" />
|
|
489
|
+
<button type="submit">Login</button>
|
|
490
|
+
</form>
|
|
491
|
+
</html>
|
|
492
|
+
HTML
|
|
493
|
+
webrat_session.should_receive(:get).with("/login", "user" => {"email" => ""})
|
|
494
|
+
click_button "Login"
|
|
495
|
+
end
|
|
496
|
+
end
|