capybara 0.4.1.2 → 1.0.0.beta1

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 (69) hide show
  1. data/History.txt +46 -0
  2. data/README.rdoc +211 -64
  3. data/lib/capybara.rb +31 -15
  4. data/lib/capybara/cucumber.rb +12 -16
  5. data/lib/capybara/dsl.rb +65 -28
  6. data/lib/capybara/node/actions.rb +7 -5
  7. data/lib/capybara/node/document.rb +8 -0
  8. data/lib/capybara/node/finders.rb +11 -7
  9. data/lib/capybara/node/matchers.rb +32 -6
  10. data/lib/capybara/node/simple.rb +20 -0
  11. data/lib/capybara/rack_test/browser.rb +115 -0
  12. data/lib/capybara/rack_test/driver.rb +77 -0
  13. data/lib/capybara/rack_test/form.rb +80 -0
  14. data/lib/capybara/rack_test/node.rb +101 -0
  15. data/lib/capybara/rspec.rb +11 -3
  16. data/lib/capybara/rspec/features.rb +22 -0
  17. data/lib/capybara/rspec/matchers.rb +146 -0
  18. data/lib/capybara/selector.rb +27 -8
  19. data/lib/capybara/selenium/driver.rb +148 -0
  20. data/lib/capybara/selenium/node.rb +91 -0
  21. data/lib/capybara/session.rb +42 -15
  22. data/lib/capybara/spec/driver.rb +55 -1
  23. data/lib/capybara/spec/fixtures/capybara.jpg +0 -0
  24. data/lib/capybara/spec/public/test.js +7 -2
  25. data/lib/capybara/spec/session.rb +51 -7
  26. data/lib/capybara/spec/session/attach_file_spec.rb +9 -6
  27. data/lib/capybara/spec/session/click_button_spec.rb +35 -0
  28. data/lib/capybara/spec/session/current_host_spec.rb +62 -0
  29. data/lib/capybara/spec/session/fill_in_spec.rb +6 -0
  30. data/lib/capybara/spec/session/find_spec.rb +23 -1
  31. data/lib/capybara/spec/session/first_spec.rb +39 -6
  32. data/lib/capybara/spec/session/has_css_spec.rb +30 -0
  33. data/lib/capybara/spec/session/has_field_spec.rb +47 -11
  34. data/lib/capybara/spec/session/javascript.rb +0 -1
  35. data/lib/capybara/spec/session/text_spec.rb +19 -0
  36. data/lib/capybara/spec/test_app.rb +9 -0
  37. data/lib/capybara/spec/views/form.erb +8 -3
  38. data/lib/capybara/spec/views/header_links.erb +7 -0
  39. data/lib/capybara/spec/views/host_links.erb +12 -0
  40. data/lib/capybara/spec/views/with_html.erb +6 -2
  41. data/lib/capybara/spec/views/with_html_entities.erb +1 -0
  42. data/lib/capybara/spec/views/with_js.erb +4 -0
  43. data/lib/capybara/util/save_and_open_page.rb +7 -3
  44. data/lib/capybara/util/timeout.rb +2 -2
  45. data/lib/capybara/version.rb +1 -1
  46. data/spec/capybara_spec.rb +1 -1
  47. data/spec/driver/rack_test_driver_spec.rb +24 -2
  48. data/spec/driver/selenium_driver_spec.rb +2 -1
  49. data/spec/dsl_spec.rb +56 -4
  50. data/spec/rspec/features_spec.rb +45 -0
  51. data/spec/rspec/matchers_spec.rb +451 -0
  52. data/spec/rspec_spec.rb +9 -2
  53. data/spec/save_and_open_page_spec.rb +9 -13
  54. data/spec/server_spec.rb +4 -0
  55. data/spec/session/rack_test_session_spec.rb +2 -2
  56. data/spec/session/selenium_session_spec.rb +1 -1
  57. data/spec/spec_helper.rb +0 -14
  58. data/spec/string_spec.rb +1 -1
  59. metadata +60 -69
  60. data/lib/capybara/driver/celerity_driver.rb +0 -164
  61. data/lib/capybara/driver/culerity_driver.rb +0 -26
  62. data/lib/capybara/driver/rack_test_driver.rb +0 -303
  63. data/lib/capybara/driver/selenium_driver.rb +0 -161
  64. data/spec/driver/celerity_driver_spec.rb +0 -13
  65. data/spec/driver/culerity_driver_spec.rb +0 -14
  66. data/spec/driver/remote_culerity_driver_spec.rb +0 -22
  67. data/spec/driver/remote_selenium_driver_spec.rb +0 -16
  68. data/spec/session/celerity_session_spec.rb +0 -24
  69. data/spec/session/culerity_session_spec.rb +0 -26
