poltergeist 0.7.0 → 1.0.0
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/README.md +201 -62
- data/lib/capybara/poltergeist.rb +1 -1
- data/lib/capybara/poltergeist/browser.rb +36 -4
- data/lib/capybara/poltergeist/client.rb +4 -4
- data/lib/capybara/poltergeist/client/agent.coffee +30 -134
- data/lib/capybara/poltergeist/client/browser.coffee +97 -19
- data/lib/capybara/poltergeist/client/compiled/agent.js +36 -146
- data/lib/capybara/poltergeist/client/compiled/browser.js +114 -19
- data/lib/capybara/poltergeist/client/compiled/node.js +11 -5
- data/lib/capybara/poltergeist/client/compiled/web_page.js +80 -16
- data/lib/capybara/poltergeist/client/node.coffee +11 -6
- data/lib/capybara/poltergeist/client/web_page.coffee +62 -12
- data/lib/capybara/poltergeist/cookie.rb +35 -0
- data/lib/capybara/poltergeist/driver.rb +39 -7
- data/lib/capybara/poltergeist/inspector.rb +18 -7
- data/lib/capybara/poltergeist/server.rb +2 -2
- data/lib/capybara/poltergeist/version.rb +1 -1
- metadata +21 -5
- data/lib/capybara/poltergeist/util.rb +0 -12
@@ -0,0 +1,35 @@
|
|
1
|
+
module Capybara::Poltergeist
|
2
|
+
class Cookie
|
3
|
+
def initialize(attributes)
|
4
|
+
@attributes = attributes
|
5
|
+
end
|
6
|
+
|
7
|
+
def name
|
8
|
+
@attributes['name']
|
9
|
+
end
|
10
|
+
|
11
|
+
def value
|
12
|
+
@attributes['value']
|
13
|
+
end
|
14
|
+
|
15
|
+
def domain
|
16
|
+
@attributes['domain']
|
17
|
+
end
|
18
|
+
|
19
|
+
def path
|
20
|
+
@attributes['path']
|
21
|
+
end
|
22
|
+
|
23
|
+
def secure?
|
24
|
+
@attributes['secure']
|
25
|
+
end
|
26
|
+
|
27
|
+
def httponly?
|
28
|
+
@attributes['httponly']
|
29
|
+
end
|
30
|
+
|
31
|
+
def expires
|
32
|
+
Time.parse @attributes['expires']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
1
3
|
module Capybara::Poltergeist
|
2
4
|
class Driver < Capybara::Driver::Base
|
3
5
|
DEFAULT_TIMEOUT = 30
|
6
|
+
DEFAULT_PORT = 44678 # 'GHOST' on a keypad :)
|
4
7
|
|
5
8
|
attr_reader :app, :app_server, :server, :client, :browser, :options
|
6
|
-
attr_accessor :headers
|
7
9
|
|
8
10
|
def initialize(app, options = {})
|
9
11
|
@app = app
|
@@ -12,7 +14,6 @@ module Capybara::Poltergeist
|
|
12
14
|
@inspector = nil
|
13
15
|
@server = nil
|
14
16
|
@client = nil
|
15
|
-
@headers = {}
|
16
17
|
|
17
18
|
@app_server = Capybara::Server.new(app)
|
18
19
|
@app_server.boot if Capybara.run_server
|
@@ -27,7 +28,10 @@ module Capybara::Poltergeist
|
|
27
28
|
end
|
28
29
|
|
29
30
|
def server
|
30
|
-
@server ||= Server.new(
|
31
|
+
@server ||= Server.new(
|
32
|
+
options.fetch(:port, DEFAULT_PORT),
|
33
|
+
options.fetch(:timeout, DEFAULT_TIMEOUT)
|
34
|
+
)
|
31
35
|
end
|
32
36
|
|
33
37
|
def client
|
@@ -75,7 +79,7 @@ module Capybara::Poltergeist
|
|
75
79
|
end
|
76
80
|
|
77
81
|
def visit(path)
|
78
|
-
browser.visit app_server.url(path)
|
82
|
+
browser.visit app_server.url(path)
|
79
83
|
end
|
80
84
|
|
81
85
|
def current_url
|
@@ -107,13 +111,16 @@ module Capybara::Poltergeist
|
|
107
111
|
nil
|
108
112
|
end
|
109
113
|
|
110
|
-
def within_frame(
|
111
|
-
browser.within_frame(
|
114
|
+
def within_frame(name, &block)
|
115
|
+
browser.within_frame(name, &block)
|
116
|
+
end
|
117
|
+
|
118
|
+
def within_window(name, &block)
|
119
|
+
browser.within_window(name, &block)
|
112
120
|
end
|
113
121
|
|
114
122
|
def reset!
|
115
123
|
browser.reset
|
116
|
-
@headers = {}
|
117
124
|
end
|
118
125
|
|
119
126
|
def render(path, options = {})
|
@@ -123,11 +130,36 @@ module Capybara::Poltergeist
|
|
123
130
|
def resize(width, height)
|
124
131
|
browser.resize(width, height)
|
125
132
|
end
|
133
|
+
alias_method :resize_window, :resize
|
126
134
|
|
127
135
|
def network_traffic
|
128
136
|
browser.network_traffic
|
129
137
|
end
|
130
138
|
|
139
|
+
def headers=(headers)
|
140
|
+
browser.set_headers(headers)
|
141
|
+
end
|
142
|
+
|
143
|
+
def response_headers
|
144
|
+
browser.response_headers
|
145
|
+
end
|
146
|
+
|
147
|
+
def cookies
|
148
|
+
browser.cookies
|
149
|
+
end
|
150
|
+
|
151
|
+
def set_cookie(name, value, options = {})
|
152
|
+
browser.set_cookie({
|
153
|
+
:name => name,
|
154
|
+
:value => value,
|
155
|
+
:domain => URI.parse(app_server.url('')).host
|
156
|
+
}.merge(options))
|
157
|
+
end
|
158
|
+
|
159
|
+
def remove_cookie(name)
|
160
|
+
browser.remove_cookie(name)
|
161
|
+
end
|
162
|
+
|
131
163
|
def debug
|
132
164
|
if @options[:inspector]
|
133
165
|
inspector.open
|
@@ -1,23 +1,23 @@
|
|
1
1
|
module Capybara::Poltergeist
|
2
2
|
class Inspector
|
3
|
-
BROWSERS
|
3
|
+
BROWSERS = %w(chromium chromium-browser google-chrome open)
|
4
|
+
DEFAULT_PORT = 9664
|
4
5
|
|
5
6
|
def self.detect_browser
|
6
|
-
@browser ||= BROWSERS.find { |name|
|
7
|
+
@browser ||= BROWSERS.find { |name| browser_binary_exists?(name) }
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
|
+
attr_reader :port
|
11
|
+
|
12
|
+
def initialize(browser = nil, port = DEFAULT_PORT)
|
10
13
|
@browser = browser.respond_to?(:to_str) ? browser : nil
|
14
|
+
@port = port
|
11
15
|
end
|
12
16
|
|
13
17
|
def browser
|
14
18
|
@browser ||= self.class.detect_browser
|
15
19
|
end
|
16
20
|
|
17
|
-
def port
|
18
|
-
@port ||= Util.find_available_port
|
19
|
-
end
|
20
|
-
|
21
21
|
def url
|
22
22
|
"http://localhost:#{port}/"
|
23
23
|
end
|
@@ -31,5 +31,16 @@ module Capybara::Poltergeist
|
|
31
31
|
"as a configuration option for Poltergeist."
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
def self.browser_binary_exists?(browser)
|
36
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
37
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
38
|
+
exts.each { |ext|
|
39
|
+
exe = "#{path}#{File::SEPARATOR}#{browser}#{ext}"
|
40
|
+
return exe if File.executable? exe
|
41
|
+
}
|
42
|
+
end
|
43
|
+
return nil
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poltergeist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07
|
12
|
+
date: 2012-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -193,6 +193,22 @@ dependencies:
|
|
193
193
|
- - ~>
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: 1.0.0
|
196
|
+
- !ruby/object:Gem::Dependency
|
197
|
+
name: rspec-rerun
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
none: false
|
200
|
+
requirements:
|
201
|
+
- - ~>
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0.1'
|
204
|
+
type: :development
|
205
|
+
prerelease: false
|
206
|
+
version_requirements: !ruby/object:Gem::Requirement
|
207
|
+
none: false
|
208
|
+
requirements:
|
209
|
+
- - ~>
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0.1'
|
196
212
|
description: PhantomJS driver for Capybara
|
197
213
|
email:
|
198
214
|
- j@jonathanleighton.com
|
@@ -206,7 +222,6 @@ files:
|
|
206
222
|
- lib/capybara/poltergeist/browser.rb
|
207
223
|
- lib/capybara/poltergeist/inspector.rb
|
208
224
|
- lib/capybara/poltergeist/errors.rb
|
209
|
-
- lib/capybara/poltergeist/util.rb
|
210
225
|
- lib/capybara/poltergeist/web_socket_server.rb
|
211
226
|
- lib/capybara/poltergeist/json.rb
|
212
227
|
- lib/capybara/poltergeist/network_traffic/request.rb
|
@@ -227,6 +242,7 @@ files:
|
|
227
242
|
- lib/capybara/poltergeist/client/browser.coffee
|
228
243
|
- lib/capybara/poltergeist/client/agent.coffee
|
229
244
|
- lib/capybara/poltergeist/node.rb
|
245
|
+
- lib/capybara/poltergeist/cookie.rb
|
230
246
|
- lib/capybara/poltergeist/network_traffic.rb
|
231
247
|
- LICENSE
|
232
248
|
- README.md
|
@@ -244,7 +260,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
244
260
|
version: '0'
|
245
261
|
segments:
|
246
262
|
- 0
|
247
|
-
hash:
|
263
|
+
hash: -4328509354684293409
|
248
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
249
265
|
none: false
|
250
266
|
requirements:
|
@@ -253,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
269
|
version: '0'
|
254
270
|
segments:
|
255
271
|
- 0
|
256
|
-
hash:
|
272
|
+
hash: -4328509354684293409
|
257
273
|
requirements: []
|
258
274
|
rubyforge_project:
|
259
275
|
rubygems_version: 1.8.24
|