selenium-emulated_features 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f9f815da39f09e937bce4a248e1ae32fda3267a7
4
+ data.tar.gz: f51d89ce4a9ade9503c1ee27eb280f6eea853a50
5
+ SHA512:
6
+ metadata.gz: 87e1ab5424fe216df13ea975abbeee23a54d29ed611edf51618df7ea809200ef0cb064f04d71468dccc9aa47d7704c0de399664cb5b0f771a4b03f24eaac799e
7
+ data.tar.gz: e9615c006b217582f3a6dc27ec3a4d29b743b22f7fc70a6dd740fc0c984744bcfd265b5cee81b3fa337281798273815298a253d2fe91f5f3710c3507efe8fad0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,50 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ selenium-emulated_features (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ childprocess (0.5.5)
10
+ ffi (~> 1.0, >= 1.0.11)
11
+ diff-lcs (1.2.5)
12
+ ffi (1.9.6)
13
+ multi_json (1.10.1)
14
+ rack (1.6.0)
15
+ rack-protection (1.5.3)
16
+ rack
17
+ rspec (3.2.0)
18
+ rspec-core (~> 3.2.0)
19
+ rspec-expectations (~> 3.2.0)
20
+ rspec-mocks (~> 3.2.0)
21
+ rspec-core (3.2.0)
22
+ rspec-support (~> 3.2.0)
23
+ rspec-expectations (3.2.0)
24
+ diff-lcs (>= 1.2.0, < 2.0)
25
+ rspec-support (~> 3.2.0)
26
+ rspec-mocks (3.2.0)
27
+ diff-lcs (>= 1.2.0, < 2.0)
28
+ rspec-support (~> 3.2.0)
29
+ rspec-support (3.2.1)
30
+ rubyzip (1.1.7)
31
+ selenium-webdriver (2.44.0)
32
+ childprocess (~> 0.5)
33
+ multi_json (~> 1.0)
34
+ rubyzip (~> 1.0)
35
+ websocket (~> 1.0)
36
+ sinatra (1.4.5)
37
+ rack (~> 1.4)
38
+ rack-protection (~> 1.4)
39
+ tilt (~> 1.3, >= 1.3.4)
40
+ tilt (1.4.1)
41
+ websocket (1.2.1)
42
+
43
+ PLATFORMS
44
+ ruby
45
+
46
+ DEPENDENCIES
47
+ rspec (~> 3.1, >= 3.1.0)
48
+ selenium-emulated_features!
49
+ selenium-webdriver (~> 2.44, >= 2.44.0)
50
+ sinatra (~> 1.4, >= 1.4.5)
data/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Dominic Bauer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # selenium-emulated_features
2
+ Adds HTTP status code and response headers emulation to `Selenium::WebDriver::Driver`.
3
+
4
+ ## Installation
5
+ Via RubyGems:
6
+
7
+ ```
8
+ % gem install selenium-emulated_features
9
+ ```
10
+
11
+ Via Bundler:
12
+
13
+ ```
14
+ gem "selenium/emulated_features"
15
+ ```
16
+
17
+ ## Usage
18
+ ```ruby
19
+ require "selenium-webdriver"
20
+ require "selenium/emulated_features"
21
+
22
+ driver = Selenium::WebDriver.for(:firefox)
23
+ driver.navigate.to("https://github.com/non/existent")
24
+
25
+ driver.response_code # => 404
26
+ driver.response_headers # => {...}
27
+ ```
28
+
29
+ If the URI is not reachable, `nil` is returned:
30
+
31
+ ```ruby
32
+ driver.navigate.to("https://example.foobar")
33
+
34
+ driver.response_code # => nil
35
+ driver.response_headers # => nil
36
+ ```
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ require "rspec/core/rake_task"
2
+ require_relative "support/test_app"
3
+
4
+ namespace :spec do
5
+ desc "Run examples for the Chrome driver"
6
+ RSpec::Core::RakeTask.new chrome: [:start_test_app] do |task|
7
+ task.rspec_opts = %w(--tag chrome)
8
+ end
9
+
10
+ desc "Run examples for the Firefox Driver"
11
+ RSpec::Core::RakeTask.new firefox: [:start_test_app] do |task|
12
+ task.rspec_opts = %w(--tag firefox)
13
+ end
14
+
15
+ desc "Run examples for the Safari Driver"
16
+ RSpec::Core::RakeTask.new safari: [:start_test_app] do |task|
17
+ task.rspec_opts = %w(--tag safari)
18
+ end
19
+ end
20
+
21
+ RSpec::Core::RakeTask.new spec: [:start_test_app]
22
+
23
+ Rake::Task[:spec].enhance { Rake::Task[:stop_test_app].invoke }
24
+
25
+ desc "Build the RubyGem"
26
+ task :build do
27
+ sh "gem build selenium-emulated_features.gemspec --verbose"
28
+ end
29
+
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
37
+
38
+ task :stop_test_app do
39
+ @server_thread.kill
40
+ end
@@ -0,0 +1,23 @@
1
+ $: << File.dirname(__FILE__)
2
+
3
+ require "emulated_features/response_code"
4
+ require "emulated_features/response_headers"
5
+
6
+ module Selenium
7
+ module EmulatedFeatures
8
+
9
+ VERSION = "1.0.0"
10
+
11
+ end
12
+ end
13
+
14
+ module Selenium
15
+ module WebDriver
16
+ class Driver
17
+
18
+ include EmulatedFeatures::ResponseCode
19
+ include EmulatedFeatures::ResponseHeaders
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ module Selenium
2
+ module EmulatedFeatures
3
+ module ResponseCode
4
+ def response_code
5
+ execute_script <<-js
6
+ if(document.SEF && document.SEF.request) {
7
+ return document.SEF.request.status;
8
+ }
9
+
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 = {}
28
+ document.SEF.request = new XMLHttpRequest();
29
+
30
+ document.SEF.request.open("GET", document.location, false);
31
+ document.SEF.request.send(null);
32
+ return document.SEF.request.status;
33
+ js
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ module Selenium
2
+ module EmulatedFeatures
3
+ module ResponseHeaders
4
+ def response_headers
5
+ dom_string = execute_script <<-js
6
+ if(document.SEF && document.SEF.request) {
7
+ return document.SEF.request.getAllResponseHeaders();
8
+ }
9
+
10
+ document.SEF = {}
11
+ document.SEF.request = new XMLHttpRequest();
12
+
13
+ document.SEF.request.open("GET", document.location, false);
14
+ document.SEF.request.send(null);
15
+ return document.SEF.request.getAllResponseHeaders();
16
+ js
17
+
18
+ dom_string.split("\n").inject({}) do |headers, line|
19
+ field, value = line.split(": ")
20
+ headers.merge({ field => [value.strip] })
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "selenium-emulated_features"
3
+ s.version = "1.0.0"
4
+ s.date = "2015-02-24"
5
+
6
+ s.summary = <<-summary
7
+ HTTP status code and response headers emulation for Selenium drivers
8
+ summary
9
+ s.description = s.summary
10
+
11
+ s.authors = ["Dominic Bauer"]
12
+ s.email = "bauerdominic@gmail.com"
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- spec/*`.split("\n")
16
+
17
+ s.homepage = "https://github.com/bauerd/selenium-emulated_features"
18
+ s.license = "MIT"
19
+
20
+ s.add_dependency "selenium-webdriver", "~> 2.44", ">= 2.44.0"
21
+
22
+ s.add_development_dependency "rspec", "~> 3.1", ">= 3.1.0"
23
+ s.add_development_dependency "sinatra", "~> 1.4", ">= 1.4.5"
24
+ end
@@ -0,0 +1,42 @@
1
+ require "selenium-webdriver"
2
+ require "selenium/emulated_features"
3
+
4
+ describe Selenium::EmulatedFeatures::ResponseCode do
5
+
6
+ shared_examples "a WebDriver that responds to #response_code" do
7
+ after { driver.quit }
8
+
9
+ it "returns the HTTP response code" do
10
+ driver.navigate.to "http://0.0.0.0:8080/status_code/404"
11
+ expect(driver.response_code).to be 404
12
+ end
13
+
14
+ context "when server is unreachable" do
15
+ it "returns `nil`" do
16
+ skip if driver.browser == :safari
17
+
18
+ driver.navigate.to "http://example.foobar"
19
+ expect(driver.response_code).to be nil
20
+ end
21
+ end
22
+ end
23
+
24
+ describe "Firefox driver", firefox: true do
25
+ it_behaves_like "a WebDriver that responds to #response_code" do
26
+ subject(:driver) { Selenium::WebDriver.for(:firefox) }
27
+ end
28
+ end
29
+
30
+ describe "Chrome driver", chrome: true do
31
+ it_behaves_like "a WebDriver that responds to #response_code" do
32
+ subject(:driver) { Selenium::WebDriver.for(:chrome) }
33
+ end
34
+ end
35
+
36
+ describe "Safari driver", safari: true do
37
+ it_behaves_like "a WebDriver that responds to #response_code" do
38
+ subject(:driver) { Selenium::WebDriver.for(:safari) }
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,34 @@
1
+ require "selenium-webdriver"
2
+ require "selenium/emulated_features"
3
+
4
+ describe Selenium::EmulatedFeatures::ResponseHeaders do
5
+
6
+ shared_examples "a WebDriver that responds to #response_headers" do
7
+ after { driver.quit }
8
+
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"]
13
+ end
14
+ end
15
+
16
+ describe "Firefox driver", firefox: true do
17
+ it_behaves_like "a WebDriver that responds to #response_headers" do
18
+ subject(:driver) { Selenium::WebDriver.for(:firefox) }
19
+ end
20
+ end
21
+
22
+ describe "Chrome driver", chrome: true do
23
+ it_behaves_like "a WebDriver that responds to #response_headers" do
24
+ subject(:driver) { Selenium::WebDriver.for(:chrome) }
25
+ end
26
+ end
27
+
28
+ describe "Safari driver", safari: true do
29
+ it_behaves_like "a WebDriver that responds to #response_headers" do
30
+ subject(:driver) { Selenium::WebDriver.for(:safari) }
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,18 @@
1
+ require "sinatra"
2
+
3
+ class TestApp < Sinatra::Base
4
+
5
+ get "/status_code/:code" do
6
+ status params[:code]
7
+ end
8
+
9
+ get "/response_headers" do
10
+ headers({
11
+ "Foo" => "Bar",
12
+ "Alpha" => "Beta",
13
+ "Gamma" => "1",
14
+ "Gamma" => "2"
15
+ })
16
+ end
17
+
18
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: selenium-emulated_features
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Dominic Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: selenium-webdriver
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.44'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.44.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.44'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.44.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.1'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.1.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.1'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.1.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: sinatra
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.4'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.4.5
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ 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
74
+ email: bauerdominic@gmail.com
75
+ executables: []
76
+ extensions: []
77
+ extra_rdoc_files: []
78
+ files:
79
+ - ".gitignore"
80
+ - ".rspec"
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - LICENSE.md
84
+ - README.md
85
+ - Rakefile
86
+ - lib/selenium/emulated_features.rb
87
+ - lib/selenium/emulated_features/response_code.rb
88
+ - lib/selenium/emulated_features/response_headers.rb
89
+ - selenium-emulated_features.gemspec
90
+ - spec/response_code_spec.rb
91
+ - spec/response_headers_spec.rb
92
+ - support/test_app.rb
93
+ homepage: https://github.com/bauerd/selenium-emulated_features
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: HTTP status code and response headers emulation for Selenium drivers
117
+ test_files:
118
+ - spec/response_code_spec.rb
119
+ - spec/response_headers_spec.rb
120
+ has_rdoc: