selenium-webdriver 3.0.0.beta4.0 → 4.0.0.alpha5

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.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +679 -0
  3. data/Gemfile +2 -0
  4. data/LICENSE +1 -1
  5. data/README.md +1 -1
  6. data/lib/selenium-webdriver.rb +2 -2
  7. data/lib/selenium/server.rb +23 -16
  8. data/lib/selenium/webdriver.rb +43 -25
  9. data/lib/selenium/webdriver/atoms.rb +20 -1
  10. data/lib/selenium/webdriver/atoms/findElements.js +122 -0
  11. data/lib/selenium/webdriver/atoms/getAttribute.js +84 -11
  12. data/lib/selenium/webdriver/atoms/isDisplayed.js +100 -0
  13. data/lib/selenium/webdriver/chrome.rb +15 -20
  14. data/lib/selenium/webdriver/chrome/bridge.rb +29 -66
  15. data/lib/selenium/webdriver/{edge/service.rb → chrome/driver.rb} +19 -22
  16. data/lib/selenium/webdriver/chrome/options.rb +221 -0
  17. data/lib/selenium/webdriver/chrome/profile.rb +6 -7
  18. data/lib/selenium/webdriver/chrome/service.rb +20 -20
  19. data/lib/selenium/webdriver/common.rb +19 -11
  20. data/lib/selenium/webdriver/common/action_builder.rb +98 -246
  21. data/lib/selenium/webdriver/common/alert.rb +2 -7
  22. data/lib/selenium/webdriver/common/driver.rb +89 -51
  23. data/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +45 -0
  24. data/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +50 -0
  25. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_debugger.rb} +12 -25
  26. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +38 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +3 -5
  28. data/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +51 -0
  29. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +3 -3
  30. data/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +51 -0
  31. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +2 -2
  32. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +2 -2
  33. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +2 -2
  34. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -4
  35. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +9 -3
  36. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +3 -5
  37. data/lib/selenium/webdriver/common/element.rb +32 -10
  38. data/lib/selenium/webdriver/common/error.rb +103 -121
  39. data/lib/selenium/webdriver/common/file_reaper.rb +3 -5
  40. data/lib/selenium/webdriver/common/html5/local_storage.rb +2 -2
  41. data/lib/selenium/webdriver/common/html5/session_storage.rb +2 -2
  42. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +3 -2
  43. data/lib/selenium/webdriver/common/interactions/input_device.rb +54 -0
  44. data/lib/selenium/webdriver/common/interactions/interaction.rb +53 -0
  45. data/lib/selenium/webdriver/{phantomjs.rb → common/interactions/interactions.rb} +17 -20
  46. data/lib/selenium/webdriver/common/interactions/key_actions.rb +145 -0
  47. data/lib/selenium/webdriver/common/interactions/key_input.rb +66 -0
  48. data/lib/selenium/webdriver/common/interactions/none_input.rb +36 -0
  49. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +363 -0
  50. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +139 -0
  51. data/lib/selenium/webdriver/common/keys.rb +37 -15
  52. data/lib/selenium/webdriver/common/log_entry.rb +4 -4
  53. data/lib/selenium/webdriver/common/logger.rb +147 -0
  54. data/lib/selenium/webdriver/common/logs.rb +2 -2
  55. data/lib/selenium/webdriver/common/manager.rb +177 -0
  56. data/lib/selenium/webdriver/common/navigation.rb +2 -2
  57. data/lib/selenium/webdriver/common/options.rb +47 -105
  58. data/lib/selenium/webdriver/common/platform.rb +44 -38
  59. data/lib/selenium/webdriver/common/port_prober.rb +8 -19
  60. data/lib/selenium/webdriver/common/profile_helper.rb +13 -5
  61. data/lib/selenium/webdriver/common/proxy.rb +14 -8
  62. data/lib/selenium/webdriver/common/search_context.rb +16 -20
  63. data/lib/selenium/webdriver/common/service.rb +115 -30
  64. data/lib/selenium/webdriver/common/socket_lock.rb +12 -7
  65. data/lib/selenium/webdriver/common/socket_poller.rb +29 -22
  66. data/lib/selenium/webdriver/common/target_locator.rb +6 -6
  67. data/lib/selenium/webdriver/common/timeouts.rb +2 -2
  68. data/lib/selenium/webdriver/common/wait.rb +14 -8
  69. data/lib/selenium/webdriver/common/window.rb +38 -2
  70. data/lib/selenium/webdriver/common/zipper.rb +3 -5
  71. data/lib/selenium/webdriver/edge.rb +33 -20
  72. data/lib/selenium/webdriver/edge_chrome/bridge.rb +30 -0
  73. data/lib/selenium/webdriver/edge_chrome/driver.rb +38 -0
  74. data/lib/selenium/webdriver/{common/driver_extensions/has_touch_screen.rb → edge_chrome/options.rb} +10 -12
  75. data/lib/selenium/webdriver/edge_chrome/profile.rb +33 -0
  76. data/lib/selenium/webdriver/edge_chrome/service.rb +36 -0
  77. data/lib/selenium/webdriver/edge_html/driver.rb +39 -0
  78. data/lib/selenium/webdriver/edge_html/options.rb +91 -0
  79. data/lib/selenium/webdriver/edge_html/service.rb +47 -0
  80. data/lib/selenium/webdriver/firefox.rb +24 -29
  81. data/lib/selenium/webdriver/firefox/bridge.rb +15 -39
  82. data/lib/selenium/webdriver/firefox/{util.rb → driver.rb} +13 -19
  83. data/lib/selenium/webdriver/firefox/extension.rb +28 -8
  84. data/lib/selenium/webdriver/firefox/options.rb +162 -0
  85. data/lib/selenium/webdriver/firefox/profile.rb +23 -82
  86. data/lib/selenium/webdriver/firefox/profiles_ini.rb +5 -5
  87. data/lib/selenium/webdriver/firefox/service.rb +18 -37
  88. data/lib/selenium/webdriver/ie.rb +13 -19
  89. data/lib/selenium/webdriver/ie/driver.rb +40 -0
  90. data/lib/selenium/webdriver/ie/options.rb +118 -0
  91. data/lib/selenium/webdriver/ie/service.rb +20 -20
  92. data/lib/selenium/webdriver/remote.rb +15 -17
  93. data/lib/selenium/webdriver/remote/bridge.rb +281 -300
  94. data/lib/selenium/webdriver/remote/capabilities.rb +102 -83
  95. data/lib/selenium/webdriver/remote/commands.rb +132 -192
  96. data/lib/selenium/webdriver/remote/driver.rb +52 -0
  97. data/lib/selenium/webdriver/remote/http/common.rb +23 -13
  98. data/lib/selenium/webdriver/remote/http/curb.rb +10 -7
  99. data/lib/selenium/webdriver/remote/http/default.rb +52 -32
  100. data/lib/selenium/webdriver/remote/http/persistent.rb +8 -4
  101. data/lib/selenium/webdriver/remote/response.rb +32 -35
  102. data/lib/selenium/webdriver/remote/server_error.rb +2 -2
  103. data/lib/selenium/webdriver/safari.rb +24 -22
  104. data/lib/selenium/webdriver/safari/bridge.rb +21 -21
  105. data/lib/selenium/webdriver/safari/driver.rb +41 -0
  106. data/lib/selenium/webdriver/safari/options.rb +66 -0
  107. data/lib/selenium/webdriver/safari/service.rb +8 -24
  108. data/lib/selenium/webdriver/support.rb +3 -2
  109. data/lib/selenium/webdriver/support/abstract_event_listener.rb +2 -2
  110. data/lib/selenium/webdriver/support/block_event_listener.rb +3 -3
  111. data/lib/selenium/webdriver/support/color.rb +13 -13
  112. data/lib/selenium/webdriver/support/escaper.rb +2 -2
  113. data/lib/selenium/webdriver/support/event_firing_bridge.rb +4 -4
  114. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  115. data/lib/selenium/webdriver/support/select.rb +20 -21
  116. data/lib/selenium/webdriver/version.rb +24 -0
  117. data/selenium-webdriver.gemspec +31 -17
  118. metadata +331 -248
  119. data/lib/selenium/webdriver/common/bridge_helper.rb +0 -82
  120. data/lib/selenium/webdriver/common/keyboard.rb +0 -69
  121. data/lib/selenium/webdriver/common/mouse.rb +0 -88
  122. data/lib/selenium/webdriver/common/touch_action_builder.rb +0 -81
  123. data/lib/selenium/webdriver/common/touch_screen.rb +0 -121
  124. data/lib/selenium/webdriver/common/w3c_error.rb +0 -191
  125. data/lib/selenium/webdriver/edge/bridge.rb +0 -76
  126. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  127. data/lib/selenium/webdriver/firefox/binary.rb +0 -186
  128. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
  129. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  130. data/lib/selenium/webdriver/firefox/launcher.rb +0 -114
  131. data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
  132. data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
  133. data/lib/selenium/webdriver/firefox/w3c_bridge.rb +0 -79
  134. data/lib/selenium/webdriver/ie/bridge.rb +0 -76
  135. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -65
  136. data/lib/selenium/webdriver/phantomjs/service.rb +0 -66
  137. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -682
  138. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -228
  139. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -135
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -25,12 +25,10 @@ module Selenium
25
25
  #
