webdriver-user-agent 7.5 → 7.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9260c1a33a202278f16eadeb8c2e3e925e28896eccf6aaf778bc127460e4dbd2
4
- data.tar.gz: 70e9b164502d0c04e60c8391e8c6b8164ea6259846cecbe29212353cbf3d45cd
3
+ metadata.gz: 9589c34ef3fbb25e386f2c5b654f21564afe66a47c89dec46f78dff7cadb70e2
4
+ data.tar.gz: 44f41c6fabde58f65d1598813fe63ed659b5b430972b23fd9f08349251780f0a
5
5
  SHA512:
6
- metadata.gz: e81485d6bf53586daae8c220ce77a8795bf576744eb19e6f6a45951f2dfea4079faadbc86ef540a8a939af0d240c35d9b5c460a719d089453e40ee2102d74736
7
- data.tar.gz: 25524c3865c8a54ce01f3c62d46c214fa33b6f1475aea1f5321268ab5c003796f0d40a807efcd16e8198bef8b02f3cfbeffbcf909842cb12162c0f7997621297
6
+ metadata.gz: c07dacc751fdb9793a8d932d3fa11e468d2c10b940f52d0b3c9569fc3dec97b827012ae515ffc7c0c90b3b5d45ec76630cdd7464c14c3e7e8fde3d7fe921c1be
7
+ data.tar.gz: 8045ac3e0b908bb49609aa31ae7d00c7c98c5d8f8c59edfb8cfa92a1171df4906749255726c36446ab3e2e3f3e01013c10d1e9624968baab503ea917c610ef11
@@ -4,6 +4,9 @@ module Webdriver
4
4
  module UserAgent
5
5
 
6
6
  MINIMUM_MACOS_VERSION_NUMBER = 12
7
+ DEFAULT_BROWSER = :firefox
8
+ DEFAULT_AGENT = :iphone
9
+ DEFAULT_ORIENTATION = :portrait
7
10
 
8
11
  class BrowserOptions
9
12
 
@@ -16,7 +19,7 @@ module Webdriver
16
19
 
17
20
  options[:viewport_width], options[:viewport_height] = parse_viewport_sizes(options[:viewport_width], options[:viewport_height])
18
21
 
19
- initialize_for_browser(user_agent_string)
22
+ initialize_for_browser(user_agent_string, opts[:accept_language_string])
20
23
  end
21
24
 
22
25
  def method_missing(*args, &block)
@@ -27,7 +30,7 @@ module Webdriver
27
30
  end
28
31
 
29
32
  def browser_options
30
- options.except(:browser, :agent, :orientation, :user_agent_string, :viewport_width, :viewport_height)
33
+ options.except(:browser, :agent, :orientation, :user_agent_string, :accept_language_string, :viewport_width, :viewport_height, :safari_technology_preview)
31
34
  end
32
35
 
33
36
  private
@@ -41,19 +44,22 @@ module Webdriver
41
44
  @stp = false unless @stp.is_a?(TrueClass)
42
45
  end
43
46
 
44
- def initialize_for_browser(user_agent_string)
47
+ def initialize_for_browser(user_agent_string, accept_language_string)
45
48
  case options[:browser]
46
49
  when :firefox
47
50
  profile ||= Selenium::WebDriver::Firefox::Profile.new
48
51
  profile['general.useragent.override'] = user_agent_string
52
+ profile['intl.accept_languages'] = accept_language_string if accept_language_string
49
53
 
50
54
  options[:options] ||= Selenium::WebDriver::Firefox::Options.new
51
55
  options[:options].profile = profile
52
56
  when :chrome
53
57
  options[:options] ||= Selenium::WebDriver::Chrome::Options.new
54
58
  options[:options].add_argument "--user-agent=#{user_agent_string}"
59
+ options[:options].add_preference("intl.accept_languages", accept_language_string) if accept_language_string
55
60
  when :safari
56
61
  change_safari_user_agent_string(user_agent_string)
62
+ change_safari_language(accept_language_string) if accept_language_string
57
63
  options
58
64
  else
59
65
  raise "WebDriver UserAgent currently only supports :chrome, :firefox and :safari."
@@ -67,23 +73,48 @@ module Webdriver
67
73
  end
68
74
 
69
75
  def change_safari_user_agent_string(user_agent_string)
76
+ ua = "\"\\\"#{user_agent_string}\\\"\"" # escape for shell quoting
77
+
78
+ safari_command_runner(ua, "CustomUserAgent")
79
+ end
80
+
81
+ def change_safari_language(accept_language_string)
82
+ parsed_safari_string = prepare_safari_string(accept_language_string)
83
+
84
+ safari_command_runner(parsed_safari_string, "AppleLanguages")
85
+ end
86
+
87
+ def safari_command_runner(setting, pref)
70
88
  raise "Safari requires a Mac" unless OS.mac?
