selenium-emulated_features 1.0.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9f815da39f09e937bce4a248e1ae32fda3267a7
4
- data.tar.gz: f51d89ce4a9ade9503c1ee27eb280f6eea853a50
3
+ metadata.gz: e8fb917f4dbc8b5389e5f57b3e2db6941f3b3226
4
+ data.tar.gz: 5988bca1966cd32f007c3354bd15952f52603be2
5
5
  SHA512:
6
- metadata.gz: 87e1ab5424fe216df13ea975abbeee23a54d29ed611edf51618df7ea809200ef0cb064f04d71468dccc9aa47d7704c0de399664cb5b0f771a4b03f24eaac799e
7
- data.tar.gz: e9615c006b217582f3a6dc27ec3a4d29b743b22f7fc70a6dd740fc0c984744bcfd265b5cee81b3fa337281798273815298a253d2fe91f5f3710c3507efe8fad0
6
+ metadata.gz: 9b59514ac827dca1e72a80ecc9b395c49ad8213224f5f131e068090b68bd7d79ed95c79d72cc58adc22c779cc398036d11b33ff3b802f287931384287005888f
7
+ data.tar.gz: da988ccd383efad982afa8c97767f0ffce289f5acc80b538ac1fee2b09b1d79c5e911dd375174864f13a4a91ab48c03a4b7d733adb722bff6d4c9597adaf284d
data/Gemfile.lock CHANGED
@@ -1,16 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- selenium-emulated_features (0.0.1)
4
+ selenium-emulated_features (2.0.0)
5
+ selenium-webdriver (~> 2.44)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
- childprocess (0.5.5)
10
+ childprocess (0.5.6)
10
11
  ffi (~> 1.0, >= 1.0.11)
11
12
  diff-lcs (1.2.5)
12
- ffi (1.9.6)
13
- multi_json (1.10.1)
13
+ ffi (1.9.8)
14
+ multi_json (1.11.1)
14
15
  rack (1.6.0)
15
16
  rack-protection (1.5.3)
16
17
  rack
@@ -28,7 +29,7 @@ GEM
28
29
  rspec-support (~> 3.2.0)
29
30
  rspec-support (3.2.1)
30
31
  rubyzip (1.1.7)
31
- selenium-webdriver (2.44.0)
32
+ selenium-webdriver (2.46.2)
32
33
  childprocess (~> 0.5)
33
34
  multi_json (~> 1.0)
34
35
  rubyzip (~> 1.0)
@@ -38,13 +39,15 @@ GEM
38
39
  rack-protection (~> 1.4)
39
40
  tilt (~> 1.3, >= 1.3.4)
40
41
  tilt (1.4.1)
41
- websocket (1.2.1)
42
+ websocket (1.2.2)
42
43
 
43
44
  PLATFORMS
44
45
  ruby
45
46
 
46
47
  DEPENDENCIES
47
- rspec (~> 3.1, >= 3.1.0)
48
+ rspec (~> 3.1)
48
49
  selenium-emulated_features!
49
- selenium-webdriver (~> 2.44, >= 2.44.0)
50
- sinatra (~> 1.4, >= 1.4.5)
50
+ sinatra (~> 1.4)
51
+
52
+ BUNDLED WITH
53
+ 1.10.2
File without changes
data/README.md CHANGED
@@ -1,17 +1,16 @@
1
1
  # selenium-emulated_features
2
- Adds HTTP status code and response headers emulation to `Selenium::WebDriver::Driver`.
2
+ Adds HTTP status code and response headers emulation to Selenium drivers.
3
3
 
4
4
  ## Installation
5
- Via RubyGems:
5
+ Install with Bundler by adding the following line to your `Gemfile`:
6
6
 
7
7
  ```
8
- % gem install selenium-emulated_features
8
+ gem "selenium-emulated_features", "~> 2.0"
9
9
  ```
10
-
11
- Via Bundler:
10
+ Or install via RubyGems:
12
11
 
