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.
- data/History.txt +46 -0
- data/README.rdoc +211 -64
- data/lib/capybara.rb +31 -15
- data/lib/capybara/cucumber.rb +12 -16
- data/lib/capybara/dsl.rb +65 -28
- data/lib/capybara/node/actions.rb +7 -5
- data/lib/capybara/node/document.rb +8 -0
- data/lib/capybara/node/finders.rb +11 -7
- data/lib/capybara/node/matchers.rb +32 -6
- data/lib/capybara/node/simple.rb +20 -0
- data/lib/capybara/rack_test/browser.rb +115 -0
- data/lib/capybara/rack_test/driver.rb +77 -0
- data/lib/capybara/rack_test/form.rb +80 -0
- data/lib/capybara/rack_test/node.rb +101 -0
- data/lib/capybara/rspec.rb +11 -3
- data/lib/capybara/rspec/features.rb +22 -0
- data/lib/capybara/rspec/matchers.rb +146 -0
- data/lib/capybara/selector.rb +27 -8
- data/lib/capybara/selenium/driver.rb +148 -0
- data/lib/capybara/selenium/node.rb +91 -0
- data/lib/capybara/session.rb +42 -15
- data/lib/capybara/spec/driver.rb +55 -1
- data/lib/capybara/spec/fixtures/capybara.jpg +0 -0
- data/lib/capybara/spec/public/test.js +7 -2
- data/lib/capybara/spec/session.rb +51 -7
- data/lib/capybara/spec/session/attach_file_spec.rb +9 -6
- data/lib/capybara/spec/session/click_button_spec.rb +35 -0
- data/lib/capybara/spec/session/current_host_spec.rb +62 -0
- data/lib/capybara/spec/session/fill_in_spec.rb +6 -0
- data/lib/capybara/spec/session/find_spec.rb +23 -1
- data/lib/capybara/spec/session/first_spec.rb +39 -6
- data/lib/capybara/spec/session/has_css_spec.rb +30 -0
- data/lib/capybara/spec/session/has_field_spec.rb +47 -11
- data/lib/capybara/spec/session/javascript.rb +0 -1
- data/lib/capybara/spec/session/text_spec.rb +19 -0
- data/lib/capybara/spec/test_app.rb +9 -0
- data/lib/capybara/spec/views/form.erb +8 -3
- data/lib/capybara/spec/views/header_links.erb +7 -0
- data/lib/capybara/spec/views/host_links.erb +12 -0
- data/lib/capybara/spec/views/with_html.erb +6 -2
- data/lib/capybara/spec/views/with_html_entities.erb +1 -0
- data/lib/capybara/spec/views/with_js.erb +4 -0
- data/lib/capybara/util/save_and_open_page.rb +7 -3
- data/lib/capybara/util/timeout.rb +2 -2
- data/lib/capybara/version.rb +1 -1
- data/spec/capybara_spec.rb +1 -1
- data/spec/driver/rack_test_driver_spec.rb +24 -2
- data/spec/driver/selenium_driver_spec.rb +2 -1
- data/spec/dsl_spec.rb +56 -4
- data/spec/rspec/features_spec.rb +45 -0
- data/spec/rspec/matchers_spec.rb +451 -0
- data/spec/rspec_spec.rb +9 -2
- data/spec/save_and_open_page_spec.rb +9 -13
- data/spec/server_spec.rb +4 -0
- data/spec/session/rack_test_session_spec.rb +2 -2
- data/spec/session/selenium_session_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -14
- data/spec/string_spec.rb +1 -1
- metadata +60 -69
- data/lib/capybara/driver/celerity_driver.rb +0 -164
- data/lib/capybara/driver/culerity_driver.rb +0 -26
- data/lib/capybara/driver/rack_test_driver.rb +0 -303
- data/lib/capybara/driver/selenium_driver.rb +0 -161
- data/spec/driver/celerity_driver_spec.rb +0 -13
- data/spec/driver/culerity_driver_spec.rb +0 -14
- data/spec/driver/remote_culerity_driver_spec.rb +0 -22
- data/spec/driver/remote_selenium_driver_spec.rb +0 -16
- data/spec/session/celerity_session_spec.rb +0 -24
- 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
|