71
89
 
72
- ua = "\\\"#{user_agent_string}\\\"" # escape for shell quoting
90
+ cmd = "defaults write com.apple.#{safari_version} #{pref} #{setting}"
91
+
92
+ output = `#{cmd}`
93
+
94
+ raise prepare_safari_error_message(cmd, output) unless $?.success?
95
+ end
96
+
97
+ def safari_version
73
98
  if @stp
74
99
  Selenium::WebDriver::Safari.technology_preview!
75
- cmd = "defaults write com.apple.SafariTechnologyPreview CustomUserAgent \"#{ua}\""
76
- else
77
- cmd = "defaults write com.apple.Safari CustomUserAgent \"#{ua}\""
100
+ return "SafariTechnologyPreview"
78
101
  end
79
102
 
80
- output = `#{cmd}`
103
+ "Safari"
104
+ end
81
105
 
106
+ def prepare_safari_error_message(cmd, output)
82
107
  error_message = "Unable to execute '#{cmd}'. "
83
108
  error_message += "Error message reported: '#{output}'"
84
109
  error_message += "Please execute the command manually and correct any errors."
85
110
 
86
- raise error_message unless $?.success?
111
+ error_message
112
+ end
113
+
114
+ def prepare_safari_string(accept_language_string)
115
+ ["'(", accept_language_string.split(",").map{|l|
116
+ "\"#{l.gsub(/\s+/,'')}\""
117
+ }.join(", "), ")'"].join('')
87
118
  end
88
119
 
89
120
  # Require a Mac at version 12 (Sierra) or greater
@@ -3,14 +3,14 @@ require 'yaml'
3
3
  module Webdriver
4
4
  module UserAgent
5
5
  module Devices
6
-
6
+
7
7
  def devices
8
8
  YAML.load_file devices_file
9
9
  end
10
10
 
11
11
  def resolution_for(device_name, orientation, user_width, user_height)
12
12
  return [user_width.to_i, user_height.to_i] if ((user_width.to_i + user_height.to_i) > 1)
13
-
13
+
14
14
  device = devices[device_name.downcase][orientation.downcase]
15
15
  [device[:width],device[:height]]
16
16
  end
@@ -23,7 +23,7 @@ module Webdriver
23
23
  end
24
24
 
25
25
  private
26
-
26
+
27
27
  def random_user_agent
28
28
  File.foreach(user_agents_file).each_with_index.reduce(nil) do |picked,pair|
29
29
  rand < 1.0/(1+pair[1]) ? pair[0] : picked
@@ -20,8 +20,10 @@ module Webdriver
20
20
  case
21
21
  when opts[:safari_technology_preview].is_a?(TrueClass)
22
22
  `defaults delete com.apple.SafariTechnologyPreview CustomUserAgent`
23
+ `defaults delete com.apple.SafariTechnologyPreview AppleLanguages`
23
24
  else
24
25
  `defaults delete com.apple.Safari CustomUserAgent`
26
+ `defaults delete com.apple.Safari AppleLanguages`
25
27
  end
26
28
  end
27
29
  end
@@ -5,10 +5,11 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
5
  require 'webdriver-user-agent'
6
6
  require 'selenium-webdriver'
7
7
  require 'watir'
8
+ require 'webdrivers'
8
9
 
9
- CHROMEBROWSER_UICHROME_HEIGHT = 114
10
- CHROMEBROWSER_UICHROME_HEIGHT_TALL = 41
11
- CHROMEBROWSER_UI_MINIMUM_HEIGHT = 158
10
+ CHROMEBROWSER_UICHROME_HEIGHT = 123
11
+ CHROMEBROWSER_UICHROME_HEIGHT_TALL = 50
12
+ CHROMEBROWSER_UI_MINIMUM_HEIGHT = 149
12
13
  FIREFOXBROWSER_UICHROME_HEIGHT = 74
13
14
  SAFARIBROWSER_UICHROME_HEIGHT = 38
14
15
 
@@ -33,7 +34,7 @@ describe "webdriver user agent" do
33
34
 
34
35
  it "can create a new webdriver driver using safari and iphone 6 plus, and landscape" do
35
36
  @driver = Webdriver::UserAgent.driver(:browser => :safari, :agent => :iphone6plus, :orientation => :landscape)
