capybara 0.3.0 → 0.3.5

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.
Files changed (60) hide show
  1. data/Manifest.txt +4 -0
  2. data/README.rdoc +45 -5
  3. data/lib/capybara.rb +11 -4
  4. data/lib/capybara/driver/base.rb +3 -0
  5. data/lib/capybara/driver/celerity_driver.rb +44 -9
  6. data/lib/capybara/driver/rack_test_driver.rb +80 -16
  7. data/lib/capybara/driver/selenium_driver.rb +41 -9
  8. data/lib/capybara/dsl.rb +4 -10
  9. data/lib/capybara/node.rb +8 -0
  10. data/lib/capybara/rails.rb +8 -2
  11. data/lib/capybara/save_and_open_page.rb +5 -1
  12. data/lib/capybara/searchable.rb +17 -9
  13. data/lib/capybara/server.rb +35 -23
  14. data/lib/capybara/session.rb +91 -22
  15. data/lib/capybara/xpath.rb +66 -27
  16. data/spec/driver/celerity_driver_spec.rb +2 -2
  17. data/spec/driver/culerity_driver_spec.rb +1 -2
  18. data/spec/driver/rack_test_driver_spec.rb +0 -1
  19. data/spec/driver/remote_culerity_driver_spec.rb +9 -5
  20. data/spec/driver/selenium_driver_spec.rb +0 -1
  21. data/spec/drivers_spec.rb +24 -32
  22. data/spec/dsl/all_spec.rb +56 -25
  23. data/spec/dsl/attach_file_spec.rb +49 -51
  24. data/spec/dsl/check_spec.rb +12 -1
  25. data/spec/dsl/choose_spec.rb +19 -21
  26. data/spec/dsl/click_button_spec.rb +140 -87
  27. data/spec/dsl/click_link_spec.rb +88 -68
  28. data/spec/dsl/click_spec.rb +20 -22
  29. data/spec/dsl/current_url_spec.rb +6 -8
  30. data/spec/dsl/fill_in_spec.rb +75 -67
  31. data/spec/dsl/find_button_spec.rb +12 -14
  32. data/spec/dsl/find_by_id_spec.rb +16 -0
  33. data/spec/dsl/find_field_spec.rb +17 -19
  34. data/spec/dsl/find_link_spec.rb +13 -15
  35. data/spec/dsl/find_spec.rb +44 -23
  36. data/spec/dsl/has_button_spec.rb +32 -0
  37. data/spec/dsl/has_content_spec.rb +79 -81
  38. data/spec/dsl/has_css_spec.rb +81 -83
  39. data/spec/dsl/has_field_spec.rb +96 -0
  40. data/spec/dsl/has_link_spec.rb +33 -0
  41. data/spec/dsl/has_xpath_spec.rb +97 -89
  42. data/spec/dsl/locate_spec.rb +47 -26
  43. data/spec/dsl/select_spec.rb +61 -17
  44. data/spec/dsl/uncheck_spec.rb +17 -25
  45. data/spec/dsl/within_spec.rb +112 -104
  46. data/spec/public/test.js +3 -0
  47. data/spec/searchable_spec.rb +1 -1
  48. data/spec/server_spec.rb +7 -7
  49. data/spec/session/celerity_session_spec.rb +2 -2
  50. data/spec/session/culerity_session_spec.rb +1 -1
  51. data/spec/session_spec.rb +7 -0
  52. data/spec/session_with_javascript_support_spec.rb +139 -120
  53. data/spec/spec_helper.rb +7 -2
  54. data/spec/test_app.rb +8 -4
  55. data/spec/views/form.erb +50 -2
  56. data/spec/views/tables.erb +61 -1
  57. data/spec/views/with_html.erb +8 -2
  58. data/spec/views/with_js.erb +4 -0
  59. data/spec/xpath_spec.rb +17 -0
  60. metadata +6 -2
