selenium-emulated_features 2.0.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|