13
12
  ```
14
- gem "selenium/emulated_features"
13
+ % gem install selenium-emulated_features
15
14
  ```
16
15
 
17
16
  ## Usage
@@ -26,11 +25,19 @@ driver.response_code # => 404
26
25
  driver.response_headers # => {...}
27
26
  ```
28
27
 
29
- If the URI is not reachable, `nil` is returned:
28
+ `nil` is returned if the URI is not reachable or an error occurs:
30
29
 
31
30
  ```ruby
32
31
  driver.navigate.to("https://example.foobar")
33
32
 
34
33
  driver.response_code # => nil
35
34
  driver.response_headers # => nil
36
- ```
35
+ ```
36
+
37
+ If you want an exception to be raised instead:
38
+
39
+ ```ruby
40
+ Selenium::EmulatedFeatures.raise_exceptions = true
41
+ driver.navigate.to("https://example.foobar")
42
+ driver.response_code # => Selenium::EmulatedFeatures::Error
43
+ ```
data/Rakefile CHANGED
@@ -1,24 +1,30 @@
1
+ require "thread"
1
2
  require "rspec/core/rake_task"
2
3
  require_relative "support/test_app"
3
4
 
4
5
  namespace :spec do
5
6
  desc "Run examples for the Chrome driver"
6
- RSpec::Core::RakeTask.new chrome: [:start_test_app] do |task|
7
+ RSpec::Core::RakeTask.new chrome: [:test_app] do |task|
7
8
  task.rspec_opts = %w(--tag chrome)
8
9
  end
9
10
 
10
11
  desc "Run examples for the Firefox Driver"
11
- RSpec::Core::RakeTask.new firefox: [:start_test_app] do |task|
12
+ RSpec::Core::RakeTask.new firefox: [:test_app] do |task|
12
13
  task.rspec_opts = %w(--tag firefox)
13
14
  end
14
15
 
15
16
  desc "Run examples for the Safari Driver"
16
- RSpec::Core::RakeTask.new safari: [:start_test_app] do |task|
17
+ RSpec::Core::RakeTask.new safari: [:test_app] do |task|
17
18
  task.rspec_opts = %w(--tag safari)
18
19
  end
20
+
21
+ desc "Run examples for the PhantomJS Driver"
22
+ RSpec::Core::RakeTask.new phantomjs: [:test_app] do |task|
23
+ task.rspec_opts = %w(--tag phantomjs)
24
+ end
19
25
  end
20
26
 
21
- RSpec::Core::RakeTask.new spec: [:start_test_app]
27
+ RSpec::Core::RakeTask.new spec: [:test_app]
22
28
 
23
29
  Rake::Task[:spec].enhance { Rake::Task[:stop_test_app].invoke }
24
30
 
@@ -27,14 +33,21 @@ task :build do
27
33
  sh "gem build selenium-emulated_features.gemspec --verbose"
28
34
  end
29
35
 
30
- task :run_test_app do
31
- Rack::Handler::WEBrick.run TestApp
32
- end
33
-
34
- task :start_test_app do
35
- @server_thread = Thread.new { Rack::Handler::WEBrick.run TestApp }
36
- end
36
+ task :test_app do
37
+ mutex = Mutex.new
38
+ cvar = ConditionVariable.new
39
+
40
+ @server_thread ||= Thread.new do
41
+ Rack::Handler::WEBrick.run(
42
+ TestApp,
43
+ Port: 9876,
44
+ BindAddress: "localhost",
45
+ Logger: WEBrick::Log.new("/dev/null"),
46
+ AccessLog: [],
47
+ :StartCallback => Proc.new { cvar.signal }
48
+ )
49
+ end
37
50
 
38
- task :stop_test_app do
39
- @server_thread.kill
51
+ mutex.lock
52
+ cvar.wait(mutex)
40
53
  end
@@ -5,19 +5,21 @@ require "emulated_features/response_headers"
5
5
 
6
6
  module Selenium
7
7
  module EmulatedFeatures
8
+ VERSION = "2.0.0"
8
9
 
9
- VERSION = "1.0.0"
10
+ class Error < StandardError; end
10
11
 
12
+ class << self
13
+ attr_accessor :raise_exceptions
14
+ end
11
15
  end
12
16
  end
13
17
 
14
18
  module Selenium
15
19
  module WebDriver
16
20
  class Driver
17
-
18
21
  include EmulatedFeatures::ResponseCode
19
22
  include EmulatedFeatures::ResponseHeaders
20
-
21
23
  end
22
24
  end
23
25
  end
@@ -2,7 +2,7 @@ module Selenium
2
2
  module EmulatedFeatures
3
3
  module ResponseCode
4
4
  def response_code
5
- execute_script <<-js
5
+ dom_str = execute_script <<-js
6
6
  if(document.SEF && document.SEF.request) {
7
7
  return document.SEF.request.status;
8
8
  }
@@ -31,6 +31,22 @@ module Selenium
31
31
  document.SEF.request.send(null);
32
32
  return document.SEF.request.status;
33
33
  js
34
+
35
+ return dom_str if dom_str
36
+
37
+ if Selenium::EmulatedFeatures.raise_exceptions
38
+ raise Selenium::EmulatedFeatures::Error
39
+ else
40
+ nil
41
+ end
42
+
43
+ # PhantomJS
44
+ rescue Selenium::WebDriver::Error::UnknownError
45
+ if Selenium::EmulatedFeatures.raise_exceptions
46
+ raise Selenium::EmulatedFeatures::Error
47
+ else
48
+ nil
49
+ end
34
50
  end
35
51
  end
36
52
  end
@@ -2,12 +2,29 @@ module Selenium
2
2
  module EmulatedFeatures
3
3
  module ResponseHeaders
4
4
  def response_headers
5
- dom_string = execute_script <<-js
5
+ dom_str = execute_script <<-js
6
6
  if(document.SEF && document.SEF.request) {
7
7
  return document.SEF.request.getAllResponseHeaders();
8
8
  }
9
9
 
10
- document.SEF = {}
10
+ var baseURI = document.baseURI;
11
+
12
+ /* Firefox */
13
+ if(/about:neterror/.test(baseURI)) {
14
+ return null;
15
+ }
16
+
17
+ /* Safari */
18
+ if(/Safari.app/.test(baseURI)) {
19
+ return null;
20
+ }
21
+
22
+ /* Chrome */
23
+ if(/chromewebdata/.test(baseURI)) {
24
+ return null;
25
+ }
26
+
27
+ document.SEF = {};
11
28
  document.SEF.request = new XMLHttpRequest();
12
29
 
13
30
  document.SEF.request.open("GET", document.location, false);
@@ -15,11 +32,28 @@ module Selenium
15
32
  return document.SEF.request.getAllResponseHeaders();
16
33
  js
17
34
 
18
- dom_string.split("\n").inject({}) do |headers, line|
35
+ if !dom_str
36
+ if Selenium::EmulatedFeatures.raise_exceptions
37
+ raise Selenium::EmulatedFeatures::Error
38
+ else
39
+ return nil
40
+ end
41
+ end
42
+
43
+ dom_str.split("\n").inject({}) do |headers, line|
19
44
  field, value = line.split(": ")
20
- headers.merge({ field => [value.strip] })
45
+ headers.merge({ field.downcase => [value.strip] })
46
+ end
47
+
48
+ # PhantomJS, Firefox
49
+ rescue Selenium::WebDriver::Error::UnknownError,
50
+ Selenium::WebDriver::Error::JavascriptError
51
+ if Selenium::EmulatedFeatures.raise_exceptions
52
+ raise Selenium::EmulatedFeatures::Error
53
+ else
54
+ nil
55
+ end
21
56
  end
22
- end
23
57
  end
24
58
  end
25
59
  end
@@ -1,12 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "selenium-emulated_features"
3
- s.version = "1.0.0"
4
- s.date = "2015-02-24"
3
+ s.version = "2.0.0"
5
4
 
6
5
  s.summary = <<-summary
