webdriver-user-agent 7.8 → 7.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/ChangeLog +20 -0
- data/README.md +7 -1
- data/lib/device-info/devices.yaml +130 -129
- data/lib/webdriver-user-agent/core_ext/hash.rb +32 -0
- data/lib/webdriver-user-agent/devices.rb +8 -3
- data/lib/webdriver-user-agent/driver.rb +0 -11
- data/lib/webdriver-user-agent.rb +1 -0
- data/spec/webdriver-user-agent_spec.rb +80 -33
- data/webdriver-user-agent.gemspec +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8f285c93bdc6daea5d101e3a61b973a82c9e25152ec14fbd90223ea382cd4ab
|
4
|
+
data.tar.gz: ff356f5cf939d1ea35ec8197ec9ccbc455c203458729da220016f7d861961b20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da7de1ce472978582caf214a2588dfe2b6248179076e221f7797a9fc218212bb4793682923ab42d3a229d5c8c9f9f1e002e0a18c823f5cd9f185923c73d33232
|
7
|
+
data.tar.gz: e191c01c8ed048d4b1812ebc78a45a0a6cab912848ea9c789a0b7a68f5481b5e51f66d4fe41c4388da590db7ccdf7a8b8d80f6947b562585efd15bbbd15a22ee
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-
|
1
|
+
ruby-3.1.2
|
data/ChangeLog
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
=== Version 7.9 / 2022-5-25
|
2
|
+
* Enhancements (Thanks samnissen)
|
3
|
+
* Fixed yaml load issues with latest psych gem (Thanks samnissen)
|
4
|
+
* Fixed a bug with Safari browser (Thanks samnissen)
|
5
|
+
* Updated to Ruby 3.1.2 (Thanks sandeepnagra)
|
6
|
+
|
7
|
+
=== Version 7.8 / 2020-7-10
|
8
|
+
* Enhancements (Thanks samnissen)
|
9
|
+
* Updated devices
|
10
|
+
* Fixed provided options and updated unit tests
|
11
|
+
|
12
|
+
=== Version 7.7 / 2020-7-10
|
13
|
+
* version yanked
|
14
|
+
|
15
|
+
=== Version 7.6 / 2019-2-11
|
16
|
+
* Enhancements (Thanks samnissen)
|
17
|
+
* Added support for setting browswer language
|
18
|
+
* Replaced deprecated selenium switches
|
19
|
+
* Allowed Safari browser and updated requirements to support it
|
20
|
+
|
1
21
|
=== Version 7.5 / 2017-8-22
|
2
22
|
* Enhancements
|
3
23
|
* Added support for modern iPhone and iPad sizes
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ provides a UserAgent.driver method to return a new web-driver with user agent an
|
|
25
25
|
* :browser
|
26
26
|
* :firefox (default)
|
27
27
|
* :chrome
|
28
|
-
|
28
|
+
* :safari
|
29
29
|
* :agent
|
30
30
|
* :iphone (default)
|
31
31
|
* :ipad
|
@@ -61,6 +61,12 @@ provides a UserAgent.driver method to return a new web-driver with user agent an
|
|
61
61
|
browser.goto 'tiffany.com'
|
62
62
|
browser.url.should == 'http://m.tiffany.com/International.aspx'
|
63
63
|
|
64
|
+
### A note on Safari
|
65
|
+
|
66
|
+
In our testing, it doesn't work well. Sometimes Safari Technology Preview works better, sometimes
|
67
|
+
only Safari works at all. And as of May 2021, our ability to write user agent strings
|
68
|
+
and languages for either flavor of Safari seems not to work on macOS Big Sur/Safari 14.
|
69
|
+
|
64
70
|
## Contributing
|
65
71
|
|
66
72
|
1. Fork it
|
@@ -13,161 +13,162 @@
|
|
13
13
|
# so these figures are necessarily larger than what will be true
|
14
14
|
# on those devices. Please feel free to submit a pull request
|
15
15
|
# with corrected and/or expanded device values.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
:
|
16
|
+
---
|
17
|
+
desktop:
|
18
|
+
user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15
|
19
|
+
portrait:
|
20
|
+
width: 768
|
21
|
+
height: 1024
|
22
|
+
landscape:
|
23
|
+
width: 1366
|
24
|
+
height: 768
|
25
|
+
iphone_default: &iphone_default
|
26
|
+
user_agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1
|
27
|
+
portrait:
|
28
|
+
width: 414
|
29
|
+
height: 719
|
30
|
+
landscape:
|
31
|
+
width: 808
|
32
|
+
height: 414
|
33
|
+
iphone: &iphone
|
33
34
|
<<: *iphone_default
|
34
|
-
|
35
|
+
iphone11pro:
|
35
36
|
<<: *iphone_default
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
portrait:
|
38
|
+
width: 375
|
39
|
+
height: 635
|
40
|
+
landscape:
|
41
|
+
width: 724
|
42
|
+
height: 375
|
43
|
+
iphone11promax:
|
43
44
|
<<: *iphone_default
|
44
|
-
|
45
|
+
iphone11:
|
45
46
|
<<: *iphone_default
|
46
|
-
|
47
|
+
iphonese: &iphonese
|
47
48
|
<<: *iphone_default
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
portrait:
|
50
|
+
width: 375
|
51
|
+
height: 553
|
52
|
+
landscape:
|
53
|
+
width: 667
|
54
|
+
height: 375
|
55
|
+
iphonexr: &iphonexr
|
55
56
|
<<: *iphone_default
|
56
|
-
|
57
|
+
iphonexsmax:
|
57
58
|
<<: *iphonexr
|
58
|
-
|
59
|
+
iphonexs: &iphonexs
|
59
60
|
<<: *iphone_default
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
portrait:
|
62
|
+
width: 375
|
63
|
+
height: 635
|
64
|
+
landscape:
|
65
|
+
width: 724
|
66
|
+
height: 375
|
67
|
+
iphonex:
|
67
68
|
<<: *iphonexs
|
68
|
-
|
69
|
+
iphone8plus: &iphone8plus
|
69
70
|
<<: *iphone_default
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
71
|
+
portrait:
|
72
|
+
width: 414
|
73
|
+
height: 622
|
74
|
+
landscape:
|
75
|
+
width: 736
|
76
|
+
height: 414
|
77
|
+
iphone8: &iphone8
|
77
78
|
<<: *iphonese
|
78
|
-
|
79
|
+
iphone7plus:
|
79
80
|
<<: *iphone8plus
|
80
|
-
|
81
|
+
iphone7:
|
81
82
|
<<: *iphone8
|
82
|
-
|
83
|
+
iphone6splus:
|
83
84
|
<<: *iphone8plus
|
84
|
-
|
85
|
+
iphone6s:
|
85
86
|
<<: *iphone8
|
86
|
-
|
87
|
+
iphone6plus:
|
87
88
|
<<: *iphone8plus
|
88
|
-
|
89
|
+
iphone6:
|
89
90
|
<<: *iphone8
|
90
|
-
|
91
|
+
iphone5s: &iphone5s
|
91
92
|
<<: *iphone_default
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
93
|
+
portrait:
|
94
|
+
width: 320
|
95
|
+
height: 454
|
96
|
+
landscape:
|
97
|
+
width: 568
|
98
|
+
height: 320
|
99
|
+
iphonese_old:
|
99
100
|
<<: *iphone5s
|
100
|
-
|
101
|
+
iphone5:
|
101
102
|
<<: *iphone5s
|
102
|
-
|
103
|
+
iphone4s: &iphone4s
|
103
104
|
<<: *iphone_default
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
105
|
+
portrait:
|
106
|
+
width: 320
|
107
|
+
height: 356
|
108
|
+
landscape:
|
109
|
+
width: 480
|
110
|
+
height: 196
|
111
|
+
iphone4:
|
111
112
|
<<: *iphone4s
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
113
|
+
ipad: &ipad
|
114
|
+
user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
|
115
|
+
portrait:
|
116
|
+
width: 810
|
117
|
+
height: 1010
|
118
|
+
landscape:
|
119
|
+
width: 1080
|
120
|
+
height: 740
|
121
|
+
ipad_default:
|
121
122
|
<<: *ipad
|
122
|
-
|
123
|
+
ipad_pro: &ipad_pro
|
123
124
|
<<: *ipad
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
125
|
+
portrait:
|
126
|
+
width: 1024
|
127
|
+
height: 1292
|
128
|
+
landscape:
|
129
|
+
width: 1366
|
130
|
+
height: 950
|
131
|
+
ipad_pro_12:
|
131
132
|
<<: *ipad_pro
|
132
|
-
|
133
|
+
ipad_pro_11:
|
133
134
|
<<: *ipad
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
portrait:
|
136
|
+
width: 834
|
137
|
+
height: 1120
|
138
|
+
landscape:
|
139
|
+
width: 1194
|
140
|
+
height: 760
|
141
|
+
ipad_pro_9:
|
141
142
|
<<: *ipad
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
143
|
+
portrait:
|
144
|
+
width: 768
|
145
|
+
height: 954
|
146
|
+
landscape:
|
147
|
+
width: 1024
|
148
|
+
height: 698
|
149
|
+
ipad_air: &ipad_air
|
149
150
|
<<: *ipad
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
151
|
+
portrait:
|
152
|
+
width: 834
|
153
|
+
height: 1038
|
154
|
+
landscape:
|
155
|
+
width: 1112
|
156
|
+
height: 760
|
157
|
+
ipad_pro_10:
|
157
158
|
<<: *ipad_air
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
159
|
+
android_phone:
|
160
|
+
user_agent: Mozilla/5.0 (Linux; Android 10; Pixel) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Mobile Safari/537.36
|
161
|
+
portrait:
|
162
|
+
width: 411
|
163
|
+
height: 869
|
164
|
+
landscape:
|
165
|
+
width: 869
|
166
|
+
height: 411
|
167
|
+
android_tablet:
|
168
|
+
user_agent: Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-T865) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/10.1 Chrome/71.0.3578.99 Safari/537.36
|
169
|
+
portrait:
|
170
|
+
width: 800
|
171
|
+
height: 1280
|
172
|
+
landscape:
|
173
|
+
width: 1280
|
174
|
+
height: 800
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Hash
|
2
|
+
DEEP_SYMBOLIZE_KEYS_SYMBOLS = [:deep_symbolize_keys, :deep_symbolize_keys!].freeze
|
3
|
+
|
4
|
+
def deep_copy
|
5
|
+
Marshal.load(Marshal.dump(self))
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(sym, *args)
|
9
|
+
super unless DEEP_SYMBOLIZE_KEYS_SYMBOLS.include?(sym)
|
10
|
+
|
11
|
+
self.send("alias_#{sym}")
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def alias_deep_symbolize_keys!
|
16
|
+
alias_hash_deep_symbolize_keys!(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def alias_deep_symbolize_keys
|
20
|
+
alias_hash_deep_symbolize_keys!(self.deep_copy)
|
21
|
+
end
|
22
|
+
|
23
|
+
def alias_hash_deep_symbolize_keys!(h)
|
24
|
+
h.keys.each do |k|
|
25
|
+
ks = k.respond_to?(:to_sym) ? k.to_sym : k
|
26
|
+
h[ks] = h.delete k
|
27
|
+
alias_hash_deep_symbolize_keys! h[ks] if h[ks].kind_of? Hash
|
28
|
+
end
|
29
|
+
|
30
|
+
h
|
31
|
+
end # https://stackoverflow.com/a/8379653/1651458
|
32
|
+
end
|
@@ -5,24 +5,29 @@ module Webdriver
|
|
5
5
|
module Devices
|
6
6
|
|
7
7
|
def devices
|
8
|
-
YAML.
|
8
|
+
string_hash = YAML.safe_load_file devices_file, aliases: true
|
9
|
+
JSON.parse(JSON[string_hash], symbolize_names: true)
|
9
10
|
end
|
10
11
|
|
11
12
|
def resolution_for(device_name, orientation, user_width, user_height)
|
12
13
|
return [user_width.to_i, user_height.to_i] if ((user_width.to_i + user_height.to_i) > 1)
|
13
14
|
|
14
|
-
device = devices[device_name
|
15
|
+
device = devices[keyify(device_name)][keyify(orientation)]
|
15
16
|
[device[:width],device[:height]]
|
16
17
|
end
|
17
18
|
|
18
19
|
def agent_string_for(device)
|
19
|
-
device = (device ? device
|
20
|
+
device = (device ? keyify(device) : :iphone)
|
20
21
|
user_agent_string = (device == :random ? random_user_agent : devices[device][:user_agent])
|
21
22
|
raise "Unsupported user agent: '#{device}'." unless user_agent_string
|
22
23
|
user_agent_string
|
23
24
|
end
|
24
25
|
|
25
26
|
private
|
27
|
+
|
28
|
+
def keyify(target)
|
29
|
+
target.downcase.to_sym
|
30
|
+
end
|
26
31
|
|
27
32
|
def random_user_agent
|
28
33
|
File.foreach(user_agents_file).each_with_index.reduce(nil) do |picked,pair|
|
@@ -15,17 +15,6 @@ module Webdriver
|
|
15
15
|
user_agent_string ||= agent_string_for opts[:agent]
|
16
16
|
options = BrowserOptions.new(opts, user_agent_string)
|
17
17
|
build_driver_using options
|
18
|
-
ensure
|
19
|
-
if safari?(opts)
|
20
|
-
case
|
21
|
-
when opts[:safari_technology_preview].is_a?(TrueClass)
|
22
|
-
`defaults delete com.apple.SafariTechnologyPreview CustomUserAgent`
|
23
|
-
`defaults delete com.apple.SafariTechnologyPreview AppleLanguages`
|
24
|
-
else
|
25
|
-
`defaults delete com.apple.Safari CustomUserAgent`
|
26
|
-
`defaults delete com.apple.Safari AppleLanguages`
|
27
|
-
end
|
28
|
-
end
|
29
18
|
end
|
30
19
|
|
31
20
|
private
|
data/lib/webdriver-user-agent.rb
CHANGED
@@ -7,12 +7,13 @@ require 'selenium-webdriver'
|
|
7
7
|
require 'watir'
|
8
8
|
require 'webdrivers'
|
9
9
|
|
10
|
-
CHROMEBROWSER_UICHROME_HEIGHT =
|
10
|
+
CHROMEBROWSER_UICHROME_HEIGHT = 124
|
11
11
|
CHROMEBROWSER_UICHROME_HEIGHT_TALL = 50
|
12
12
|
CHROMEBROWSER_UI_MINIMUM_HEIGHT = 289
|
13
|
-
FIREFOXBROWSER_UICHROME_HEIGHT =
|
13
|
+
FIREFOXBROWSER_UICHROME_HEIGHT = 85
|
14
14
|
FIREFOXBROWSER_MINIMUM_WIDTH = 450
|
15
15
|
SAFARIBROWSER_UICHROME_HEIGHT = 38
|
16
|
+
SIZE_FUDGE_FACTOR = 0.05
|
16
17
|
|
17
18
|
RSpec.shared_examples "browser driver" do
|
18
19
|
it "creates the browser driver" do
|
@@ -36,38 +37,44 @@ end
|
|
36
37
|
|
37
38
|
RSpec.shared_examples "firefox size" do
|
38
39
|
it "matches the expected width" do
|
39
|
-
width_expectation = device.dig(orientation, :width)
|
40
|
+
width_expectation = device.dig(orientation.downcase.to_sym, :width)
|
40
41
|
width_expectation = FIREFOXBROWSER_MINIMUM_WIDTH if width_expectation < FIREFOXBROWSER_MINIMUM_WIDTH
|
41
|
-
|
42
|
+
width_expectation_fudge = width_expectation.to_f * SIZE_FUDGE_FACTOR
|
43
|
+
expect(driver.execute_script(width_script)).to be_within(width_expectation_fudge).of(width_expectation)
|
42
44
|
end
|
43
45
|
|
44
46
|
it "matches the expected height" do
|
45
|
-
height_expectation = device.dig(orientation, :height) - FIREFOXBROWSER_UICHROME_HEIGHT
|
46
|
-
|
47
|
+
height_expectation = device.dig(orientation.downcase.to_sym, :height) - FIREFOXBROWSER_UICHROME_HEIGHT
|
48
|
+
height_expectation_fudge = height_expectation.to_f * SIZE_FUDGE_FACTOR
|
49
|
+
expect(driver.execute_script(height_script)).to be_within(height_expectation_fudge).of(height_expectation)
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
50
53
|
RSpec.shared_examples "safari size" do
|
51
54
|
it "matches the expected width" do
|
52
|
-
width_expectation = device.dig(orientation, :width)
|
53
|
-
|
55
|
+
width_expectation = device.dig(orientation.downcase.to_sym, :width)
|
56
|
+
width_expectation_fudge = width_expectation.to_f * SIZE_FUDGE_FACTOR
|
57
|
+
expect(driver.execute_script(width_script)).to be_within(width_expectation_fudge).of(width_expectation)
|
54
58
|
end
|
55
59
|
|
56
60
|
it "matches the expected height" do
|
57
|
-
height_expectation = device.dig(orientation, :height) - SAFARIBROWSER_UICHROME_HEIGHT
|
58
|
-
|
61
|
+
height_expectation = device.dig(orientation.downcase.to_sym, :height) - SAFARIBROWSER_UICHROME_HEIGHT
|
62
|
+
height_expectation_fudge = height_expectation.to_f * SIZE_FUDGE_FACTOR
|
63
|
+
expect(driver.execute_script(height_script)).to be_within(height_expectation_fudge).of(height_expectation)
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
62
67
|
RSpec.shared_examples "chrome size" do
|
63
68
|
it "matches the expected width" do
|
64
|
-
width_expectation = device.dig(orientation, :width)
|
65
|
-
|
69
|
+
width_expectation = device.dig(orientation.downcase.to_sym, :width)
|
70
|
+
width_expectation_fudge = width_expectation.to_f * SIZE_FUDGE_FACTOR
|
71
|
+
expect(driver.execute_script(width_script)).to be_within(width_expectation_fudge).of(width_expectation)
|
66
72
|
end
|
67
73
|
|
68
74
|
it "matches the expected height" do
|
69
|
-
height_expectation = device.dig(orientation, :height) - CHROMEBROWSER_UICHROME_HEIGHT
|
70
|
-
|
75
|
+
height_expectation = device.dig(orientation.downcase.to_sym, :height) - CHROMEBROWSER_UICHROME_HEIGHT
|
76
|
+
height_expectation_fudge = height_expectation.to_f * SIZE_FUDGE_FACTOR
|
77
|
+
expect(driver.execute_script(height_script)).to be_within(height_expectation_fudge).of(height_expectation)
|
71
78
|
end
|
72
79
|
end
|
73
80
|
|
@@ -78,8 +85,12 @@ describe "webdriver user agent" do
|
|
78
85
|
let(:height_script) { 'return Math.max(document.documentElement.clientHeight, window.innerHeight || 0)' }
|
79
86
|
|
80
87
|
after :each do
|
81
|
-
driver.quit if defined?(driver)
|
88
|
+
driver.quit if defined?(driver) rescue Selenium::WebDriver::Error::SessionNotCreatedError
|
82
89
|
browser.close if defined?(browser) && browser&.is_a?(Watir::Browser)
|
90
|
+
`defaults delete com.apple.SafariTechnologyPreview CustomUserAgent >/dev/null 2>/dev/null`
|
91
|
+
`defaults delete com.apple.SafariTechnologyPreview AppleLanguages >/dev/null 2>/dev/null`
|
92
|
+
`defaults delete com.apple.Safari CustomUserAgent >/dev/null 2>/dev/null`
|
93
|
+
`defaults delete com.apple.Safari AppleLanguages >/dev/null 2>/dev/null`
|
83
94
|
sleep(0.5) # Safari needs time to shutdown
|
84
95
|
end
|
85
96
|
|
@@ -88,7 +99,7 @@ describe "webdriver user agent" do
|
|
88
99
|
# browser widths and heights
|
89
100
|
# http://stackoverflow.com/a/8876069/1651458
|
90
101
|
|
91
|
-
context "
|
102
|
+
context "standard browser, agent or orientation set" do
|
92
103
|
let(:device) { devices[:iphone] }
|
93
104
|
let(:driver) { Webdriver::UserAgent.driver }
|
94
105
|
let(:browser) { "firefox" }
|
@@ -98,26 +109,62 @@ describe "webdriver user agent" do
|
|
98
109
|
it_behaves_like "browser driver"
|
99
110
|
it_behaves_like "firefox size"
|
100
111
|
end
|
112
|
+
|
113
|
+
context "device, browser, orientation, agent are all symbols" do
|
114
|
+
let(:device) { devices[:iphone] }
|
115
|
+
let(:device_key) { :iphone }
|
116
|
+
let(:browser) { :firefox }
|
117
|
+
let(:orientation) { :landscape }
|
118
|
+
let(:driver) { Webdriver::UserAgent.driver(
|
119
|
+
browser: browser,
|
120
|
+
agent: device_key,
|
121
|
+
orientation: orientation) }
|
122
|
+
let(:agent_match) { 'iPhone' }
|
123
|
+
|
124
|
+
it_behaves_like "browser driver"
|
125
|
+
it_behaves_like "firefox size"
|
126
|
+
end
|
127
|
+
|
128
|
+
context "browser is a symbol; device, orientation, agent are all strings" do
|
129
|
+
let(:device) { devices[:iphone] }
|
130
|
+
let(:device_key) { "iPhone" }
|
131
|
+
let(:browser) { :firefox }
|
132
|
+
let(:orientation) { "Portrait" }
|
133
|
+
let(:driver) { Webdriver::UserAgent.driver(
|
134
|
+
browser: browser,
|
135
|
+
agent: device_key,
|
136
|
+
orientation: orientation) }
|
137
|
+
let(:agent_match) { 'iPhone' }
|
138
|
+
|
139
|
+
it_behaves_like "browser driver"
|
140
|
+
it_behaves_like "firefox size"
|
141
|
+
end
|
101
142
|
|
102
143
|
context "Safari browser, iPhone 11 Pro Max agent, landscape orientation" do
|
103
144
|
let(:device) { devices[:iphone11promax] }
|
104
145
|
let(:orientation) { :landscape }
|
105
146
|
let(:driver) do
|
106
|
-
#
|
107
|
-
# Safari
|
147
|
+
# --- On Safari ---
|
148
|
+
# Safari is a mess. We do our best to test it, but
|
149
|
+
# it is too unreliable. The gem will still try to provide
|
150
|
+
# these features for the time being.
|
151
|
+
# If you are a subject matter expert, please
|
152
|
+
# get in touch. - Sam
|
108
153
|
|
109
154
|
Webdriver::UserAgent.driver(
|
110
155
|
browser: :safari,
|
111
156
|
agent: :iphone11promax,
|
112
|
-
orientation: orientation
|
113
|
-
safari_technology_preview: true
|
157
|
+
orientation: orientation
|
114
158
|
)
|
115
159
|
end
|
116
160
|
let(:browser) { "safari" }
|
117
161
|
let(:orientation) { :landscape }
|
118
162
|
let(:agent_match) { 'iPhone' }
|
119
163
|
|
120
|
-
it_behaves_like "browser driver"
|
164
|
+
# pending("a stable, documented way to programmatically change Safari details") { it_behaves_like "browser driver" }
|
165
|
+
# But there doesn't seem to be any way for RSpec to handle the above?
|
166
|
+
# `it_behaves_like` isn't available inside `pending`, but `pending` isn't available at
|
167
|
+
# the `context` level.
|
121
168
|
it_behaves_like "safari size"
|
122
169
|
end
|
123
170
|
|
@@ -125,20 +172,19 @@ describe "webdriver user agent" do
|
|
125
172
|
let(:device) { devices[:iphone6plus] }
|
126
173
|
let(:orientation) { :landscape }
|
127
174
|
let(:driver) do
|
128
|
-
# Safari is a mess. safari_technology_preview added because
|
129
|
-
# Safari just isn't working in my environment as of 13.1 - Sam
|
130
|
-
|
131
175
|
Webdriver::UserAgent.driver(
|
132
176
|
browser: :safari,
|
133
177
|
agent: :iphone6plus,
|
134
|
-
orientation: orientation
|
135
|
-
safari_technology_preview: true
|
178
|
+
orientation: orientation
|
136
179
|
)
|
137
180
|
end
|
138
181
|
let(:browser) { "safari" }
|
139
182
|
let(:agent_match) { 'iPhone' }
|
140
|
-
|
141
|
-
it_behaves_like "browser driver"
|
183
|
+
|
184
|
+
# pending("a stable, documented way to programmatically change Safari details") { it_behaves_like "browser driver" }
|
185
|
+
# But there doesn't seem to be any way for RSpec to handle the above?
|
186
|
+
# `it_behaves_like` isn't available inside `pending`, but `pending` isn't available at
|
187
|
+
# the `context` level.
|
142
188
|
it_behaves_like "safari size"
|
143
189
|
end
|
144
190
|
|
@@ -161,7 +207,7 @@ describe "webdriver user agent" do
|
|
161
207
|
end
|
162
208
|
|
163
209
|
context "Chrome browser, iPhone XS agent, landscape orientation" do
|
164
|
-
let(:device_key) { :
|
210
|
+
let(:device_key) { :iphone6 }
|
165
211
|
let(:device) { devices[device_key] }
|
166
212
|
let(:orientation) { :landscape }
|
167
213
|
let(:driver) do
|
@@ -204,7 +250,7 @@ describe "webdriver user agent" do
|
|
204
250
|
end
|
205
251
|
|
206
252
|
context "Chrome browser, Android tablet agent, landscape orientation" do
|
207
|
-
let(:device_key) { :
|
253
|
+
let(:device_key) { :android_phone }
|
208
254
|
let(:device) { devices[device_key] }
|
209
255
|
let(:orientation) { :landscape }
|
210
256
|
let(:driver) do
|
@@ -310,14 +356,15 @@ describe "webdriver user agent" do
|
|
310
356
|
let(:driver) {
|
311
357
|
Webdriver::UserAgent.driver(
|
312
358
|
browser: browser,
|
313
|
-
accept_language_string: language
|
314
|
-
safari_technology_preview: true
|
359
|
+
accept_language_string: language
|
315
360
|
)
|
316
361
|
}
|
317
362
|
|
318
363
|
it "can create a new webdriver driver" do
|
319
364
|
expect("#{driver.browser}").to match(/#{Regexp.quote(browser.to_s)}/i)
|
320
|
-
|
365
|
+
end
|
366
|
+
|
367
|
+
pending("a stable, documented way to programmatically change Safari details") do
|
321
368
|
expect(driver.execute_script("return (navigator.language || navigator.userLanguage)")).to include("es-es")
|
322
369
|
end
|
323
370
|
end
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
13
|
gem.name = "webdriver-user-agent"
|
14
14
|
gem.require_paths = ["lib"]
|
15
|
-
gem.version = "7.
|
15
|
+
gem.version = "7.9"
|
16
16
|
gem.requirements << 'chromedriver, v2.20'
|
17
17
|
# chromedriver v2.19 causes
|
18
18
|
# Selenium::WebDriver::Error::NoSuchDriverError: no such session errors
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webdriver-user-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '7.
|
4
|
+
version: '7.9'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alister Scott
|
8
8
|
- Jeff Morgan
|
9
9
|
- Sandeep Singh
|
10
10
|
- Sam Nissen
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2022-05-25 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: selenium-webdriver
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/device-info/user_agents.txt
|
151
151
|
- lib/webdriver-user-agent.rb
|
152
152
|
- lib/webdriver-user-agent/browser_options.rb
|
153
|
+
- lib/webdriver-user-agent/core_ext/hash.rb
|
153
154
|
- lib/webdriver-user-agent/core_ext/symbol.rb
|
154
155
|
- lib/webdriver-user-agent/devices.rb
|
155
156
|
- lib/webdriver-user-agent/driver.rb
|
@@ -158,7 +159,7 @@ files:
|
|
158
159
|
homepage: https://github.com/alisterscott/webdriver-user-agent
|
159
160
|
licenses: []
|
160
161
|
metadata: {}
|
161
|
-
post_install_message:
|
162
|
+
post_install_message:
|
162
163
|
rdoc_options: []
|
163
164
|
require_paths:
|
164
165
|
- lib
|
@@ -174,8 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
175
|
version: '0'
|
175
176
|
requirements:
|
176
177
|
- chromedriver, v2.20
|
177
|
-
rubygems_version: 3.
|
178
|
-
signing_key:
|
178
|
+
rubygems_version: 3.3.7
|
179
|
+
signing_key:
|
179
180
|
specification_version: 4
|
180
181
|
summary: A helper gem to emulate populate device user agents and resolutions when
|
181
182
|
using webdriver
|