26
26
 
27
27
  class Extension
28
- NAMESPACE = 'http://www.mozilla.org/2004/em-rdf#'.freeze
28
+ NAMESPACE = 'http://www.mozilla.org/2004/em-rdf#'
29
29
 
30
30
  def initialize(path)
31
- unless File.exist?(path)
32
- raise Error::WebDriverError, "could not find extension at #{path.inspect}"
33
- end
31
+ raise Error::WebDriverError, "could not find extension at #{path.inspect}" unless File.exist?(path)
34
32
 
35
33
  @path = path
36
34
  @should_reap_root = false
@@ -38,10 +36,10 @@ module Selenium
38
36
 
39
37
  def write_to(extensions_dir)
40
38
  root_dir = create_root
41
- ext_path = File.join extensions_dir, read_id_from_install_rdf(root_dir)
39
+ ext_path = File.join extensions_dir, read_id(root_dir)
42
40
 
43
41
  FileUtils.rm_rf ext_path
44
- FileUtils.mkdir_p File.dirname(ext_path), mode: 0700
42
+ FileUtils.mkdir_p File.dirname(ext_path), mode: 0o700
45
43
  FileUtils.cp_r root_dir, ext_path
46
44
 
47
45
  FileReaper.reap(root_dir) if @should_reap_root
@@ -62,8 +60,14 @@ module Selenium
62
60
  end
63
61
  end
64
62
 
63
+ def read_id(directory)
64
+ read_id_from_install_rdf(directory) || read_id_from_manifest_json(directory)
65
+ end
66
+
65
67
  def read_id_from_install_rdf(directory)
66
68
  rdf_path = File.join(directory, 'install.rdf')
69
+ return unless File.exist?(rdf_path)
70
+
67
71
  doc = REXML::Document.new(File.read(rdf_path))
68
72
  namespace = doc.root.namespaces.key(NAMESPACE)
69
73
 
@@ -77,6 +81,22 @@ module Selenium
77
81
 
78
82
  raise Error::WebDriverError, "cannot locate extension id in #{rdf_path}"
79
83
  end
84
+
85
+ def read_id_from_manifest_json(directory)
86
+ manifest_path = File.join(directory, 'manifest.json')
87
+ return unless File.exist?(manifest_path)
88
+
89
+ manifest = JSON.parse(File.read(manifest_path))
90
+ applications_gecko_id(manifest) || name_and_version(manifest)
91
+ end
92
+
93
+ def applications_gecko_id(manifest)
94
+ manifest.dig('applications', 'gecko', 'id')&.strip
95
+ end
96
+
97
+ def name_and_version(manifest)
98
+ [manifest['name'].delete(' '), manifest['version']].join('@')
99
+ end
80
100
  end # Extension
81
101
  end # Firefox
