capybara-lockstep 2.2.1 → 2.2.2
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/CHANGELOG.md +8 -0
- data/Gemfile.lock +3 -3
- data/README.md +1 -1
- data/lib/capybara-lockstep/helper.js +6 -14
- data/lib/capybara-lockstep/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbe79968ebe67aec5235612f3699fc83fb1845205579b421c0291883ce4fffcb
|
4
|
+
data.tar.gz: 3fef926a33a2303f0d41940aec44c569c10001ae3a749325a59b502f38c8f2d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0dc89fd6df23a4163f65ba33d537d40561abcfb7a96820b5757130088771d1e8b6432c51a8fbad6f22f54163a35f1ad417553bfe95e1c77d4a84bc1b6d55c01
|
7
|
+
data.tar.gz: ff6dda402879f2ed6de25686e144cc428e3c33d4eec05d2b705ef5cc2e3591b31244dd111799243c5b5618d7a417bf17295c8611deb72ce3ac82502f609ad07d
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file.
|
|
2
2
|
|
3
3
|
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
4
4
|
|
5
|
+
|
6
|
+
# 2.2.2
|
7
|
+
|
8
|
+
- We now only wait for `<script>` elements with a JavaScript type
|
9
|
+
- We only wait for `<iframe>` elements with a `[src]` attribute
|
10
|
+
- We no longer wait for `<video>` and `<audio>` elements to load their metadata. This did not work consistently, and would sometimes cause capybara-lockstep to wait indefinitely.
|
11
|
+
|
12
|
+
|
5
13
|
# 2.2.1
|
6
14
|
|
7
15
|
- Fixed a bug that disabled most functionality for drivers with `browser: :remote`.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
capybara-lockstep (2.2.
|
4
|
+
capybara-lockstep (2.2.2)
|
5
5
|
activesupport (>= 4.2)
|
6
6
|
capybara (>= 3.0)
|
7
7
|
ruby2_keywords
|
@@ -71,8 +71,8 @@ GEM
|
|
71
71
|
diff-lcs (>= 1.2.0, < 2.0)
|
72
72
|
rspec-support (~> 3.13.0)
|
73
73
|
rspec-support (3.13.1)
|
74
|
-
rspec-wait (0.0
|
75
|
-
rspec (>= 3.
|
74
|
+
rspec-wait (1.0.0)
|
75
|
+
rspec (>= 3.4)
|
76
76
|
ruby2_keywords (0.0.5)
|
77
77
|
rubyzip (2.3.2)
|
78
78
|
selenium-webdriver (4.1.0)
|
data/README.md
CHANGED
@@ -72,7 +72,6 @@ When capybara-lockstep synchronizes it will:
|
|
72
72
|
- wait for any pending AJAX requests to finish and their callbacks to be called.
|
73
73
|
- wait for dynamically inserted `<script>`s to load (e.g. from [dynamic imports](https://webpack.js.org/guides/code-splitting/#dynamic-imports) or Analytics snippets).
|
74
74
|
- wait for dynamically inserted `<img>` or `<iframe>` elements to load (ignoring [lazy-loaded](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#lazy) elements).
|
75
|
-
- wait for dynamically inserted `<audio>` and `<video>` elements to load their [metadata](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadedmetadata_event)
|
76
75
|
|
77
76
|
In summary, Capybara can no longer observe or interact with the page while HTTP requests are in flight.
|
78
77
|
This covers most async work that causes flaky tests.
|
@@ -86,6 +85,7 @@ Async work not synchronized by capybara-lockstep includes:
|
|
86
85
|
- Websocket connections
|
87
86
|
- Service workers
|
88
87
|
- Work scheduled via `setTimeout()` or `setInterval()`.
|
88
|
+
- `<audio>` and `<video>` elements
|
89
89
|
|
90
90
|
You can configure capybara-lockstep to [wait for additional async work](#signaling-asynchronous-work).
|
91
91
|
|
@@ -177,7 +177,7 @@ window.CapybaraLockstep = (function() {
|
|
177
177
|
}
|
178
178
|
|
179
179
|
function isRemoteScript(element) {
|
180
|
-
return element.matches('script[src]') && !hasDataSource(element)
|
180
|
+
return element.matches('script[src]') && !hasDataSource(element) && isTrackableScriptType(element.type)
|
181
181
|
}
|
182
182
|
|
183
183
|
function isTrackableImage(element) {
|
@@ -188,11 +188,15 @@ window.CapybaraLockstep = (function() {
|
|
188
188
|
}
|
189
189
|
|
190
190
|
function isTrackableIFrame(element) {
|
191
|
-
return element.matches('iframe') &&
|
191
|
+
return element.matches('iframe[src]') &&
|
192
192
|
!hasDataSource(element) &&
|
193
193
|
element.getAttribute('loading') !== 'lazy'
|
194
194
|
}
|
195
195
|
|
196
|
+
function isTrackableScriptType(type) {
|
197
|
+
return !type || type === 'text/javascript' || type === 'module' || type === 'application/javascript'
|
198
|
+
}
|
199
|
+
|
196
200
|
function hasDataSource(element) {
|
197
201
|
// <img> can have <img src> and <img srcset>
|
198
202
|
// <video> can have <video src> or <video><source src>
|
@@ -201,22 +205,11 @@ window.CapybaraLockstep = (function() {
|
|
201
205
|
!!element.querySelector('source [src*="data:"], source [srcset*="data:"]')
|
202
206
|
}
|
203
207
|
|
204
|
-
function isTrackableMediaElement(element) {
|
205
|
-
return element.matches('audio, video') &&
|
206
|
-
element.readyState === 0 && // no metadata known
|
207
|
-
!hasDataSource(element) &&
|
208
|
-
element.getAttribute('preload') !== 'none'
|
209
|
-
}
|
210
|
-
|
211
208
|
function trackRemoteElement(element, condition, workTag) {
|
212
209
|
trackLoadingElement(element, condition, workTag, 'load', 'error')
|
213
210
|
|
214
211
|
}
|
215
212
|
|
216
|
-
function trackMediaElement(element, condition, workTag) {
|
217
|
-
trackLoadingElement(element, condition, workTag, 'loadedmetadata', 'error')
|
218
|
-
}
|
219
|
-
|
220
213
|
function trackLoadingElement(element, condition, workTag, loadEvent, errorEvent) {
|
221
214
|
if (!condition(element)) {
|
222
215
|
return
|
@@ -266,7 +259,6 @@ window.CapybaraLockstep = (function() {
|
|
266
259
|
trackRemoteElement(addedNode, isRemoteScript, 'Script')
|
267
260
|
trackRemoteElement(addedNode, isTrackableImage, 'Image')
|
268
261
|
trackRemoteElement(addedNode, isTrackableIFrame, 'Inline frame')
|
269
|
-
trackMediaElement(addedNode, isTrackableMediaElement, 'Media element')
|
270
262
|
}
|
271
263
|
})
|
272
264
|
})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-lockstep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
|
-
rubygems_version: 3.4.
|
127
|
+
rubygems_version: 3.4.3
|
128
128
|
signing_key:
|
129
129
|
specification_version: 4
|
130
130
|
summary: Synchronize Capybara commands with client-side JavaScript and AJAX requests
|