@@ -1,88 +1,108 @@
1
- module ClickLinkSpec
2
- shared_examples_for "click_link" do
3
- describe '#click_link' do
4
- before do
5
- @session.visit('/with_html')
6
- end
1
+ shared_examples_for "click_link" do
2
+ describe '#click_link' do
3
+ before do
4
+ @session.visit('/with_html')
5
+ end
7
6
 
8
- context "with id given" do
9
- it "should take user to the linked page" do
10
- @session.click_link('foo')
11
- @session.body.should include('Another World')
12
- end
7
+ context "with id given" do
8
+ it "should take user to the linked page" do
9
+ @session.click_link('foo')
10
+ @session.body.should include('Another World')
13
11
  end
12
+ end
14
13
 
15
- context "with text given" do
16
- it "should take user to the linked page" do
17
- @session.click_link('labore')
18
- @session.body.should include('Bar')
19
- end
20
-
21
- it "should accept partial matches" do
22
- @session.click_link('abo')
23
- @session.body.should include('Bar')
24
- end
25
-
26
- it "should prefer exact matches over partial matches" do
27
- @session.click_link('A link')
28
- @session.body.should include('Bar')
29
- end
14
+ context "with text given" do
15
+ it "should take user to the linked page" do
16
+ @session.click_link('labore')
17
+ @session.body.should include('Bar')
18
+ end
19
+
20
+ it "should accept partial matches" do
21
+ @session.click_link('abo')
22
+ @session.body.should include('Bar')
30
23
  end
31
24
 
32
- context "with title given" do
33
- it "should take user to the linked page" do
34
- @session.click_link('awesome title')
35
- @session.body.should include('Bar')
36
- end
37
-
38
- it "should accept partial matches" do
39
- @session.click_link('some tit')
40
- @session.body.should include('Bar')
41
- end
42
-
43
- it "should prefer exact matches over partial matches" do
44
- @session.click_link('a fine link')
45
- @session.body.should include('Bar')
46
- end
25
+ it "should prefer exact matches over partial matches" do
26
+ @session.click_link('A link')
27
+ @session.body.should include('Bar')
47
28
  end
29
+ end
48
30
 
49
- context "with a locator that doesn't exist" do
50
- it "should raise an error" do
51
- running do
52
- @session.click_link('does not exist')
53
- end.should raise_error(Capybara::ElementNotFound)
54
- end
31
+ context "with title given" do
32
+ it "should take user to the linked page" do
33
+ @session.click_link('awesome title')
34
+ @session.body.should include('Bar')
55
35
  end
56
36
 
57
- it "should follow redirects" do
58
- @session.click_link('Redirect')
59
- @session.body.should include('You landed')
37
+ it "should accept partial matches" do
38
+ @session.click_link('some tit')
39
+ @session.body.should include('Bar')
60
40
  end
61
41
 
62
- it "should do nothing on anchor links" do
63
- @session.fill_in("test_field", :with => 'blah')
64
- @session.click_link('Anchor')
65
- @session.find_field("test_field").value.should == 'blah'
66
- @session.click_link('Blank Anchor')
67
- @session.find_field("test_field").value.should == 'blah'
42
+ it "should prefer exact matches over partial matches" do
43
+ @session.click_link('a fine link')
44
+ @session.body.should include('Bar')
68
45
  end
69
-
70
- it "should do nothing on URL+anchor links for the same page" do
71
- @session.fill_in("test_field", :with => 'blah')
72
- @session.click_link('Anchor on same page')
73
- @session.find_field("test_field").value.should == 'blah'
46
+ end
47
+
48
+ context "with alternative text given to a contained image" do
49
+ it "should take user to the linked page" do
50
+ @session.click_link('awesome image')
51
+ @session.body.should include('Bar')
74
52
  end
75
-
76
- it "should follow link on URL+anchor links for a different page" do
77
- @session.click_link('Anchor on different page')
53
+
54
+ it "should take user to the linked page" do
55
+ @session.click_link('some imag')
78
56
  @session.body.should include('Bar')
79
57
  end
