capybara-webkit 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ We love pull requests. Here's a quick guide:
3
3
  1. Fork the repo.
4
4
 
5
5
  2. Run the tests. We only take pull requests with passing tests, and it's great
6
- to know that you have a clean slate: `bundle && rake`
6
+ to know that you have a clean slate: `bundle && bundle exec rake`
7
7
 
8
8
  3. Add a test for your change. Only refactoring and documentation changes
9
9
  require no new tests. If you are adding functionality or fixing a bug, we need
data/Gemfile CHANGED
@@ -1,8 +1,3 @@
1
1
  source "http://rubygems.org"
2
+
2
3
  gemspec
3
- # gem "appraisal"
4
- # gem "rspec", '~> 2.6.0', :require => false
5
- # gem "capybara"
6
- # gem "sinatra", :require => false
7
- # gem "mini_magick", :require => false
8
- # gem 'rake'
@@ -1,30 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- capybara-webkit (0.7.2)
5
- capybara (< 1.2, >= 1.0.0)
4
+ capybara-webkit (0.8.0)
5
+ capybara (>= 1.0.0, < 1.2)
6
+ json
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
- appraisal (0.3.8)
11
+ appraisal (0.4.0)
11
12
  bundler
12
13
  rake
13
- capybara (1.1.1)
14
+ capybara (1.1.2)
14
15
  mime-types (>= 1.16)
15
16
  nokogiri (>= 1.3.3)
16
17
  rack (>= 1.0.0)
17
18
  rack-test (>= 0.5.4)
18
19
  selenium-webdriver (~> 2.0)
19
20
  xpath (~> 0.1.4)
20
- childprocess (0.2.2)
21
+ childprocess (0.2.3)
21
22
  ffi (~> 1.0.6)
22
23
  diff-lcs (1.1.2)
23
- ffi (1.0.9)
24
- json_pure (1.6.1)
25
- mime-types (1.16)
24
+ ffi (1.0.11)
25
+ json (1.6.3)
26
+ mime-types (1.17.2)
26
27
  mini_magick (3.2.1)
27
28
  subexec (~> 0.0.4)
29
+ multi_json (1.0.4)
28
30
  nokogiri (1.5.0)
29
31
  rack (1.3.2)
30
32
  rack-test (0.6.1)
@@ -38,11 +40,11 @@ GEM
38
40
  rspec-expectations (2.6.0)
39
41
  diff-lcs (~> 1.1.2)
40
42
  rspec-mocks (2.6.0)
41
- rubyzip (0.9.4)
42
- selenium-webdriver (2.7.0)
43
+ rubyzip (0.9.5)
44
+ selenium-webdriver (2.15.0)
43
45
  childprocess (>= 0.2.1)
44
- ffi (>= 1.0.7)
45
- json_pure
46
+ ffi (~> 1.0.9)
47
+ multi_json (~> 1.0.4)
46
48
  rubyzip
47
49
  sinatra (1.1.2)
48
50
  rack (~> 1.1)
@@ -56,7 +58,7 @@ PLATFORMS
56
58
  ruby
57
59
 
58
60
  DEPENDENCIES
59
- appraisal
61
+ appraisal (~> 0.4.0)
60
62
  capybara-webkit!
61
63
  mini_magick
62
64
  rake
data/README.md CHANGED
@@ -15,11 +15,13 @@ Reporting Issues
15
15
  ----------------
16
16
 
17
17
  Without access to your application code we can't easily debug most crashes or
18
- generic failures, so we've included a debug vesion of the driver that prints a
18
+ generic failures, so we've included a debug version of the driver that prints a
19
19
  log of what happened during each test. Before filing a crash bug, please see
