capybara 3.23.0 → 3.24.0
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 +17 -0
- data/README.md +1 -2
- data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +8 -4
- data/lib/capybara/selenium/node.rb +2 -5
- data/lib/capybara/selenium/nodes/chrome_node.rb +2 -0
- data/lib/capybara/selenium/nodes/safari_node.rb +3 -1
- data/lib/capybara/selenium/patches/logs.rb +34 -7
- data/lib/capybara/spec/session/save_screenshot_spec.rb +0 -11
- data/lib/capybara/spec/test_app.rb +4 -0
- data/lib/capybara/version.rb +1 -1
- data/spec/selenium_spec_chrome.rb +5 -4
- data/spec/selenium_spec_chrome_remote.rb +17 -0
- data/spec/shared_selenium_session.rb +7 -0
- data/spec/spec_helper.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ea1da81bd27199aadc0d73d61e33b7ff0ea9911114acc375ea2e6f798a49eb4
|
4
|
+
data.tar.gz: 30279a8a5ab221ae029bc95625c7c82ad11cdf68d91ef6be33e7a0b022268537
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b8d7f760540297a204ae5eb0dac8b9450e8961652de87d543ae114edb9af6a48219db7c55a40e004d49847431ef545cc5628a6bbde858e58921209f984852d2
|
7
|
+
data.tar.gz: 56d10157a97fd98f7e2e23c98fc21f0dc0f70f53338a271c9fa22b639648d919134fe1c7c803be43f435a9618d49e2517ccce5d207139635c49d9f6f18a66bd6
|
data/History.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
# Version 3.24.0
|
2
|
+
Release date: 2079-06-13
|
3
|
+
|
4
|
+
### Added
|
5
|
+
|
6
|
+
* Log access when using the Selenium driver with Chrome 75 in W3C mode has been reenabled.
|
7
|
+
|
8
|
+
### Changed
|
9
|
+
|
10
|
+
* Selenium driver now selects all current content and then sends keys rather than clearing field by JS
|
11
|
+
and then sending keys when setting values to text inputs in order to more closely simulate user behavior
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
* Relative paths passed to `attach_file` will be assumed to be relative to the current working directory when using the
|
16
|
+
Selenium driver
|
17
|
+
|
1
18
|
# Version 3.23.0
|
2
19
|
Release date: 2019-06-10
|
3
20
|
|
data/README.md
CHANGED
@@ -7,8 +7,7 @@
|
|
7
7
|
[](https://gitter.im/jnicklas/capybara?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
8
|
[](https://dependabot.com/compatibility-score.html?dependency-name=capybara&package-manager=bundler&version-scheme=semver)
|
9
9
|
|
10
|
-
**Note** You are viewing the README for the 3.
|
11
|
-
|
10
|
+
**Note** You are viewing the README for the 3.24.x version of Capybara.
|
12
11
|
|
13
12
|
Capybara helps you test web applications by simulating how a real user would
|
14
13
|
interact with your app. It is agnostic about the driver running your tests and
|
@@ -6,7 +6,7 @@ require 'capybara/selenium/patches/logs'
|
|
6
6
|
module Capybara::Selenium::Driver::ChromeDriver
|
7
7
|
def self.extended(base)
|
8
8
|
bridge = base.send(:bridge)
|
9
|
-
bridge.extend Capybara::Selenium::ChromeLogs unless bridge.respond_to?(:
|
9
|
+
bridge.extend Capybara::Selenium::ChromeLogs unless bridge.respond_to?(:log)
|
10
10
|
end
|
11
11
|
|
12
12
|
def fullscreen_window(handle)
|
@@ -90,9 +90,13 @@ private
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def execute_cdp(cmd, params = {})
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
if browser.respond_to? :execute_cdp
|
94
|
+
browser.execute_cdp(cmd, params)
|
95
|
+
else
|
96
|
+
args = { cmd: cmd, params: params }
|
97
|
+
result = bridge.http.call(:post, "session/#{bridge.session_id}/goog/cdp/execute", args)
|
98
|
+
result['value']
|
99
|
+
end
|
96
100
|
end
|
97
101
|
|
98
102
|
def build_node(native_node, initial_cache = {})
|
@@ -224,10 +224,7 @@ private
|
|
224
224
|
elsif clear.is_a? Array
|
225
225
|
send_keys(*clear, value)
|
226
226
|
else
|
227
|
-
|
228
|
-
# Script can change a readonly element which user input cannot, so
|
229
|
-
# don't execute if readonly.
|
230
|
-
driver.execute_script "if (!arguments[0].readOnly){ arguments[0].value = '' }", self unless clear == :none
|
227
|
+
driver.execute_script 'arguments[0].select()', self unless clear == :none
|
231
228
|
send_keys(value)
|
232
229
|
end
|
233
230
|
end
|
@@ -303,7 +300,7 @@ private
|
|
303
300
|
|
304
301
|
def set_file(value) # rubocop:disable Naming/AccessorMethodName
|
305
302
|
path_names = value.to_s.empty? ? [] : value
|
306
|
-
native.send_keys(Array(path_names).join("\n"))
|
303
|
+
native.send_keys(Array(path_names).map(&File.method(:expand_path)).join("\n"))
|
307
304
|
end
|
308
305
|
|
309
306
|
def set_content_editable(value) # rubocop:disable Naming/AccessorMethodName
|
@@ -34,6 +34,8 @@ class Capybara::Selenium::ChromeNode < Capybara::Selenium::Node
|
|
34
34
|
|
35
35
|
def click(*)
|
36
36
|
super
|
37
|
+
rescue ::Selenium::WebDriver::Error::ElementClickInterceptedError
|
38
|
+
raise
|
37
39
|
rescue ::Selenium::WebDriver::Error::WebDriverError => e
|
38
40
|
# chromedriver 74 (at least on mac) raises the wrong error for this
|
39
41
|
raise ::Selenium::WebDriver::Error::ElementClickInterceptedError, e.message if e.message.match?(/element click intercepted/)
|
@@ -16,7 +16,9 @@ class Capybara::Selenium::SafariNode < Capybara::Selenium::Node
|
|
16
16
|
return find_css('th:first-child,td:first-child')[0].click(keys, options)
|
17
17
|
end
|
18
18
|
raise
|
19
|
-
rescue ::Selenium::WebDriver::Error::WebDriverError
|
19
|
+
rescue ::Selenium::WebDriver::Error::WebDriverError => e
|
20
|
+
raise unless e.instance_of? ::Selenium::WebDriver::Error::WebDriverError
|
21
|
+
|
20
22
|
# Safari doesn't return a specific error here - assume it's an ElementNotInteractableError
|
21
23
|
raise ::Selenium::WebDriver::Error::ElementNotInteractableError,
|
22
24
|
'Non distinct error raised in #click, translated to ElementNotInteractableError for retry'
|
@@ -4,16 +4,43 @@ module Capybara
|
|
4
4
|
module Selenium
|
5
5
|
module ChromeLogs
|
6
6
|
LOG_MSG = <<~MSG
|
7
|
-
Chromedriver 75+ defaults to W3C mode.
|
8
|
-
|
9
|
-
It is unknown how long non-W3C mode will be supported by chromedriver (it won't be supported by selenium-webdriver 4+) \
|
10
|
-
so you may need to consider other solutions in the near future.
|
7
|
+
Chromedriver 75+ defaults to W3C mode. Please upgrade to chromedriver >= \
|
8
|
+
75.0.3770.90 if you need to access logs while in W3C compliant mode.
|
11
9
|
MSG
|
12
10
|
|
13
|
-
|
14
|
-
|
11
|
+
COMMANDS = {
|
12
|
+
get_available_log_types: [:get, 'session/:session_id/se/log/types'],
|
13
|
+
get_log: [:post, 'session/:session_id/se/log'],
|
14
|
+
get_log_legacy: [:post, 'session/:session_id/log']
|
15
|
+
}.freeze
|
15
16
|
|
16
|
-
|
17
|
+
def commands(command)
|
18
|
+
COMMANDS[command] || super
|
19
|
+
end
|
20
|
+
|
21
|
+
def available_log_types
|
22
|
+
types = execute :get_available_log_types
|
23
|
+
Array(types).map(&:to_sym)
|
24
|
+
rescue ::Selenium::WebDriver::Error::UnknownCommandError
|
25
|
+
raise NotImplementedError, LOG_MSG
|
26
|
+
end
|
27
|
+
|
28
|
+
def log(type)
|
29
|
+
data = begin
|
30
|
+
execute :get_log, {}, type: type.to_s
|
31
|
+
rescue ::Selenium::WebDriver::Error::UnknownCommandError
|
32
|
+
execute :get_log_legacy, {}, type: type.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
Array(data).map do |l|
|
36
|
+
begin
|
37
|
+
::Selenium::WebDriver::LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message')
|
38
|
+
rescue KeyError
|
39
|
+
next
|
40
|
+
end
|
41
|
+
end
|
42
|
+
rescue ::Selenium::WebDriver::Error::UnknownCommandError
|
43
|
+
raise NotImplementedError, LOG_MSG
|
17
44
|
end
|
18
45
|
end
|
19
46
|
end
|
@@ -13,17 +13,6 @@ Capybara::SpecHelper.spec '#save_screenshot', requires: [:screenshot] do
|
|
13
13
|
FileUtils.rm_rf alternative_path
|
14
14
|
end
|
15
15
|
|
16
|
-
around do |example|
|
17
|
-
# Workaround RSpec Issue - https://github.com/rspec/rspec-support/issues/374
|
18
|
-
if respond_to?(:without_partial_double_verification)
|
19
|
-
without_partial_double_verification do
|
20
|
-
example.run
|
21
|
-
end
|
22
|
-
else
|
23
|
-
example.run
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
16
|
it 'generates sensible filename' do
|
28
17
|
allow(@session.driver).to receive(:save_screenshot)
|
29
18
|
|
data/lib/capybara/version.rb
CHANGED
@@ -125,16 +125,17 @@ RSpec.describe 'Capybara::Session with chrome' do
|
|
125
125
|
describe 'log access' do
|
126
126
|
before { skip 'Only makes sense in W3C mode' if ENV['W3C'] == 'false' }
|
127
127
|
|
128
|
-
it '
|
128
|
+
it 'does not error getting log types' do
|
129
|
+
skip if Gem::Version.new(session.driver.browser.capabilities['chrome']['chromedriverVersion'].split[0]) < Gem::Version.new('75.0.3770.90')
|
129
130
|
expect do
|
130
131
|
session.driver.browser.manage.logs.available_types
|
131
|
-
end.
|
132
|
+
end.not_to raise_error
|
132
133
|
end
|
133
134
|
|
134
|
-
it '
|
135
|
+
it 'does not error when getting logs' do
|
135
136
|
expect do
|
136
137
|
session.driver.browser.manage.logs.get(:browser)
|
137
|
-
end.
|
138
|
+
end.not_to raise_error
|
138
139
|
end
|
139
140
|
end
|
140
141
|
end
|
@@ -80,4 +80,21 @@ RSpec.describe 'Capybara::Session with remote Chrome' do
|
|
80
80
|
it 'is considered to be chrome' do
|
81
81
|
expect(session.driver.browser.browser).to eq :chrome
|
82
82
|
end
|
83
|
+
|
84
|
+
describe 'log access' do
|
85
|
+
before { skip 'Only makes sense in W3C mode' if ENV['W3C'] == 'false' }
|
86
|
+
|
87
|
+
it 'does not error when getting log types' do
|
88
|
+
skip if Gem::Version.new(session.driver.browser.capabilities['chrome']['chromedriverVersion'].split[0]) < Gem::Version.new('75.0.3770.90')
|
89
|
+
expect do
|
90
|
+
session.driver.browser.manage.logs.available_types
|
91
|
+
end.not_to raise_error
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'does not error when getting logs' do
|
95
|
+
expect do
|
96
|
+
session.driver.browser.manage.logs.get(:browser)
|
97
|
+
end.not_to raise_error
|
98
|
+
end
|
99
|
+
end
|
83
100
|
end
|
@@ -321,6 +321,13 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
|
|
321
321
|
session.click_button('Upload Multiple')
|
322
322
|
expect(session.body).to include('5 | ') # number of files
|
323
323
|
end
|
324
|
+
|
325
|
+
it 'can attach a relative file' do
|
326
|
+
session.visit('/form')
|
327
|
+
session.attach_file('Single Document', 'spec/fixtures/capybara.csv')
|
328
|
+
session.click_button('Upload Single')
|
329
|
+
expect(session.body).to include('Content-type: text/csv')
|
330
|
+
end
|
324
331
|
end
|
325
332
|
|
326
333
|
context 'Windows' do
|
data/spec/spec_helper.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.
|
4
|
+
version: 3.24.0
|
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-06-
|
13
|
+
date: 2019-06-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: addressable
|