82
102
  end # WebDriver
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ module Selenium
21
+ module WebDriver
22
+ module Firefox
23
+ class Options < WebDriver::Options
24
+ KEY = 'moz:firefoxOptions'
25
+
26
+ # see: https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html
27
+ CAPABILITIES = {binary: 'binary',
28
+ args: 'args',
29
+ profile: 'profile',
30
+ log: 'log',
31
+ prefs: 'prefs'}.freeze
32
+
33
+ CAPABILITIES.each_key do |key|
34
+ define_method key do
35
+ @options[key]
36
+ end
37
+
38
+ define_method "#{key}=" do |value|
39
+ @options[key] = value
40
+ end
41
+ end
42
+
43
+ #
44
+ # Create a new Options instance, only for W3C-capable versions of Firefox.
45
+ #
46
+ # @example
47
+ # options = Selenium::WebDriver::Firefox::Options.new(args: ['--host=127.0.0.1'])
48
+ # driver = Selenium::WebDriver.for :firefox, options: options
49
+ #
50
+ # @param [Hash] opts the pre-defined options to create the Firefox::Options with
51
+ # @option opts [String] :binary Path to the Firefox executable to use
52
+ # @option opts [Array<String>] :args List of command-line arguments to use when starting geckodriver
53
+ # @option opts [Profile, String] :profile Encoded profile string or Profile instance
54
+ # @option opts [String, Symbol] :log_level Log level for geckodriver
55
+ # @option opts [Hash] :prefs A hash with each entry consisting of the key of the preference and its value
56
+ # @option opts [Hash] :options A hash for raw options
57
+ #
58
+
59
+ def initialize(log_level: nil, **opts)
60
+ super(opts)
61
+
62
+ @options[:log] ||= {level: log_level} if log_level
63
+ process_profile(@options[:profile]) if @options.key?(:profile)
64
+ end
65
+
66
+ #
67
+ # Add a command-line argument to use when starting Firefox.
68
+ #
69
+ # @example Start geckodriver on a specific host
70
+ # options = Selenium::WebDriver::Firefox::Options.new
71
+ # options.add_argument('--host=127.0.0.1')
72
+ #
73
+ # @param [String] arg The command-line argument to add
74
+ #
75
+
76
+ def add_argument(arg)
77
+ @options[:args] ||= []
78
+ @options[:args] << arg
79
+ end
80
+
81
+ #
82
+ # Add a preference that is only applied to the user profile in use.
83
+ #
84
+ # @example Set the default homepage
85
+ # options = Selenium::WebDriver::Firefox::Options.new
86
+ # options.add_preference('browser.startup.homepage', 'http://www.seleniumhq.com/')
87
+ #
88
+ # @param [String] name Key of the preference
89
+ # @param [Boolean, String, Integer] value Value of the preference
90
+ #
91
+
92
+ def add_preference(name, value)
93
+ @options[:prefs] ||= {}
94
+ @options[:prefs][name] = value
95
+ end
96
+
97
+ #
98
+ # Run Firefox in headless mode.
99
+ #
100
+ # @example Enable headless mode
101
+ # options = Selenium::WebDriver::Firefox::Options.new
102
+ # options.headless!
103
+ #
104
+
105
+ def headless!
106
+ add_argument '-headless'
107
+ end
108
+
109
+ #
110
+ # Sets Firefox profile.
111
+ #
112
+ # @example Set the custom profile
113
+ # profile = Selenium::WebDriver::Firefox::Profile.new
114
+ # options = Selenium::WebDriver::Firefox::Options.new
115
+ # options.profile = profile
116
+ #
117
+ # @example Use existing profile
118
+ # options = Selenium::WebDriver::Firefox::Options.new
119
+ # options.profile = 'myprofile'
120
+ #
121
+ # @param [Profile, String] profile Profile to be used
122
+ #
123
+
124
+ undef profile=
125
+ def profile=(profile)
126
+ process_profile(profile)
127
+ end
128
+
129
+ def log_level
130
+ @options.dig(:log, :level)
131
+ end
132
+
133
+ def log_level=(level)
134
+ @options[:log] = {level: level}
135
+ end
136
+
137
+ #
138
+ # @api private
139
+ #
140
+
141
+ def as_json(*)
142
+ options = super
143
+ options['binary'] ||= Firefox.path if Firefox.path
144
+
145
+ {KEY => generate_as_json(options)}
146
+ end
147
+
148
+ private
149
+
150
+ def process_profile(profile)
151
+ @options[:profile] = if profile.nil?
152
+ nil
153
+ elsif profile.is_a? Profile
154
+ profile
155
+ else
156
+ Profile.from_name(profile)
157
+ end
158
+ end
159
+ end # Options
160
+ end # Firefox
161
+ end # WebDriver
162
+ end # Selenium
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -23,18 +23,10 @@ module Selenium
23
23
  class Profile
24
24
  include ProfileHelper
25
25
 