36
- expect(@driver.browser).to eq(:safari)
37
+ expect("#{@driver.browser}").to match(/safari/i)
37
38
 
38
39
  expect(@driver.execute_script('return navigator.userAgent')).to include 'iPhone'
39
40
  expect(@driver.execute_script('return Math.max(document.documentElement.clientWidth, window.innerWidth || 0)')).to eq(736)
@@ -139,12 +140,36 @@ describe "webdriver user agent" do
139
140
  end
140
141
 
141
142
  it "can create a new webdriver driver using firefox and user-specified user agent" do
142
- @driver = Webdriver::UserAgent.driver(:user_agent_string => "Mozilla/4.0 (compatible; MSIE 5.5b1; Mac_PowerPC)")
143
- expect(@driver.browser).to eq(:firefox)
144
- expect(@driver.execute_script('return navigator.userAgent')).to include 'Mac_PowerPC'
143
+ @driver = Webdriver::UserAgent.driver(:user_agent_string => "Mozilla/4.0 (compatible; MSIE 5.5b1; Mac_PowerPC)")
144
+ expect(@driver.browser).to eq(:firefox)
145
+ expect(@driver.execute_script('return navigator.userAgent')).to include 'Mac_PowerPC'
145
146
 
146
- @browser = Watir::Browser.new @driver
147
- end
147
+ @browser = Watir::Browser.new @driver
148
+ end
149
+
150
+ it "can create a new webdriver driver using firefox and user-specified language" do
151
+ @driver = Webdriver::UserAgent.driver(accept_language_string: "es-ES, es-MX;q=0.9, es;q=0.5, *;0.4")
152
+ expect(@driver.browser).to eq(:firefox)
153
+ expect(@driver.execute_script('return navigator.language')).to include 'es-ES'
154
+
155
+ @browser = Watir::Browser.new @driver
156
+ end
157
+
158
+ it "can create a new webdriver driver using firefox and user-specified language" do
159
+ @driver = Webdriver::UserAgent.driver(browser: :chrome, accept_language_string: "es-ES, es-MX;q=0.9, es;q=0.5, *;0.4")
160
+ expect(@driver.browser).to eq(:chrome)
161
+ expect(@driver.execute_script('return navigator.language')).to include 'es-ES'
162
+
163
+ @browser = Watir::Browser.new @driver
164
+ end
165
+
166
+ it "can create a new webdriver driver using firefox and user-specified language" do
167
+ @driver = Webdriver::UserAgent.driver(browser: :safari, accept_language_string: "es-ES, es-MX;q=0.9, es;q=0.5, *;0.4", safari_technology_preview: true)
168
+ expect(@driver.browser).to match(/safari/i)
169
+ expect(@driver.execute_script('return navigator.language')).to include 'es-ES'
170
+
171
+ @browser = Watir::Browser.new @driver
172
+ end
148
173
 
149
174
  it "can create a new webdriver driver using firefox and user-specified viewport sizes (string or int)" do
150
175
  width = 800
@@ -153,7 +178,7 @@ describe "webdriver user agent" do
153
178
  @driver = Webdriver::UserAgent.driver(:viewport_width => "#{width}", :viewport_height => height, :agent => :iphone6)
154
179
  expect(@driver.execute_script('return Math.max(document.documentElement.clientWidth, window.innerWidth || 0)')).to eq(800)
155
180
  expect(@driver.execute_script('return Math.max(document.documentElement.clientHeight, window.innerHeight || 0)')).to eq(600 - FIREFOXBROWSER_UICHROME_HEIGHT)
156
- end
181
+ end
157
182
 
158
183
  it "can create a new webdriver driver, handling for nonsense height and widths" do
159
184
  @driver = Webdriver::UserAgent.driver(:viewport_width => "abc", :agent => :iphone8)
@@ -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.5"
15
+ gem.version = "7.6"
16
16
  gem.requirements << 'chromedriver, v2.20'
17
17
  # chromedriver v2.19 causes
18
18
  # Selenium::WebDriver::Error::NoSuchDriverError: no such session errors
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency 'psych'
24
24
  gem.add_development_dependency 'rspec'
25
25
  gem.add_development_dependency 'watir'
26
+ gem.add_development_dependency 'webdrivers'
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdriver-user-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: '7.5'
4
+ version: '7.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alister Scott
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-08-21 00:00:00.000000000 Z
14
+ date: 2019-02-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: selenium-webdriver
@@ -111,6 +111,20 @@ dependencies:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: webdrivers
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
114
128
  description: A helper gem to emulate populate device user agents and resolutions when
115
129
  using webdriver
116
130
  email: