capybara-celerity 0.0.1
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/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/capybara-celerity.gemspec +25 -0
- data/lib/capybara/celerity.rb +3 -0
- data/lib/capybara/celerity/version.rb +5 -0
- data/lib/capybara/driver/celerity.rb +163 -0
- data/spec/driver/celerity_driver_spec.rb +14 -0
- data/spec/session/celerity_session_spec.rb +25 -0
- data/spec/spec_helper.rb +15 -0
- metadata +128 -0
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "capybara/celerity/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "capybara-celerity"
|
7
|
+
s.version = Capybara::Celerity::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Gabriel Sobrinho"]
|
10
|
+
s.email = ["gabriel.sobrinho@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/sobrinho/capybara-celerity"
|
12
|
+
s.summary = %q{Capybara driver for celerity}
|
13
|
+
s.description = %q{Capybara driver for celerity}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency "capybara", ">= 0.4.1"
|
21
|
+
s.add_dependency "celerity", ">= 0.7.9"
|
22
|
+
|
23
|
+
s.add_development_dependency "rspec", "~> 2.5"
|
24
|
+
s.add_development_dependency "sinatra", "~> 1.0"
|
25
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
class Capybara::Driver::Celerity < Capybara::Driver::Base
|
2
|
+
class Node < Capybara::Driver::Node
|
3
|
+
def text
|
4
|
+
native.text
|
5
|
+
end
|
6
|
+
|
7
|
+
def [](name)
|
8
|
+
value = native.attribute_value(name.to_sym)
|
9
|
+
return value if value and not value.to_s.empty?
|
10
|
+
end
|
11
|
+
|
12
|
+
def value
|
13
|
+
if tag_name == "select" and native.multiple?
|
14
|
+
find(".//option[@selected]").map { |n| if n.has_value? then n.value else n.text end }
|
15
|
+
else
|
16
|
+
native.value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def set(value)
|
21
|
+
native.set(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def select_option
|
25
|
+
native.click
|
26
|
+
end
|
27
|
+
|
28
|
+
def unselect_option
|
29
|
+
unless select_node.native.multiple?
|
30
|
+
raise Capybara::UnselectNotAllowed, "Cannot unselect option from single select box."
|
31
|
+
end
|
32
|
+
|
33
|
+
# FIXME: couldn't find a clean way to unselect, so clear and reselect
|
34
|
+
selected_nodes = select_node.find('.//option[@selected]')
|
35
|
+
select_node.native.clear
|
36
|
+
selected_nodes.each { |n| n.click unless n.path == path }
|
37
|
+
end
|
38
|
+
|
39
|
+
def click
|
40
|
+
native.click
|
41
|
+
end
|
42
|
+
|
43
|
+
def drag_to(element)
|
44
|
+
native.fire_event('mousedown')
|
45
|
+
element.native.fire_event('mousemove')
|
46
|
+
element.native.fire_event('mouseup')
|
47
|
+
end
|
48
|
+
|
49
|
+
def tag_name
|
50
|
+
# FIXME: this might be the dumbest way ever of getting the tag name
|
51
|
+
# there has to be something better...
|
52
|
+
native.to_xml[/^\s*<([a-z0-9\-\:]+)/, 1]
|
53
|
+
end
|
54
|
+
|
55
|
+
def visible?
|
56
|
+
native.visible?
|
57
|
+
end
|
58
|
+
|
59
|
+
def checked?
|
60
|
+
native.checked?
|
61
|
+
rescue # https://github.com/langalex/culerity/issues/issue/33
|
62
|
+
false
|
63
|
+
end
|
64
|
+
|
65
|
+
def selected?
|
66
|
+
native.selected?
|
67
|
+
rescue # https://github.com/langalex/culerity/issues/issue/33
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
def path
|
72
|
+
native.xpath
|
73
|
+
end
|
74
|
+
|
75
|
+
def trigger(event)
|
76
|
+
native.fire_event(event.to_s)
|
77
|
+
end
|
78
|
+
|
79
|
+
def find(locator)
|
80
|
+
noko_node = Nokogiri::HTML(driver.body).xpath(native.xpath).first
|
81
|
+
all_nodes = noko_node.xpath(locator).map { |n| n.path }.join(' | ')
|
82
|
+
if all_nodes.empty? then [] else driver.find(all_nodes) end
|
83
|
+
end
|
84
|
+
|
85
|
+
protected
|
86
|
+
|
87
|
+
# a reference to the select node if this is an option node
|
88
|
+
def select_node
|
89
|
+
find('./ancestor::select').first
|
90
|
+
end
|
91
|
+
|
92
|
+
def has_value?
|
93
|
+
native.object.hasAttribute('value')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
attr_reader :app, :rack_server, :options
|
98
|
+
|
99
|
+
def initialize(app, options={})
|
100
|
+
@app = app
|
101
|
+
@options = options
|
102
|
+
@rack_server = Capybara::Server.new(@app)
|
103
|
+
@rack_server.boot if Capybara.run_server
|
104
|
+
end
|
105
|
+
|
106
|
+
def visit(path)
|
107
|
+
browser.goto(url(path))
|
108
|
+
end
|
109
|
+
|
110
|
+
def current_url
|
111
|
+
browser.url
|
112
|
+
end
|
113
|
+
|
114
|
+
def source
|
115
|
+
browser.html
|
116
|
+
end
|
117
|
+
|
118
|
+
def body
|
119
|
+
browser.document.as_xml
|
120
|
+
end
|
121
|
+
|
122
|
+
def response_headers
|
123
|
+
browser.response_headers
|
124
|
+
end
|
125
|
+
|
126
|
+
def status_code
|
127
|
+
browser.status_code
|
128
|
+
end
|
129
|
+
|
130
|
+
def find(selector)
|
131
|
+
browser.elements_by_xpath(selector).map { |node| Node.new(self, node) }
|
132
|
+
end
|
133
|
+
|
134
|
+
def wait?; true; end
|
135
|
+
|
136
|
+
def execute_script(script)
|
137
|
+
browser.execute_script script
|
138
|
+
nil
|
139
|
+
end
|
140
|
+
|
141
|
+
def evaluate_script(script)
|
142
|
+
browser.execute_script "#{script}"
|
143
|
+
end
|
144
|
+
|
145
|
+
def browser
|
146
|
+
unless @_browser
|
147
|
+
require 'celerity'
|
148
|
+
@_browser = ::Celerity::Browser.new(options)
|
149
|
+
end
|
150
|
+
|
151
|
+
@_browser
|
152
|
+
end
|
153
|
+
|
154
|
+
def reset!
|
155
|
+
browser.clear_cookies
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def url(path)
|
161
|
+
rack_server.url(path)
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capybara/spec/driver'
|
3
|
+
|
4
|
+
describe Capybara::Driver::Celerity do
|
5
|
+
before(:all) do
|
6
|
+
@driver = Capybara::Driver::Celerity.new(TestApp)
|
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
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capybara/spec/session'
|
3
|
+
|
4
|
+
describe Capybara::Driver::Celerity do
|
5
|
+
before(:all) do
|
6
|
+
@session = Capybara::Session.new(:celerity, TestApp)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#driver' do
|
10
|
+
it "should be a celerity driver" do
|
11
|
+
@session.driver.should be_an_instance_of(Capybara::Driver::Celerity)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#mode' do
|
16
|
+
it "should remember the mode" do
|
17
|
+
@session.mode.should == :celerity
|
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
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'capybara/celerity'
|
4
|
+
|
5
|
+
alias :running :lambda
|
6
|
+
|
7
|
+
Capybara.default_wait_time = 0
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.before do
|
11
|
+
Capybara.configure do |config|
|
12
|
+
config.default_selector = :xpath
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capybara-celerity
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Gabriel Sobrinho
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-03-08 00:00:00 -03:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: capybara
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 4
|
30
|
+
- 1
|
31
|
+
version: 0.4.1
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: celerity
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 7
|
44
|
+
- 9
|
45
|
+
version: 0.7.9
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 2
|
57
|
+
- 5
|
58
|
+
version: "2.5"
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id003
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: sinatra
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 1
|
70
|
+
- 0
|
71
|
+
version: "1.0"
|
72
|
+
type: :development
|
73
|
+
version_requirements: *id004
|
74
|
+
description: Capybara driver for celerity
|
75
|
+
email:
|
76
|
+
- gabriel.sobrinho@gmail.com
|
77
|
+
executables: []
|
78
|
+
|
79
|
+
extensions: []
|
80
|
+
|
81
|
+
extra_rdoc_files: []
|
82
|
+
|
83
|
+
files:
|
84
|
+
- .gitignore
|
85
|
+
- .rspec
|
86
|
+
- Gemfile
|
87
|
+
- Rakefile
|
88
|
+
- capybara-celerity.gemspec
|
89
|
+
- lib/capybara/celerity.rb
|
90
|
+
- lib/capybara/celerity/version.rb
|
91
|
+
- lib/capybara/driver/celerity.rb
|
92
|
+
- spec/driver/celerity_driver_spec.rb
|
93
|
+
- spec/session/celerity_session_spec.rb
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
has_rdoc: true
|
96
|
+
homepage: https://github.com/sobrinho/capybara-celerity
|
97
|
+
licenses: []
|
98
|
+
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
version: "0"
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
requirements: []
|
119
|
+
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 1.3.6
|
122
|
+
signing_key:
|
123
|
+
specification_version: 3
|
124
|
+
summary: Capybara driver for celerity
|
125
|
+
test_files:
|
126
|
+
- spec/driver/celerity_driver_spec.rb
|
127
|
+
- spec/session/celerity_session_spec.rb
|
128
|
+
- spec/spec_helper.rb
|