@@ -1,161 +0,0 @@
1
- require 'selenium-webdriver'
2
-
3
- class Capybara::Driver::Selenium < Capybara::Driver::Base
4
- class Node < Capybara::Driver::Node
5
- def text
6
- native.text
7
- end
8
-
9
- def [](name)
10
- if name == :value
11
- value
12
- else
13
- native.attribute(name.to_s)
14
- end
15
- rescue Selenium::WebDriver::Error::WebDriverError
16
- nil
17
- end
18
-
19
- def value
20
- if tag_name == "select" and self[:multiple] and not self[:multiple] == "false"
21
- native.find_elements(:xpath, ".//option").select { |n| n.selected? }.map { |n| n.value || n.text }
22
- else
23
- native.value
24
- end
25
- end
26
-
27
- def set(value)
28
- if tag_name == 'input' and type == 'radio'
29
- native.click
30
- elsif tag_name == 'input' and type == 'checkbox'
31
- native.click if value ^ native.attribute('checked').to_s.eql?("true")
32
- elsif tag_name == 'textarea' or tag_name == 'input'
33
- native.clear
34
- native.send_keys(value.to_s)
35
- end
36
- end
37
-
38
- def select_option
39
- native.select
40
- end
41
-
42
- def unselect_option
43
- if select_node['multiple'] != 'multiple' and select_node['multiple'] != 'true'
44
- raise Capybara::UnselectNotAllowed, "Cannot unselect option from single select box."
45
- end
46
- native.toggle if selected?
47
- end
48
-
49
- def click
50
- native.click
51
- end
52
-
53
- def drag_to(element)
54
- native.drag_and_drop_on(element.native)
55
- end
56
-
57
- def tag_name
58
- native.tag_name
59
- end
60
-
61
- def visible?
62
- displayed = native.displayed?
63
- displayed and displayed != "false"
64
- end
65
-
66
- def selected?
67
- selected = native.selected?
68
- selected and selected != "false"
69
- end
70
-
71
- alias :checked? :selected?
72
-
73
- def find(locator)
74
- native.find_elements(:xpath, locator).map { |n| self.class.new(driver, n) }
75
- end
76
-
77
- private
78
-
79
- # a reference to the select node if this is an option node
80
- def select_node
81
- find('./ancestor::select').first
82
- end
83
-
84
- def type
85
- self[:type]
86
- end
87
-
88
- end
89
-
90
- attr_reader :app, :rack_server, :options
91
-
92
- def browser
93
- unless @browser
94
- @browser = Selenium::WebDriver.for(options[:browser] || :firefox, options.reject{|key,val| key == :browser})
95
- at_exit do
96
- @browser.quit
97
- end
98
- end
99
- @browser
100
- end
101
-
102
- def initialize(app, options={})
103
- @app = app
104
- @options = options
105
- @rack_server = Capybara::Server.new(@app)
106
- @rack_server.boot if Capybara.run_server
107
- end
108
-
109
- def visit(path)
110
- browser.navigate.to(url(path))
111
- end
112
-
113
- def source
114
- browser.page_source
115
- end
116
-
117
- def body
118
- browser.page_source
119
- end
120
-
121
- def current_url
122
- browser.current_url
123
- end
124
-
125
- def find(selector)
126
- browser.find_elements(:xpath, selector).map { |node| Node.new(self, node) }
127
- end
128
-
129
- def wait?; true; end
130
-
131
- def execute_script(script)
132
- browser.execute_script script
133
- end
134
-
135
- def evaluate_script(script)
136
- browser.execute_script "return #{script}"
137
- end
138
-
139
- def reset!
140
- # Use instance variable directly so we avoid starting the browser just to reset the session
141
- @browser.manage.delete_all_cookies if @browser
142
- end
143
-
144
- def within_frame(frame_id)
145
- old_window = browser.window_handle
146
- browser.switch_to.frame(frame_id)
147
- yield
148
- browser.switch_to.window old_window
149
- end
150
-
151
- def within_window(handle, &blk)
152
- browser.switch_to.window(handle, &blk)
153
- end
154
-
155
- private
156
-
157
- def url(path)
158
- rack_server.url(path)
159
- end
160
-
161
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Driver::Celerity, :jruby => :platform do
4
- before(:all) do
5
- @driver = TestSessions::Celerity.driver
6
- end
7
-
8
- it_should_behave_like "driver"
9
- it_should_behave_like "driver with javascript support"
10
- it_should_behave_like "driver with header support"
11
- it_should_behave_like "driver with status code support"
12
- it_should_behave_like "driver with cookies support"
13
- end
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Driver::Culerity, :jruby => :installed do
4
-
5
- before(:all) do
6
- @driver = TestSessions::Culerity.driver
7
- end
8
-
9
- it_should_behave_like "driver"
10
- it_should_behave_like "driver with javascript support"
11
- it_should_behave_like "driver with header support"
12
- it_should_behave_like "driver with status code support"
13
- it_should_behave_like "driver with cookies support"
14
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Driver::Culerity, :jruby => :installed do
4
- before(:all) do
5
- Capybara.app_host = "http://capybara-testapp.heroku.com"
6
- @driver = TestSessions::Culerity.driver
7
- end
8
-
9
- after(:all) do
10
- Capybara.app_host = nil
11
- end
12
-
13
- it "should navigate to a fully qualified remote page" do
14
- @driver.visit('http://capybara-testapp.heroku.com/foo')
15
- @driver.body.should include('Another World')
16
- end
17
-
18
- it_should_behave_like "driver"
19
- it_should_behave_like "driver with javascript support"
20
- it_should_behave_like "driver with header support"
21
- it_should_behave_like "driver with status code support"
22
- end
@@ -1,16 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Driver::Selenium do
4
- before do
5
- #Capybara.app_host = "http://capybara-testapp.heroku.com"
6
- @driver = TestSessions::Selenium.driver
7
- end
8
-
9
- after do
10
- Capybara.app_host = nil
11
- end
12
-
13
- it_should_behave_like "driver"
14
- it_should_behave_like "driver with javascript support"
15
- it_should_behave_like "driver without status code support"
16
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Driver::Celerity, :jruby => :platform do
4
- before(:all) do
5
- @session = TestSessions::Celerity
6
- end
7
-
8
- describe '#driver' do
9
- it "should be a celerity driver" do
10
- @session.driver.should be_an_instance_of(Capybara::Driver::Celerity)
11
- end
12
- end
13
-
14
- describe '#mode' do
15
- it "should remember the mode" do
16
- @session.mode.should == :celerity
17
- end
18
- end
19
-
20
- it_should_behave_like "session"
21
- it_should_behave_like "session with javascript support"
22
- it_should_behave_like "session with headers support"
23
- it_should_behave_like "session with status code support"
24
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Capybara::Session, :jruby => :installed do
4
- context 'with culerity driver' do
5
- before(:all) do
6
- @session = TestSessions::Culerity
7
- end
8
-
9
- describe '#driver' do
10
- it "should be a culerity driver" do
11
- @session.driver.should be_an_instance_of(Capybara::Driver::Culerity)
12
- end
13
- end
14
-
15
- describe '#mode' do
16
- it "should remember the mode" do
17
- @session.mode.should == :culerity
18
- end
19
- end
20
-
21
- it_should_behave_like "session"
22
- it_should_behave_like "session with javascript support"
23
- it_should_behave_like "session with headers support"
24
- it_should_behave_like "session with status code support"
25
- end
26
- end