80
-
81
- it "raise an error with links with no href" do
58
+
59
+ it "should prefer exact matches over partial matches" do
60
+ @session.click_link('fine image')
61
+ @session.body.should include('Bar')
62
+ end
63
+ end
64
+
65
+ context "with a locator that doesn't exist" do
66
+ it "should raise an error" do
82
67
  running do
83
- @session.click_link('No Href')
68
+ @session.click_link('does not exist')
84
69
  end.should raise_error(Capybara::ElementNotFound)
85
70
  end
86
71
  end
72
+
73
+ it "should follow redirects" do
74
+ @session.click_link('Redirect')
75
+ @session.body.should include('You landed')
76
+ end
77
+
78
+ it "should follow redirects" do
79
+ @session.click_link('BackToMyself')
80
+ @session.body.should include('This is a test')
81
+ end
82
+
83
+ it "should do nothing on anchor links" do
84
+ @session.fill_in("test_field", :with => 'blah')
85
+ @session.click_link('Anchor')
86
+ @session.find_field("test_field").value.should == 'blah'
87
+ @session.click_link('Blank Anchor')
88
+ @session.find_field("test_field").value.should == 'blah'
89
+ end
90
+
91
+ it "should do nothing on URL+anchor links for the same page" do
92
+ @session.fill_in("test_field", :with => 'blah')
93
+ @session.click_link('Anchor on same page')
94
+ @session.find_field("test_field").value.should == 'blah'
95
+ end
96
+
97
+ it "should follow link on URL+anchor links for a different page" do
98
+ @session.click_link('Anchor on different page')
99
+ @session.body.should include('Bar')
100
+ end
101
+
102
+ it "raise an error with links with no href" do
103
+ running do
104
+ @session.click_link('No Href')
105
+ end.should raise_error(Capybara::ElementNotFound)
106
+ end
87
107
  end
88
- end
108
+ end
@@ -1,26 +1,24 @@
1
- module ClickSpec
2
- shared_examples_for "click" do
3
- describe '#click' do
4
- it "should click on a link" do
1
+ shared_examples_for "click" do
2
+ describe '#click' do
3
+ it "should click on a link" do
4
+ @session.visit('/with_html')
5
+ @session.click('labore')
6
+ @session.body.should include('Bar')
7
+ end
8
+
9
+ it "should click on a button" do
10
+ @session.visit('/form')
11
+ @session.click('awe123')
12
+ extract_results(@session)['first_name'].should == 'John'
13
+ end
14
+
15
+ context "with a locator that doesn't exist" do
16
+ it "should raise an error" do
5
17
  @session.visit('/with_html')
6
- @session.click('labore')
7
- @session.body.should include('Bar')
8
- end
9
-
10
- it "should click on a button" do
11
- @session.visit('/form')
12
- @session.click('awe123')
13
- extract_results(@session)['first_name'].should == 'John'
14
- end
15
-
16
- context "with a locator that doesn't exist" do
17
- it "should raise an error" do
18
- @session.visit('/with_html')
19
- running do
20
- @session.click('does not exist')
21
- end.should raise_error(Capybara::ElementNotFound)
22
- end
18
+ running do
19
+ @session.click('does not exist')
20
+ end.should raise_error(Capybara::ElementNotFound)
23
21
  end
24
22
  end
25
23
  end