26
- VALID_PREFERENCE_TYPES = [TrueClass, FalseClass, Integer, Float, String].freeze
27
- WEBDRIVER_EXTENSION_PATH = File.expand_path("#{WebDriver.root}/selenium/webdriver/firefox/extension/webdriver.xpi")
28
- WEBDRIVER_PREFS = {
29
- native_events: 'webdriver_enable_native_events',
30
- untrusted_certs: 'webdriver_accept_untrusted_certs',
31
- untrusted_issuer: 'webdriver_assume_untrusted_issuer',
32
- port: 'webdriver_firefox_port',
33
- log_file: 'webdriver.log.file'
34
- }.freeze
26
+ VALID_PREFERENCE_TYPES = [TrueClass, FalseClass, Integer, Float, String].freeze
35
27
 
36
28
  attr_reader :name, :log_file
37
- attr_writer :secure_ssl, :native_events, :load_no_focus_lib
29
+ attr_writer :secure_ssl, :load_no_focus_lib
38
30
 
39
31
  class << self
40
32
  def ini
@@ -42,13 +34,14 @@ module Selenium
42
34
  end
43
35
 
44
36
  def from_name(name)
45
- ini[name]
37
+ profile = ini[name]
38
+ return profile if profile
39
+
40
+ raise Error::WebDriverError, "unable to find profile named: #{name.inspect}"
46
41
  end
47
42
 
48
- def default_preferences
49
- @default_preferences ||= JSON.parse(
50
- File.read(File.expand_path("#{WebDriver.root}/selenium/webdriver/firefox/extension/prefs.json"))
51
- ).freeze
43
+ def decoded(json)
44
+ JSON.parse(json)
52
45
  end
53
46
  end
54
47
 
@@ -67,25 +60,7 @@ module Selenium
67
60
  def initialize(model = nil)
68
61
  @model = verify_model(model)
69
62
 
70
- model_prefs = read_model_prefs
71
-
72
- if model_prefs.empty?
73
- @native_events = DEFAULT_ENABLE_NATIVE_EVENTS
74
- @secure_ssl = DEFAULT_SECURE_SSL
75
- @untrusted_issuer = DEFAULT_ASSUME_UNTRUSTED_ISSUER
76
- @load_no_focus_lib = DEFAULT_LOAD_NO_FOCUS_LIB
77
-
78
- @additional_prefs = {}
79
- else
80
- # TODO: clean this up
81
- @native_events = model_prefs.delete(WEBDRIVER_PREFS[:native_events]) == 'true'
82
- @secure_ssl = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_certs]) != 'true'
83
- @untrusted_issuer = model_prefs.delete(WEBDRIVER_PREFS[:untrusted_issuer]) == 'true'
84
- # not stored in profile atm, so will always be false.
85
- @load_no_focus_lib = model_prefs.delete(WEBDRIVER_PREFS[:load_no_focus_lib]) == 'true'
86
- @additional_prefs = model_prefs
87
- end
88
-
63
+ @additional_prefs = read_model_prefs
89
64
  @extensions = {}
90
65
  end
91
66
 
@@ -113,7 +88,7 @@ module Selenium
113
88
  raise TypeError, "expected one of #{VALID_PREFERENCE_TYPES.inspect}, got #{value.inspect}:#{value.class}"
114
89
  end
115
90
 
116
- if value.is_a?(String) && Util.stringified?(value)
91
+ if value.is_a?(String) && stringified?(value)
117
92
  raise ArgumentError, "preference values must be plain strings: #{key.inspect} => #{value.inspect}"
118
93
  end
119
94
 
@@ -129,11 +104,6 @@ module Selenium
129
104
  self[WEBDRIVER_PREFS[:log_file]] = file
130
105
  end
131
106
 
132
- def add_webdriver_extension
133
- return if @extensions.key?(:webdriver)
134
- add_extension(WEBDRIVER_EXTENSION_PATH, :webdriver)
135
- end
136
-
137
107
  #
138
108
  # Add the extension (directory, .zip or .xpi) at the given path to the profile.
139
109
  #
@@ -142,30 +112,8 @@ module Selenium
142
112
  @extensions[name] = Extension.new(path)
143
113
  end
144
114
 
145
- def native_events?
146
- @native_events == true
147
- end
148
-
149
- def load_no_focus_lib?
150
- @load_no_focus_lib == true
151
- end
152
-
153
- def secure_ssl?
154
- @secure_ssl == true
155
- end
156
-
157
- def assume_untrusted_certificate_issuer?
158
- @untrusted_issuer == true
159
- end
160
-
161
- def assume_untrusted_certificate_issuer=(bool)
162
- @untrusted_issuer = bool
163
- end
164
-
165
115
  def proxy=(proxy)
166
- unless proxy.is_a? Proxy
167
- raise TypeError, "expected #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}"
168
- end
116
+ raise TypeError, "expected #{Proxy.name}, got #{proxy.inspect}:#{proxy.class}" unless proxy.is_a? Proxy
169
117
 
170
118
  case proxy.type
171
119
  when :manual
@@ -176,11 +124,7 @@ module Selenium
176
124
  set_manual_proxy_preference 'ssl', proxy.ssl
177
125
  set_manual_proxy_preference 'socks', proxy.socks
178
126
 
179
- self['network.proxy.no_proxies_on'] = if proxy.no_proxy
180
- proxy.no_proxy
181
- else
182
- ''
183
- end
127
+ self['network.proxy.no_proxies_on'] = proxy.no_proxy || ''
184
128
  when :pac
185
129
  self['network.proxy.type'] = 2
186
130
  self['network.proxy.autoconfig_url'] = proxy.pac
@@ -189,10 +133,10 @@ module Selenium
189
133
  else
190
134
  raise ArgumentError, "unsupported proxy type #{proxy.type}"
191
135
  end
192
-
193
- proxy
194
136
  end
195
137
 
138
+ alias_method :as_json, :encoded
139
+
196
140
  private
197
141
 
198
142
  def set_manual_proxy_preference(key, value)
@@ -208,7 +152,7 @@ module Selenium
208
152
  destination = File.join(directory, 'extensions')
209
153
 
210
154
  @extensions.each do |name, extension|
211
- p extension: name if $DEBUG
155
+ WebDriver.logger.debug({extenstion: name}.inspect)
212
156
  extension.write_to(destination)
213
157
  end
214
158
  end
@@ -235,15 +179,7 @@ module Selenium
235
179
 
236
180
  def update_user_prefs_in(directory)
237
181
  path = File.join(directory, 'user.js')
238
- prefs = read_user_prefs(path)
239
-
240
- prefs.merge! self.class.default_preferences.fetch 'mutable'
241
- prefs.merge! @additional_prefs
242
- prefs.merge! self.class.default_preferences.fetch 'frozen'
243
-
244
- prefs[WEBDRIVER_PREFS[:untrusted_certs]] = !secure_ssl?
245
- prefs[WEBDRIVER_PREFS[:native_events]] = native_events?
246
- prefs[WEBDRIVER_PREFS[:untrusted_issuer]] = assume_untrusted_certificate_issuer?
182
+ prefs = read_user_prefs(path).merge(@additional_prefs)
247
183
 
248
184
  # If the user sets the home page, we should also start up there
249
185
  prefs['startup.homepage_welcome_url'] = prefs['browser.startup.homepage']
@@ -257,6 +193,7 @@ module Selenium
257
193
 
258
194
  File.read(path).split("\n").each do |line|
259
195
  next unless line =~ /user_pref\("([^"]+)"\s*,\s*(.+?)\);/
196
+
260
197
  key = Regexp.last_match(1).strip
261
198
  value = Regexp.last_match(2).strip
262
199
 
@@ -274,6 +211,10 @@ module Selenium
274
211
  end
275
212
  end
276
213
  end
214
+
215
+ def stringified?(str)
216
+ /^".*"$/.match?(str)
217
+ end
277
218
  end # Profile
278
219
  end # Firefox
279
220
  end # WebDriver
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Licensed to the Software Freedom Conservancy (SFC) under one
4
4
  # or more contributor license agreements. See the NOTICE file
5
5
  # distributed with this work for additional information
@@ -57,15 +57,15 @@ module Selenium
57
57
  is_relative = Regexp.last_match(1).strip == '1'
58
58
  when /^Path=(.+)$/
59
59
  path = Regexp.last_match(1).strip
60
+ p = path_for(name, is_relative, path)
61
+ @profile_paths[name] = p if p
60
62
  end
61
63
  end
62
-
63
- p = path_for(name, is_relative, path)
64
- @profile_paths[name] = p if p
65
64
  end
66
65
 
67
66
  def path_for(name, is_relative, path)
68
67
  return unless [name, path].any?
68
+
69
69
  is_relative ? File.join(Util.app_data_path, path) : path
70
70
  end
71
71
  end # ProfilesIni