capybara 3.15.0 → 3.15.1
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/History.md +8 -1
- data/lib/capybara/selenium/driver.rb +34 -10
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +7 -1
- data/lib/capybara/selenium/logger_suppressor.rb +29 -0
- data/lib/capybara/selenium/nodes/chrome_node.rb +8 -2
- data/lib/capybara/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12db68d440542fd3dda74f6b7f2dfa36c2eb2b8e1fe973cabbbfe1ebed0fe199
|
4
|
+
data.tar.gz: 9fbdd911c4193831996aa05a086fdfcc9012897e3640d4a4efe37c1df6679514
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d93e604a136e740101b4672947033e4b628df4627337ed3aee11098f0fd1be7ee5f10a6401e6185ac9797a531db8dde6f7d51ca80a4d446468ecb77698140224
|
7
|
+
data.tar.gz: ebdabe24db256bf3d083aafdb4dc16caf51211ae24cde2edca4cae755b97818ffc64f93705f45f98fc11f8e2e03184a2de09fc801dd85f500915cc91c5a0b52d
|
data/History.md
CHANGED
@@ -16,6 +16,7 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|
16
16
|
|
17
17
|
def self.load_selenium
|
18
18
|
require 'selenium-webdriver'
|
19
|
+
require 'capybara/selenium/logger_suppressor'
|
19
20
|
warn "Warning: You're using an unsupported version of selenium-webdriver, please upgrade." if Gem.loaded_specs['selenium-webdriver'].version < Gem::Version.new('3.5.0')
|
20
21
|
rescue LoadError => err
|
21
22
|
raise err if err.message !~ /selenium-webdriver/
|
@@ -110,7 +111,7 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|
110
111
|
navigated = true
|
111
112
|
# Ensure the page is empty and trigger an UnhandledAlertError for any modals that appear during unload
|
112
113
|
wait_for_empty_page(timer)
|
113
|
-
rescue
|
114
|
+
rescue *unhandled_alert_errors
|
114
115
|
# This error is thrown if an unhandled alert is on the page
|
115
116
|
# Firefox appears to automatically dismiss this alert, chrome does not
|
116
117
|
# We'll try to accept it
|
@@ -218,19 +219,24 @@ class Capybara::Selenium::Driver < Capybara::Driver::Base
|
|
218
219
|
end
|
219
220
|
|
220
221
|
def invalid_element_errors
|
221
|
-
[
|
222
|
+
errors = [
|
222
223
|
::Selenium::WebDriver::Error::StaleElementReferenceError,
|
223
|
-
::Selenium::WebDriver::Error::UnhandledError,
|
224
|
-
::Selenium::WebDriver::Error::ElementNotVisibleError,
|
225
|
-
::Selenium::WebDriver::Error::InvalidSelectorError, # Work around a chromedriver go_back/go_forward race condition
|
226
224
|
::Selenium::WebDriver::Error::ElementNotInteractableError,
|
225
|
+
::Selenium::WebDriver::Error::InvalidSelectorError, # Work around chromedriver go_back/go_forward race condition
|
227
226
|
::Selenium::WebDriver::Error::ElementClickInterceptedError,
|
228
|
-
::Selenium::WebDriver::Error::InvalidElementStateError,
|
229
|
-
::Selenium::WebDriver::Error::ElementNotSelectableError,
|
230
|
-
::Selenium::WebDriver::Error::ElementNotSelectableError,
|
231
227
|
::Selenium::WebDriver::Error::NoSuchElementError, # IE
|
232
228
|
::Selenium::WebDriver::Error::InvalidArgumentError # IE
|
233
229
|
]
|
230
|
+
|
231
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
232
|
+
errors.concat [
|
233
|
+
::Selenium::WebDriver::Error::UnhandledError,
|
234
|
+
::Selenium::WebDriver::Error::ElementNotVisibleError,
|
235
|
+
::Selenium::WebDriver::Error::InvalidElementStateError,
|
236
|
+
::Selenium::WebDriver::Error::ElementNotSelectableError
|
237
|
+
]
|
238
|
+
end
|
239
|
+
errors
|
234
240
|
end
|
235
241
|
|
236
242
|
def no_such_window_error
|
@@ -246,12 +252,24 @@ private
|
|
246
252
|
def clear_browser_state
|
247
253
|
delete_all_cookies
|
248
254
|
clear_storage
|
249
|
-
rescue
|
255
|
+
rescue *clear_browser_state_errors # rubocop:disable Lint/HandleExceptions
|
250
256
|
# delete_all_cookies fails when we've previously gone
|
251
257
|
# to about:blank, so we rescue this error and do nothing
|
252
258
|
# instead.
|
253
259
|
end
|
254
260
|
|
261
|
+
def clear_browser_state_errors
|
262
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
263
|
+
[Selenium::WebDriver::Error::UnhandledError, Selenium::WebDriver::Error::UnknownError]
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def unhandled_alert_errors
|
268
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
269
|
+
[Selenium::WebDriver::Error::UnhandledAlertError, Selenium::WebDriver::Error::UnexpectedAlertOpenError]
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
255
273
|
def delete_all_cookies
|
256
274
|
@browser.manage.delete_all_cookies
|
257
275
|
end
|
@@ -324,11 +342,17 @@ private
|
|
324
342
|
regexp = text.is_a?(Regexp) ? text : Regexp.escape(text.to_s)
|
325
343
|
alert.text.match(regexp) ? alert : nil
|
326
344
|
end
|
327
|
-
rescue
|
345
|
+
rescue *find_modal_errors
|
328
346
|
raise Capybara::ModalNotFound, "Unable to find modal dialog#{" with #{text}" if text}"
|
329
347
|
end
|
330
348
|
end
|
331
349
|
|
350
|
+
def find_modal_errors
|
351
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
352
|
+
[Selenium::WebDriver::Error::TimeoutError, Selenium::WebDriver::Error::TimeOutError]
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
332
356
|
def silenced_unknown_error_message?(msg)
|
333
357
|
silenced_unknown_error_messages.any? { |regex| msg =~ regex }
|
334
358
|
end
|
@@ -40,11 +40,17 @@ private
|
|
40
40
|
|
41
41
|
def delete_all_cookies
|
42
42
|
execute_cdp('Network.clearBrowserCookies')
|
43
|
-
rescue
|
43
|
+
rescue *cdp_unsupported_errors
|
44
44
|
# If the CDP clear isn't supported do original limited clear
|
45
45
|
super
|
46
46
|
end
|
47
47
|
|
48
|
+
def cdp_unsupported_errors
|
49
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
50
|
+
[Selenium::WebDriver::Error::UnhandledError, Selenium::WebDriver::Error::WebDriverError]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
48
54
|
def execute_cdp(cmd, params = {})
|
49
55
|
args = { cmd: cmd, params: params }
|
50
56
|
result = bridge.http.call(:post, "session/#{bridge.session_id}/goog/cdp/execute", args)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Selenium
|
5
|
+
module DeprecationSuppressor
|
6
|
+
def deprecate(*)
|
7
|
+
super unless @suppress_for_capybara
|
8
|
+
end
|
9
|
+
|
10
|
+
def suppress_deprecations
|
11
|
+
prev_suppress_for_capybara, @suppress_for_capybara = @suppress_for_capybara, true
|
12
|
+
yield
|
13
|
+
ensure
|
14
|
+
@suppress_for_capybara = prev_suppress_for_capybara
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module ErrorSuppressor
|
19
|
+
def for_code(*)
|
20
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Selenium::WebDriver::Logger.prepend Capybara::Selenium::DeprecationSuppressor
|
29
|
+
Selenium::WebDriver::Error.singleton_class.prepend Capybara::Selenium::ErrorSuppressor
|
@@ -14,9 +14,9 @@ class Capybara::Selenium::ChromeNode < Capybara::Selenium::Node
|
|
14
14
|
|
15
15
|
def set_file(value) # rubocop:disable Naming/AccessorMethodName
|
16
16
|
super(value)
|
17
|
-
rescue
|
17
|
+
rescue *file_errors => err
|
18
18
|
if err.message =~ /File not found : .+\n.+/m
|
19
|
-
raise ArgumentError, "Selenium < 3.14 with remote Chrome doesn't support multiple file upload"
|
19
|
+
raise ArgumentError, "Selenium < 3.14 with remote Chrome doesn't support multiple file upload" if e.message.match?(/File not found : .+\n.+/m)
|
20
20
|
end
|
21
21
|
|
22
22
|
raise
|
@@ -30,6 +30,12 @@ class Capybara::Selenium::ChromeNode < Capybara::Selenium::Node
|
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
+
def file_errors
|
34
|
+
::Selenium::WebDriver.logger.suppress_deprecations do
|
35
|
+
[::Selenium::WebDriver::Error::ExpectedError]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
33
39
|
def bridge
|
34
40
|
driver.browser.send(:bridge)
|
35
41
|
end
|
data/lib/capybara/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.15.
|
4
|
+
version: 3.15.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Walpole
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
12
|
- gem-public_cert.pem
|
13
|
-
date: 2019-
|
13
|
+
date: 2019-04-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: addressable
|
@@ -414,6 +414,7 @@ files:
|
|
414
414
|
- lib/capybara/selenium/extensions/find.rb
|
415
415
|
- lib/capybara/selenium/extensions/html5_drag.rb
|
416
416
|
- lib/capybara/selenium/extensions/scroll.rb
|
417
|
+
- lib/capybara/selenium/logger_suppressor.rb
|
417
418
|
- lib/capybara/selenium/node.rb
|
418
419
|
- lib/capybara/selenium/nodes/chrome_node.rb
|
419
420
|
- lib/capybara/selenium/nodes/firefox_node.rb
|