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