capybara 3.15.0 → 3.15.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|