7
- HTTP status code and response headers emulation for Selenium drivers
6
+ Adds HTTP status code and response headers emulation to Selenium drivers
8
7
  summary
9
- s.description = s.summary
10
8
 
11
9
  s.authors = ["Dominic Bauer"]
12
10
  s.email = "bauerdominic@gmail.com"
@@ -17,8 +15,8 @@ Gem::Specification.new do |s|
17
15
  s.homepage = "https://github.com/bauerd/selenium-emulated_features"
18
16
  s.license = "MIT"
19
17
 
20
- s.add_dependency "selenium-webdriver", "~> 2.44", ">= 2.44.0"
18
+ s.add_dependency "selenium-webdriver", "~> 2.44"
21
19
 
22
- s.add_development_dependency "rspec", "~> 3.1", ">= 3.1.0"
23
- s.add_development_dependency "sinatra", "~> 1.4", ">= 1.4.5"
20
+ s.add_development_dependency "rspec", "~> 3.1"
21
+ s.add_development_dependency "sinatra", "~> 1.4"
24
22
  end
@@ -7,16 +7,44 @@ describe Selenium::EmulatedFeatures::ResponseCode do
7
7
  after { driver.quit }
8
8
 
9
9
  it "returns the HTTP response code" do
10
- driver.navigate.to "http://0.0.0.0:8080/status_code/404"
10
+ driver.navigate.to "http://0.0.0.0:9876/status_code/404"
11
11
  expect(driver.response_code).to be 404
12
12
  end
13
13
 
14
+ it "works for successive requests" do
15
+ driver.navigate.to "http://0.0.0.0:9876/status_code/200"
16
+ expect(driver.response_code).to be 200
17
+
18
+ driver.navigate.to "http://0.0.0.0:9876/status_code/418"
19
+ expect(driver.response_code).to be 418
20
+ end
21
+
14
22
  context "when server is unreachable" do
15
- it "returns `nil`" do
16
- skip if driver.browser == :safari
23
+ before { skip if driver.browser == :safari }
24
+
25
+ it "returns nil" do
26
+ driver.navigate.to "http://example.foobar"
27
+ expect(driver.response_code).to be nil
28
+ end
17
29
 
30
+ it "still works for successive requests" do
18
31
  driver.navigate.to "http://example.foobar"
19
32
  expect(driver.response_code).to be nil
33
+
34
+ driver.navigate.to "http://0.0.0.0:9876/status_code/418"
35
+ expect(driver.response_code).to be 418
36
+ end
37
+
38
+ context "with exceptions enabled" do
39
+ before { Selenium::EmulatedFeatures.raise_exceptions = true }
40
+ after { Selenium::EmulatedFeatures.raise_exceptions = false }
41
+
42
+ it "raises an exception" do
43
+ expect {
44
+ driver.navigate.to "http://example.foobar"
45
+ puts driver.response_code.class
46
+ }.to raise_error Selenium::EmulatedFeatures::Error
47
+ end
20
48
  end
21
49
  end
22
50
  end
@@ -39,4 +67,9 @@ describe Selenium::EmulatedFeatures::ResponseCode do
39
67
  end
40
68
  end
41
69
 
70
+ describe "PhantomJS driver", phantomjs: true do
71
+ it_behaves_like "a WebDriver that responds to #response_code" do
72
+ subject(:driver) { Selenium::WebDriver.for(:phantomjs) }
73
+ end
74
+ end
42
75
  end
@@ -7,9 +7,47 @@ describe Selenium::EmulatedFeatures::ResponseHeaders do
7
7
  after { driver.quit }
8
8
 
9
9
  it "returns the HTTP response headers" do
10
- driver.navigate.to "http://0.0.0.0:8080/response_headers"
11
- expect(driver.response_headers["Foo"]).to eq ["Bar"]
12
- expect(driver.response_headers["Alpha"]).to eq ["Beta"]
10
+ driver.navigate.to "http://0.0.0.0:9876/response_headers"
11
+ expect(driver.response_headers["foo"]).to eq ["Bar"]
12
+ expect(driver.response_headers["alpha"]).to eq ["Beta"]
13
+ end
14
+
15
+ it "works for successive requests" do
16
+ driver.navigate.to "http://0.0.0.0:9876/status_code/200"
17
+ headers_a = driver.response_headers
18
+
19
+ driver.navigate.to "http://0.0.0.0:9876/response_headers"
20
+ headers_b = driver.response_headers
21
+
22
+ expect(headers_a).not_to eq headers_b
23
+ end
24
+
25
+ context "when server is unreachable" do
26
+ before { skip if driver.browser == :safari }
27
+
28
+ it "returns nil" do
29
+ driver.navigate.to "http://example.foobar"
30
+ expect(driver.response_headers).to be nil
31
+ end
32
+
33
+ it "still works for successive requests" do
34
+ driver.navigate.to "http://example.foobar"
35
+ driver.navigate.to "http://0.0.0.0:9876/response_headers"
36
+ expect(driver.response_headers["foo"]).to eq ["Bar"]
37
+ expect(driver.response_headers["alpha"]).to eq ["Beta"]
38
+ end
39
+
40
+ context "with exceptions enabled" do
41
+ before { Selenium::EmulatedFeatures.raise_exceptions = true }
42
+ after { Selenium::EmulatedFeatures.raise_exceptions = false }
43
+
44
+ it "raises an exception" do
45
+ expect {
46
+ driver.navigate.to "http://example.foobar"
47
+ driver.response_headers
48
+ }.to raise_error Selenium::EmulatedFeatures::Error
49
+ end
50
+ end
13
51
  end
14
52
  end
15
53
 
@@ -31,4 +69,9 @@ describe Selenium::EmulatedFeatures::ResponseHeaders do
31
69
  end
32
70
  end
33
71
 
72
+ describe "PhantomJS driver", phantomjs: true do
73
+ it_behaves_like "a WebDriver that responds to #response_headers" do
74
+ subject(:driver) { Selenium::WebDriver.for(:phantomjs) }
75
+ end
76
+ end
34
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium-emulated_features
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominic Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-24 00:00:00.000000000 Z
11
+ date: 2015-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.44'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 2.44.0
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.44'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 2.44.0
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rspec
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -37,9 +31,6 @@ dependencies:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
33
  version: '3.1'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 3.1.0
43
34
  type: :development
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,9 +38,6 @@ dependencies:
47
38
  - - "~>"
48
39
  - !ruby/object:Gem::Version
49
40
  version: '3.1'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 3.1.0
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: sinatra
55
43
  requirement: !ruby/object:Gem::Requirement
@@ -57,9 +45,6 @@ dependencies:
57
45
  - - "~>"
58
46
  - !ruby/object:Gem::Version
59
47
  version: '1.4'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 1.4.5
63
48
  type: :development
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -67,10 +52,7 @@ dependencies:
67
52
  - - "~>"
68
53
  - !ruby/object:Gem::Version
69
54
  version: '1.4'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 1.4.5
73
- description: HTTP status code and response headers emulation for Selenium drivers
55
+ description:
74
56
  email: bauerdominic@gmail.com
75
57
  executables: []
76
58
  extensions: []
@@ -80,7 +62,7 @@ files:
80
62
  - ".rspec"
81
63
  - Gemfile
82
64
  - Gemfile.lock
83
- - LICENSE.md
65
+ - LICENSE
84
66
  - README.md
85
67
  - Rakefile
86
68
  - lib/selenium/emulated_features.rb
@@ -113,7 +95,7 @@ rubyforge_project:
113
95
  rubygems_version: 2.2.2
114
96
  signing_key:
115
97
  specification_version: 4
116
- summary: HTTP status code and response headers emulation for Selenium drivers
98
+ summary: Adds HTTP status code and response headers emulation to Selenium drivers
117
99
  test_files:
118
100
  - spec/response_code_spec.rb
119
101
  - spec/response_headers_spec.rb