20
20
  [Reporting Crashes](https://github.com/thoughtbot/capybara-webkit/wiki/Reporting-Crashes).
21
21
  You're much more likely to get a fix if you follow those instructions.
22
22
 
23
+ If you are having compiling issues please post to the [mailing list](http://groups.google.com/group/capybara-webkit).
24
+
23
25
  CI
24
26
  --
25
27
 
@@ -38,7 +40,11 @@ Set your Capybara Javascript driver to webkit:
38
40
 
39
41
  Capybara.javascript_driver = :webkit
40
42
 
41
- Tag scenarios with @javascript to run them using a headless WebKit browser.
43
+ In cucumber, tag scenarios with @javascript to run them using a headless WebKit browser.
44
+
45
+ In RSpec, use the :js => true flag.
46
+
47
+ Take note of the transactional fixtures section of the [capybara README](https://github.com/jnicklas/capybara/blob/master/README.md).
42
48
 
43
49
  Contributing
44
50
  ------------
@@ -48,7 +54,7 @@ See the CONTRIBUTING document.
48
54
  About
49
55
  -----
50
56
 
51
- The capybara WebKit driver was written by Joe Ferris, Tristan Dunn, and Jason Morrison from [thoughtbot, inc](http://thoughtbot.com/community).
57
+ The capybara WebKit driver is maintained by Joe Ferris and Matt Mongeau. It was written by [thoughtbot, inc](http://thoughtbot.com/community) with the help of numerous [contributions from the open source community](https://github.com/thoughtbot/capybara-webkit/contributors).
52
58
 
53
59
  Code for rendering the current webpage to a PNG is borrowed from Phantom.js' implementation.
54
60
 
@@ -56,11 +62,6 @@ Code for rendering the current webpage to a PNG is borrowed from Phantom.js' imp
56
62
 
57
63
  The names and logos for thoughtbot are trademarks of thoughtbot, inc.
58
64
 
59
- Notes
60
- -----
61
-
62
- capybara-webkit will listen on port 8200. This may conflict with other services.
63
-
64
65
  License
65
66
  -------
66
67
 
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require 'bundler'
3
2
  require 'rspec/core/rake_task'
4
- require 'rake/gempackagetask'
5
3
  require 'capybara_webkit_builder'
6
4
  require 'appraisal'
7
5
 
6
+ Bundler::GemHelper.install_tasks
7
+
8
8
  desc "Generate a Makefile using qmake"
9
9
  file 'Makefile' do
10
10
  CapybaraWebkitBuilder.makefile or exit(1)
@@ -30,24 +30,6 @@ end
30
30
  desc "Default: build and run all specs"
31
31
  task :default => [:build, :spec]
32
32
 
33
- eval("$specification = begin; #{IO.read('capybara-webkit.gemspec')}; end")
34
- Rake::GemPackageTask.new($specification) do |package|
35
- package.need_zip = true
36
- package.need_tar = true
37
- end
38
-
39
- gem_file = "pkg/#{$specification.name}-#{$specification.version}.gem"
40
-
41
- desc "Build and install the latest gem"
42
- task :install => :gem do
43
- sh("gem install --local #{gem_file}")
44
- end
45
-
46
- desc "Build and release the latest gem"
47
- task :release => :gem do
48
- sh("gem push #{gem_file}")
49
- end
50
-
51
33
  desc "Generate a new command called NAME"
52
34
  task :generate_command do
53
35
  name = ENV['NAME'] or raise "Provide a name with NAME="
@@ -1,24 +1,27 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "capybara/driver/webkit/version"
3
+
1
4
  Gem::Specification.new do |s|
2
- s.name = "capybara-webkit"
3
- s.version = "0.7.2"
4
- s.authors = ["thoughtbot", "Joe Ferris", "Jason Morrison", "Tristan Dunn",
5
- "Joshua Clayton", "Yuichi Tateno", "Aaron Gibralter",
6
- "Vasily Reys", "petrushka", "John Bintz", "Chad Pytel",
7
- "Christopher Meiklejohn", "John Barker", "Jeremy Wells",
8
- "Chris Griego", "Shigeya Suzuki"]
9
- s.email = "support@thoughtbot.com"
10
- s.files = `git ls-files`.split("\n")
11
- s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
5
+ s.name = "capybara-webkit"
6
+ s.version = Capybara::Driver::Webkit::VERSION.dup
7
+ s.authors = ["thoughtbot", "Joe Ferris", "Matt Mongeau", "Mike Burns", "Jason Morrison"]
8
+ s.email = "support@thoughtbot.com"
12
9
  s.homepage = "http://github.com/thoughtbot/capybara-webkit"
10
+ s.summary = "Headless Webkit driver for Capybara"
11
+
12
+ s.files = `git ls-files`.split("\n")
13
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
13
14
  s.require_path = "lib"
14
- s.rubygems_version = "1.3.5"
15
- s.summary = "Headless Webkit driver for Capybara"
16
- s.add_runtime_dependency "capybara", [">= 1.0.0", "< 1.2"]
17
- s.add_development_dependency "rspec", "~> 2.6.0"
18
- s.add_development_dependency "sinatra"
19
- s.add_development_dependency "mini_magick"
20
- s.add_development_dependency "rake"
21
- s.add_development_dependency "appraisal"
15
+
22
16
  s.extensions = "extconf.rb"
17
+
18
+ s.add_runtime_dependency("capybara", [">= 1.0.0", "< 1.2"])
19
+ s.add_runtime_dependency("json")
20
+
21
+ s.add_development_dependency("rspec", "~> 2.6.0")
22
+ s.add_development_dependency("sinatra")
23
+ s.add_development_dependency("mini_magick")
24
+ s.add_development_dependency("rake")
25
+ s.add_development_dependency("appraisal", "~> 0.4.0")
23
26
  end
24
27
 
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: /Users/jferris/Source/capybara-webkit
3
3
  specs:
4
- capybara-webkit (0.6.1)
5
- capybara (< 1.2, >= 1.0.0)
4
+ capybara-webkit (0.8.0)
5
+ capybara (>= 1.0.0, < 1.2)
6
+ json
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
- appraisal (0.3.8)
11
+ appraisal (0.4.0)
11
12
  bundler
12
13
  rake
13
14
  capybara (1.0.1)
@@ -20,16 +21,19 @@ GEM
20
21
  childprocess (0.2.2)
21
22
  ffi (~> 1.0.6)
22
23
  diff-lcs (1.1.3)
23
- ffi (1.0.9)
24
+ ffi (1.0.10)
25
+ json (1.6.3)
24
26
  json_pure (1.6.1)
25
- mime-types (1.16)
27
+ mime-types (1.17.2)
26
28
  mini_magick (3.3)
27
29
  subexec (~> 0.1.0)
28
30
  nokogiri (1.5.0)
29
- rack (1.3.3)
31
+ rack (1.3.5)
32
+ rack-protection (1.1.4)
33
+ rack
30
34
  rack-test (0.6.1)
31
35
  rack (>= 1.0)
32
- rake (0.9.2)
36
+ rake (0.9.2.2)
33
37
  rspec (2.6.0)
34
38
  rspec-core (~> 2.6.0)
35
39
  rspec-expectations (~> 2.6.0)
@@ -39,14 +43,15 @@ GEM
39
43
  diff-lcs (~> 1.1.2)
40
44
  rspec-mocks (2.6.0)
41
45
  rubyzip (0.9.4)
42
- selenium-webdriver (2.7.0)
46
+ selenium-webdriver (2.12.1)
43
47
  childprocess (>= 0.2.1)
44
- ffi (>= 1.0.7)
48
+ ffi (~> 1.0.9)
45
49
  json_pure
46
50
  rubyzip
47
- sinatra (1.2.6)
48
- rack (~> 1.1)
49
- tilt (< 2.0, >= 1.2.2)
51
+ sinatra (1.3.1)
52
+ rack (~> 1.3, >= 1.3.4)
53
+ rack-protection (~> 1.1, >= 1.1.2)
54
+ tilt (~> 1.3, >= 1.3.3)
50
55
  subexec (0.1.0)
51
56
  tilt (1.3.3)
52
57
  xpath (0.1.4)
@@ -56,7 +61,7 @@ PLATFORMS
56
61
  ruby
57
62
 
58
63
  DEPENDENCIES
59
- appraisal
64
+ appraisal (~> 0.4.0)
60
65
  capybara (~> 1.0.0)
61
66
  capybara-webkit!
62
67
  mini_magick
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: /Users/jferris/Source/capybara-webkit
3
3
  specs:
4
- capybara-webkit (0.6.1)
5
- capybara (< 1.2, >= 1.0.0)
4
+ capybara-webkit (0.8.0)
5
+ capybara (>= 1.0.0, < 1.2)
6
+ json
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
- appraisal (0.3.8)
11
+ appraisal (0.4.0)
11
12
  bundler
12
13
  rake
13
14
  capybara (1.1.1)
@@ -20,16 +21,19 @@ GEM
20
21
  childprocess (0.2.2)
21
22
  ffi (~> 1.0.6)
22
23
  diff-lcs (1.1.3)
23
- ffi (1.0.9)
24
+ ffi (1.0.10)
25
+ json (1.6.3)
24
26
  json_pure (1.6.1)
25
- mime-types (1.16)
27
+ mime-types (1.17.2)
26
28
  mini_magick (3.3)
27
29
  subexec (~> 0.1.0)
28
30
  nokogiri (1.5.0)
29
- rack (1.3.3)
31
+ rack (1.3.5)
32
+ rack-protection (1.1.4)
33
+ rack
30
34
  rack-test (0.6.1)
31
35
  rack (>= 1.0)
32
- rake (0.9.2)
36
+ rake (0.9.2.2)
33
37
  rspec (2.6.0)
34
38
  rspec-core (~> 2.6.0)
35
39
  rspec-expectations (~> 2.6.0)
@@ -39,14 +43,15 @@ GEM
39
43
  diff-lcs (~> 1.1.2)
40
44
  rspec-mocks (2.6.0)
41
45
  rubyzip (0.9.4)
42
- selenium-webdriver (2.7.0)
46
+ selenium-webdriver (2.12.1)
43
47
  childprocess (>= 0.2.1)
44
- ffi (>= 1.0.7)
48
+ ffi (~> 1.0.9)
45
49
  json_pure
46
50
  rubyzip
47
- sinatra (1.2.6)
48
- rack (~> 1.1)
49
- tilt (< 2.0, >= 1.2.2)
51
+ sinatra (1.3.1)
52
+ rack (~> 1.3, >= 1.3.4)
53
+ rack-protection (~> 1.1, >= 1.1.2)
54
+ tilt (~> 1.3, >= 1.3.3)
50
55
  subexec (0.1.0)
51
56
  tilt (1.3.3)
52
57
  xpath (0.1.4)
@@ -56,7 +61,7 @@ PLATFORMS
56
61
  ruby
57
62
 
58
63
  DEPENDENCIES
59
- appraisal
64
+ appraisal (~> 0.4.0)
60
65
  capybara (~> 1.1.0)
61
66
  capybara-webkit!
62
67
  mini_magick
@@ -1,7 +1,9 @@
1
1
  require "capybara"
2
+ require "capybara/driver/webkit/version"
2
3
  require "capybara/driver/webkit/node"
3
4
  require "capybara/driver/webkit/browser"
4
5
  require "capybara/driver/webkit/socket_debugger"
6
+ require "capybara/driver/webkit/cookie_jar"
5
7
 
6
8
  class Capybara::Driver::Webkit
7
9
  class WebkitInvalidResponseError < StandardError
@@ -20,13 +22,18 @@ class Capybara::Driver::Webkit
20
22
  @options = options
21
23
  @rack_server = Capybara::Server.new(@app)
22
24
  @rack_server.boot if Capybara.run_server
23
- @browser = options[:browser] || Browser.new
25
+ @browser = options[:browser] || Browser.new(
26
+ :ignore_ssl_errors => options[:ignore_ssl_errors])
24
27
  end
25
28
 
26
29
  def current_url
27
30
  browser.url
28
31
  end
29
32
 
33
+ def requested_url
34
+ browser.requested_url
35
+ end
36
+
30
37
  def visit(path)
31
38
  browser.visit(url(path))
32
39
  end
@@ -56,6 +63,14 @@ class Capybara::Driver::Webkit
56
63
  browser.evaluate_script script
57
64
  end
58
65
 
66
+ def console_messages
67
+ browser.console_messages
68
+ end
69
+
70
+ def error_messages
71
+ browser.error_messages
72
+ end
73
+
59
74
  def response_headers
60
75
  browser.response_headers
61
76
  end
@@ -103,6 +118,10 @@ class Capybara::Driver::Webkit
103
118
  @rack_server.port
104
119
  end
105
120
 
121
+ def cookies
122
+ @cookie_jar ||= CookieJar.new(browser)
123
+ end
124
+
106
125
  private
107
126
 
108
127
  def url(path)
@@ -12,6 +12,7 @@ class Capybara::Driver::Webkit
12
12
  @stdout = options.has_key?(:stdout) ?
13
13
  options[:stdout] :
14
14
  $stdout
15
+ @ignore_ssl_errors = options[:ignore_ssl_errors]
15
16
  start_server
16
17
  connect
17
18
  end
@@ -44,6 +45,19 @@ class Capybara::Driver::Webkit
44
45
  command("Status").to_i
45
46
  end
46
47
 
48
+ def console_messages
49
+ command("ConsoleMessages").split("\n").map do |messages|
50
+ parts = messages.split("|", 3)
51
+ { :source => parts.first, :line_number => Integer(parts[1]), :message => parts.last }
52
+ end
53
+ end
54
+
55
+ def error_messages
56
+ console_messages.select do |message|
57
+ message[:message] =~ /Error:/
58
+ end
59
+ end
60
+
47
61
  def response_headers
48
62
  Hash[command("Headers").split("\n").map { |header| header.split(": ") }]
49
63
  end
@@ -52,6 +66,10 @@ class Capybara::Driver::Webkit
52
66
  command("Url")
53
67
  end
54
68
 
69
+ def requested_url
70
+ command("RequestedUrl")
71
+ end
72
+
55
73
  def frame_focus(frame_id_or_index=nil)
56
74
  if frame_id_or_index.is_a? Fixnum
57
75
  command("FrameFocus", "", frame_id_or_index.to_s)
@@ -98,6 +116,15 @@ class Capybara::Driver::Webkit
98
116
  command("GetCookies").lines.map{ |line| line.strip }.select{ |line| !line.empty? }
99
117
  end
100
118
 
119
+ def set_proxy(options = {})
120
+ options = default_proxy_options.merge(options)
121
+ command("SetProxy", options[:host], options[:port], options[:user], options[:pass])
122
+ end
123
+
124
+ def clear_proxy
125
+ command("SetProxy")
126
+ end
127
+
101
128
  private
102
129
 
103
130
  def start_server
@@ -111,16 +138,24 @@ class Capybara::Driver::Webkit
111
138
 
112
139
  def fork_server
113
140
  server_path = File.expand_path("../../../../../bin/webkit_server", __FILE__)
114
-
115
141
  pipe, @pid = server_pipe_and_pid(server_path)
116
-
117
- at_exit { Process.kill("INT", @pid) }
118
-
142
+ register_shutdown_hook
119
143
  pipe
120
144
  end
121
145
 
146
+ def register_shutdown_hook
147
+ @owner_pid = Process.pid
148
+ at_exit do
149
+ if Process.pid == @owner_pid
150
+ Process.kill("INT", @pid)
151
+ end
152
+ end
153
+ end
154
+
122
155
  def server_pipe_and_pid(server_path)
123
- pipe = IO.popen(server_path)
156
+ cmdline = [server_path]
157
+ cmdline << "--ignore-ssl-errors" if @ignore_ssl_errors
158
+ pipe = IO.popen(cmdline.join(" "))
124
159
  [pipe, pipe.pid]
125
160
  end
126
161
 
@@ -185,5 +220,14 @@ class Capybara::Driver::Webkit
185
220
  response.force_encoding("UTF-8") if response.respond_to?(:force_encoding)
186
221
  response
187
222
  end
223
+
224
+ def default_proxy_options
225
+ {
226
+ :host => "localhost",
227
+ :port => "0",
228
+ :user => "",
229
+ :pass => ""
230
+ }
231
+ end
188
232
  end
189
233
  end