capybara 0.4.1.2 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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