26
- end
24
+ end
@@ -1,10 +1,8 @@
1
- module CurrentUrlSpec
2
- shared_examples_for "current_url" do
3
- describe '#current_url' do
4
- it "should return the current url" do
5
- @session.visit('/form')
6
- @session.current_url.should =~ %r(http://[^/]+/form)
7
- end
1
+ shared_examples_for "current_url" do
2
+ describe '#current_url' do
3
+ it "should return the current url" do
4
+ @session.visit('/form')
5
+ @session.current_url.should =~ %r(http://[^/]+/form)
8
6
  end
9
7
  end
10
- end
8
+ end
@@ -1,83 +1,91 @@
1
- module FillInSpec
2
- shared_examples_for "fill_in" do
3
- describe "#fill_in" do
4
- before do
5
- @session.visit('/form')
6
- end
1
+ shared_examples_for "fill_in" do
2
+ describe "#fill_in" do
3
+ before do
4
+ @session.visit('/form')
5
+ end
7
6
 
8
- it "should fill in a text field by id" do
9
- @session.fill_in('form_first_name', :with => 'Harry')
10
- @session.click_button('awesome')
11
- extract_results(@session)['first_name'].should == 'Harry'
12
- end
7
+ it "should fill in a text field by id" do
8
+ @session.fill_in('form_first_name', :with => 'Harry')
9
+ @session.click_button('awesome')
10
+ extract_results(@session)['first_name'].should == 'Harry'
11
+ end
13
12
 
14
- it "should fill in a text field by label" do
15
- @session.fill_in('First Name', :with => 'Harry')
16
- @session.click_button('awesome')
17
- extract_results(@session)['first_name'].should == 'Harry'
18
- end
13
+ it "should fill in a text field by name" do
14
+ @session.fill_in('form[last_name]', :with => 'Green')
15
+ @session.click_button('awesome')
16
+ extract_results(@session)['last_name'].should == 'Green'
17
+ end
19
18
 
20
- it "should fill in a text field by name" do
21
- @session.fill_in('form[first_name]', :with => 'Harry')
22
- @session.click_button('awesome')
23
- extract_results(@session)['first_name'].should == 'Harry'
24
- end
19
+ it "should fill in a text field by label without for" do
20
+ @session.fill_in('Street', :with => 'Avenue Q')
21
+ @session.click_button('awesome')
22
+ extract_results(@session)['street'].should == 'Avenue Q'
23
+ end
25
24
 
26
- it "should fill in a text field by label without for" do
27
- @session.fill_in('Street', :with => 'Avenue Q')
28
- @session.click_button('awesome')
29
- extract_results(@session)['street'].should == 'Avenue Q'
30
- end
25
+ it "should favour exact label matches over partial matches" do
26
+ @session.fill_in('Name', :with => 'Harry Jones')
27
+ @session.click_button('awesome')
28
+ extract_results(@session)['name'].should == 'Harry Jones'
29
+ end
31
30
 
32
- it "should favour exact label matches over partial matches" do
33
- @session.fill_in('Name', :with => 'Harry Jones')
34
- @session.click_button('awesome')
35
- extract_results(@session)['name'].should == 'Harry Jones'
36
- end
31
+ it "should fill in a textarea by id" do
32
+ @session.fill_in('form_description', :with => 'Texty text')
33
+ @session.click_button('awesome')
34
+ extract_results(@session)['description'].should == 'Texty text'
35
+ end
37
36
 
38
- it "should fill in a textarea by id" do
39
- @session.fill_in('form_description', :with => 'Texty text')
40
- @session.click_button('awesome')
41
- extract_results(@session)['description'].should == 'Texty text'
42
- end
37
+ it "should fill in a textarea by label" do
38
+ @session.fill_in('Description', :with => 'Texty text')
39
+ @session.click_button('awesome')
40
+ extract_results(@session)['description'].should == 'Texty text'
41
+ end
43
42
 
44
- it "should fill in a textarea by label" do
45
- @session.fill_in('Description', :with => 'Texty text')
46
- @session.click_button('awesome')
47
- extract_results(@session)['description'].should == 'Texty text'
48
- end
43
+ it "should fill in a textarea by name" do
44
+ @session.fill_in('form[description]', :with => 'Texty text')
45
+ @session.click_button('awesome')
46
+ extract_results(@session)['description'].should == 'Texty text'
47
+ end
49
48
 
50
- it "should fill in a textarea by name" do
51
- @session.fill_in('form[description]', :with => 'Texty text')
52
- @session.click_button('awesome')
53
- extract_results(@session)['description'].should == 'Texty text'
54
- end
49
+ it "should fill in a password field by id" do
50
+ @session.fill_in('form_password', :with => 'supasikrit')
51
+ @session.click_button('awesome')
52
+ extract_results(@session)['password'].should == 'supasikrit'
53
+ end
55
54
 
56
- it "should fill in a password field by id" do
57
- @session.fill_in('form_password', :with => 'supasikrit')
58
- @session.click_button('awesome')
59
- extract_results(@session)['password'].should == 'supasikrit'
60
- end
55
+ it "should fill in a password field by label" do
56
+ @session.fill_in('Password', :with => 'supasikrit')
57
+ @session.click_button('awesome')
58
+ extract_results(@session)['password'].should == 'supasikrit'
59
+ end
61
60
 
62
- it "should fill in a password field by label" do
63
- @session.fill_in('Password', :with => 'supasikrit')
64
- @session.click_button('awesome')
65
- extract_results(@session)['password'].should == 'supasikrit'
66
- end
61
+ it "should fill in a password field by name" do
62
+ @session.fill_in('form[password]', :with => 'supasikrit')
63
+ @session.click_button('awesome')
64
+ extract_results(@session)['password'].should == 'supasikrit'
65
+ end
66
+
67
+ it "should prefer exact matches over partial matches" do
68
+ @session.fill_in('Name', :with => 'Ford Prefect')
69
+ @session.click_button('awesome')
70
+ extract_results(@session)['name'].should == 'Ford Prefect'
71
+ end
67
72
 
68
- it "should fill in a password field by name" do
69
- @session.fill_in('form[password]', :with => 'supasikrit')
70
- @session.click_button('awesome')
71
- extract_results(@session)['password'].should == 'supasikrit'
73
+ context "with ignore_hidden_fields" do
74
+ before { Capybara.ignore_hidden_elements = true }
75
+ after { Capybara.ignore_hidden_elements = false }
76
+ it "should not find a hidden field" do
77
+ running do
78
+ @session.fill_in('Super Secret', :with => '777')
79
+ end.should raise_error(Capybara::ElementNotFound)
72
80
  end
81
+ end
73
82
 
74
- context "with a locator that doesn't exist" do
75
- it "should raise an error" do
76
- running do
77
- @session.fill_in('does not exist', :with => 'Blah blah')
78
- end.should raise_error(Capybara::ElementNotFound)
79
- end
83
+ context "with a locator that doesn't exist" do
84
+ it "should raise an error" do
85
+ running do
86
+ @session.fill_in('does not exist', :with => 'Blah blah')
87
+ end.should raise_error(Capybara::ElementNotFound)
80
88
  end
81
89
  end
82
90
  end
83
- end
91
+ end
@@ -1,18 +1,16 @@
1
- module FindButtonSpec
2
- shared_examples_for "find_button" do
3
- describe '#find_button' do
4
- before do
5
- @session.visit('/form')
6
- end
1
+ shared_examples_for "find_button" do
2
+ describe '#find_button' do
3
+ before do
4
+ @session.visit('/form')
5
+ end
7
6
 
8
- it "should find any field" do
9
- @session.find_button('med')[:id].should == "mediocre"
10
- @session.find_button('crap321').value.should == "crappy"
11
- end
7
+ it "should find any field" do
8
+ @session.find_button('med')[:id].should == "mediocre"
9
+ @session.find_button('crap321').value.should == "crappy"
10
+ end
12
11
 
13
- it "should return nil if the field doesn't exist" do
14
- @session.find_button('Does not exist').should be_nil
15
- end
12
+ it "should return nil if the field doesn't exist" do
13
+ @session.find_button('Does not exist').should be_nil
16
14
  end
17
15
  end
18
- end
16
+ end
@@ -0,0 +1,16 @@
1
+ shared_examples_for "find_by_id" do
2
+ describe '#find_by_id' do
3
+ before do
4
+ @session.visit('/with_html')
5
+ end
6
+
7
+ it "should find any element by id" do
8
+ @session.find_by_id('red').tag_name.should == 'a'
9
+ @session.find_by_id('hidden_via_ancestor').tag_name.should == 'div'
10
+ end
11
+
12
+ it "should return nil if no element with id is found" do
13
+ @session.find_by_id('nothing_with_this_id').should be_nil
14
+ end
15
+ end
16
+ end