selenium-emulated_features 1.0.0 → 2.0.0

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