selenium-emulated_features 2.0.1 → 3.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 +4 -4
- data/Gemfile.lock +6 -8
- data/README.md +13 -17
- data/lib/selenium/emulated_features.rb +1 -7
- data/lib/selenium/emulated_features/response_code.rb +14 -33
- data/lib/selenium/emulated_features/response_headers.rb +14 -32
- data/selenium-emulated_features.gemspec +1 -1
- data/spec/response_code_spec.rb +0 -30
- data/spec/response_headers_spec.rb +0 -29
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef19fa900178d7666dc5d52df3ecc90186a8f10b
|
4
|
+
data.tar.gz: 8714840b86268008cbb4bb72be7ccdcb72489c03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99d0b8b457066eac833610b54d066cd94b6016904e77800faab76e1222647a0e72bd26530fbcfa8bb03849e18f1d72c1bc08669d4018d5a26809d52aba513d49
|
7
|
+
data.tar.gz: dc5eb77e6b255e5322ba16d7fa622b4fb34761cd996cb72eb04bf99d662b408bd597ea7759a5077efc0761b128148154ab2f8d8405003dbd11b8d3e48bc0f62b
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
selenium-emulated_features (
|
4
|
+
selenium-emulated_features (3.0.0)
|
5
5
|
selenium-webdriver (~> 3.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
childprocess (0.
|
10
|
+
childprocess (0.7.0)
|
11
11
|
ffi (~> 1.0, >= 1.0.11)
|
12
12
|
diff-lcs (1.2.5)
|
13
|
-
ffi (1.9.
|
13
|
+
ffi (1.9.18)
|
14
14
|
rack (1.6.0)
|
15
15
|
rack-protection (1.5.3)
|
16
16
|
rack
|
@@ -27,17 +27,15 @@ GEM
|
|
27
27
|
diff-lcs (>= 1.2.0, < 2.0)
|
28
28
|
rspec-support (~> 3.2.0)
|
29
29
|
rspec-support (3.2.1)
|
30
|
-
rubyzip (1.2.
|
31
|
-
selenium-webdriver (3.
|
30
|
+
rubyzip (1.2.1)
|
31
|
+
selenium-webdriver (3.4.3)
|
32
32
|
childprocess (~> 0.5)
|
33
33
|
rubyzip (~> 1.0)
|
34
|
-
websocket (~> 1.0)
|
35
34
|
sinatra (1.4.5)
|
36
35
|
rack (~> 1.4)
|
37
36
|
rack-protection (~> 1.4)
|
38
37
|
tilt (~> 1.3, >= 1.3.4)
|
39
38
|
tilt (1.4.1)
|
40
|
-
websocket (1.2.3)
|
41
39
|
|
42
40
|
PLATFORMS
|
43
41
|
ruby
|
@@ -48,4 +46,4 @@ DEPENDENCIES
|
|
48
46
|
sinatra (~> 1.4)
|
49
47
|
|
50
48
|
BUNDLED WITH
|
51
|
-
1.
|
49
|
+
1.14.6
|
data/README.md
CHANGED
@@ -1,11 +1,22 @@
|
|
1
1
|
# selenium-emulated_features
|
2
2
|
Adds HTTP status code and response headers emulation to Selenium drivers.
|
3
3
|
|
4
|
+
Latest release tested on OS X 10.12.3 with:
|
5
|
+
|
6
|
+
| Browser | Driver |
|
7
|
+
| ------------------- |:------------------------:|
|
8
|
+
| Chrome 60.0.3112.40 | ChromeDriver 2.30.477690 |
|
9
|
+
| Safari 10.0.3 | built-in safaridriver |
|
10
|
+
| Firefox 54.0 | -- |
|
11
|
+
| PhantomJS 2.2.1 | -- |
|
12
|
+
|
13
|
+
__Note:__ Ensure _Develop > Allow Remote Automation_ is enabled in Safari!
|
14
|
+
|
4
15
|
## Installation
|
5
16
|
Install with Bundler by adding the following line to your `Gemfile`:
|
6
17
|
|
7
18
|
```
|
8
|
-
gem "selenium-emulated_features", "~>
|
19
|
+
gem "selenium-emulated_features", "~> 3.0"
|
9
20
|
```
|
10
21
|
Or install via RubyGems:
|
11
22
|
|
@@ -25,19 +36,4 @@ driver.response_code # => 404
|
|
25
36
|
driver.response_headers # => {...}
|
26
37
|
```
|
27
38
|
|
28
|
-
`nil` is returned if the URI is not reachable or an error occurs
|
29
|
-
|
30
|
-
```ruby
|
31
|
-
driver.navigate.to("https://example.foobar")
|
32
|
-
|
33
|
-
driver.response_code # => nil
|
34
|
-
driver.response_headers # => nil
|
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
|
-
```
|
39
|
+
`nil` is returned if the URI is not reachable or an error occurs.
|
@@ -2,52 +2,33 @@ module Selenium
|
|
2
2
|
module EmulatedFeatures
|
3
3
|
module ResponseCode
|
4
4
|
def response_code
|
5
|
-
|
6
|
-
if(document.
|
7
|
-
return document.
|
5
|
+
execute_script <<-js
|
6
|
+
if(document.__SEF__ && document.__SEF__.request) {
|
7
|
+
return document.__SEF__.request.status;
|
8
8
|
}
|
9
9
|
|
10
10
|
var baseURI = document.baseURI;
|
11
11
|
|
12
12
|
/* Firefox */
|
13
|
-
if(/about:neterror/.test(baseURI))
|
14
|
-
return null;
|
15
|
-
}
|
13
|
+
if (/about:neterror/.test(baseURI)) return null;
|
16
14
|
|
17
15
|
/* Safari */
|
18
|
-
if(/Safari.app/.test(baseURI))
|
19
|
-
return null;
|
20
|
-
}
|
16
|
+
if (/Safari.app/.test(baseURI)) return null;
|
21
17
|
|
22
18
|
/* Chrome */
|
23
|
-
if(/chromewebdata/.test(baseURI))
|
24
|
-
return null;
|
25
|
-
}
|
19
|
+
if (/chromewebdata/.test(baseURI)) return null;
|
26
20
|
|
27
|
-
document.
|
28
|
-
document.
|
21
|
+
document.__SEF__ = {}
|
22
|
+
document.__SEF__.request = new XMLHttpRequest();
|
29
23
|
|
30
|
-
document.
|
31
|
-
document.
|
32
|
-
return document.
|
24
|
+
document.__SEF__.request.open("GET", document.location, false);
|
25
|
+
document.__SEF__.request.send(null);
|
26
|
+
return document.__SEF__.request.status;
|
33
27
|
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
|
50
28
|
end
|
29
|
+
|
30
|
+
rescue
|
31
|
+
nil
|
51
32
|
end
|
52
33
|
end
|
53
34
|
end
|
@@ -3,57 +3,39 @@ module Selenium
|
|
3
3
|
module ResponseHeaders
|
4
4
|
def response_headers
|
5
5
|
dom_str = execute_script <<-js
|
6
|
-
if(document.
|
7
|
-
return document.
|
6
|
+
if(document.__SEF__ && document.__SEF__.request) {
|
7
|
+
return document.__SEF__.request.getAllResponseHeaders();
|
8
8
|
}
|
9
9
|
|
10
10
|
var baseURI = document.baseURI;
|
11
11
|
|
12
12
|
/* Firefox */
|
13
|
-
if(/about:neterror/.test(baseURI))
|
14
|
-
return null;
|
15
|
-
}
|
13
|
+
if (/about:neterror/.test(baseURI)) return null;
|
16
14
|
|
17
15
|
/* Safari */
|
18
|
-
if(/Safari.app/.test(baseURI))
|
19
|
-
return null;
|
20
|
-
}
|
16
|
+
if (/Safari.app/.test(baseURI)) return null;
|
21
17
|
|
22
18
|
/* Chrome */
|
23
|
-
if(/chromewebdata/.test(baseURI))
|
24
|
-
return null;
|
25
|
-
}
|
19
|
+
if (/chromewebdata/.test(baseURI)) return null;
|
26
20
|
|
27
|
-
document.
|
28
|
-
document.
|
21
|
+
document.__SEF__ = {};
|
22
|
+
document.__SEF__.request = new XMLHttpRequest();
|
29
23
|
|
30
|
-
document.
|
31
|
-
document.
|
32
|
-
return document.
|
24
|
+
document.__SEF__.request.open("GET", document.location, false);
|
25
|
+
document.__SEF__.request.send(null);
|
26
|
+
return document.__SEF__.request.getAllResponseHeaders();
|
33
27
|
js
|
34
28
|
|
35
|
-
|
36
|
-
if Selenium::EmulatedFeatures.raise_exceptions
|
37
|
-
raise Selenium::EmulatedFeatures::Error
|
38
|
-
else
|
39
|
-
return nil
|
40
|
-
end
|
41
|
-
end
|
29
|
+
return nil unless dom_str
|
42
30
|
|
43
31
|
dom_str.split("\n").inject({}) do |headers, line|
|
44
32
|
field, value = line.split(": ")
|
45
33
|
headers.merge({ field.downcase => [value.strip] })
|
46
34
|
end
|
47
35
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
if Selenium::EmulatedFeatures.raise_exceptions
|
52
|
-
raise Selenium::EmulatedFeatures::Error
|
53
|
-
else
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
end
|
36
|
+
rescue
|
37
|
+
nil
|
38
|
+
end
|
57
39
|
end
|
58
40
|
end
|
59
41
|
end
|
data/spec/response_code_spec.rb
CHANGED
@@ -2,7 +2,6 @@ require "selenium-webdriver"
|
|
2
2
|
require "selenium/emulated_features"
|
3
3
|
|
4
4
|
describe Selenium::EmulatedFeatures::ResponseCode do
|
5
|
-
|
6
5
|
shared_examples "a WebDriver that responds to #response_code" do
|
7
6
|
after { driver.quit }
|
8
7
|
|
@@ -18,35 +17,6 @@ describe Selenium::EmulatedFeatures::ResponseCode do
|
|
18
17
|
driver.navigate.to "http://0.0.0.0:9876/status_code/418"
|
19
18
|
expect(driver.response_code).to be 418
|
20
19
|
end
|
21
|
-
|
22
|
-
context "when server is unreachable" do
|
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
|
29
|
-
|
30
|
-
it "still works for successive requests" do
|
31
|
-
driver.navigate.to "http://example.foobar"
|
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
|
48
|
-
end
|
49
|
-
end
|
50
20
|
end
|
51
21
|
|
52
22
|
describe "Firefox driver", firefox: true do
|
@@ -2,7 +2,6 @@ require "selenium-webdriver"
|
|
2
2
|
require "selenium/emulated_features"
|
3
3
|
|
4
4
|
describe Selenium::EmulatedFeatures::ResponseHeaders do
|
5
|
-
|
6
5
|
shared_examples "a WebDriver that responds to #response_headers" do
|
7
6
|
after { driver.quit }
|
8
7
|
|
@@ -21,34 +20,6 @@ describe Selenium::EmulatedFeatures::ResponseHeaders do
|
|
21
20
|
|
22
21
|
expect(headers_a).not_to eq headers_b
|
23
22
|
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
|
51
|
-
end
|
52
23
|
end
|
53
24
|
|
54
25
|
describe "Firefox driver", firefox: true do
|
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:
|
4
|
+
version: 3.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:
|
11
|
+
date: 2017-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -99,4 +99,3 @@ summary: Adds HTTP status code and response headers emulation to Selenium driver
|
|
99
99
|
test_files:
|
100
100
|
- spec/response_code_spec.rb
|
101
101
|
- spec/response_headers_spec.rb
|
102
|
-
has_rdoc:
|