percy-capybara 5.0.0 → 5.0.1.pre.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45a545941cfa1347d8912e8d94218005a87662f1c07d7633696ed56ba130a319
4
- data.tar.gz: e0796a2c700b35b7710c79979ea1d12c136335fce31b3d12c1e68630bd56ba88
3
+ metadata.gz: ccaeb7accc5e9ccb209ad80416672ada2508a4614b43a0963b6e7b6c7a80d347
4
+ data.tar.gz: ab7f534fd22d02a567a60d1905b737ed1a0f2276d531de1a2186ae79b96b5176
5
5
  SHA512:
6
- metadata.gz: 6cb49cda9b878968ffb3225c032c5a49e8c8fc712c9598c0c654362dad01a46d8d1f1808a4bef1cc3c2a6593b5da28f0deb7e1484a00416f2aa2ba9d7eaaf0f2
7
- data.tar.gz: 45bd57d38c20a550fe956c4b99b13b4d271113b5a8e14ef5b9e832facf36fe2be09b60e8a6ca5539ee54bde4b5885e67fdc6315d33cb75e46abf2e19e92b5757
6
+ metadata.gz: c1c5cb3a5024547f38d493a7571a73bdc43ae3a722865abce42fa6dc068c058a4326e4363c761f9f46cf8154ffeda1156b87eafee4e427118ff527ceeb6f6e97
7
+ data.tar.gz: f70fdedb5935a55025c068ace0dc6fcacfd4556c27be45584a97777107f405c85bcfc9aeec1465ba9631bb886344e0653663aa0074ae0a17f1f4bf5c93f5f2fc
data/README.md CHANGED
@@ -66,7 +66,7 @@ $ percy exec -- [test command]
66
66
  `page.snapshot(name[, options])`
67
67
 
68
68
  - `name` (**required**) - The snapshot name; must be unique to each snapshot
69
- - `options` - [See per-snapshot configuration options](https://docs.percy.io/docs/cli-configuration#per-snapshot-configuration)
69
+ - `options` - [See per-snapshot configuration options](https://www.browserstack.com/docs/percy/take-percy-snapshots/overview#per-snapshot-configuration)
70
70
 
71
71
  ## Upgrading
72
72
 
@@ -22,9 +22,20 @@ module PercyCapybara
22
22
 
23
23
  begin
24
24
  page.evaluate_script(fetch_percy_dom)
25
+
26
+ # Readiness gate -- runs before serialize when CLI supports it.
27
+ # Uses evaluate_async_script with a callback signal so the SDK can block
28
+ # on PercyDOM.waitForReady. In-browser typeof guard makes this a no-op on
29
+ # older CLIs that lack waitForReady.
30
+ readiness_diagnostics = wait_for_ready(page, options)
31
+
25
32
  dom_snapshot = page
26
33
  .evaluate_script("(function() { return PercyDOM.serialize(#{options.to_json}) })()")
27
34
 
35
+ if readiness_diagnostics && dom_snapshot.is_a?(Hash)
36
+ dom_snapshot['readiness_diagnostics'] = readiness_diagnostics
37
+ end
38
+
28
39
  response = fetch('percy/snapshot',
29
40
  name: name,
30
41
  url: page.current_url,
@@ -55,7 +66,7 @@ module PercyCapybara
55
66
  log('You may be using @percy/agent ' \
56
67
  'which is no longer supported by this SDK. ' \
57
68
  'Please uninstall @percy/agent and install @percy/cli instead. ' \
58
- 'https://docs.percy.io/docs/migrating-to-percy-cli')
69
+ 'https://www.browserstack.com/docs/percy/migration/migrate-to-cli')
59
70
  @percy_enabled = false
60
71
  return false
61
72
  end
@@ -85,6 +96,39 @@ module PercyCapybara
85
96
  @percy_dom = response.body
86
97
  end
87
98
 
99
+ # Readiness gate: runs PercyDOM.waitForReady before serialize.
100
+ #
101
+ # Returns diagnostics to attach to the domSnapshot, or nil.
102
+ # Config precedence: options[:readiness] / options['readiness'] > {} (the
103
+ # CLI applies its balanced preset default when passed {}). preset='disabled'
104
+ # skips the script entirely. Opt-in: only runs when the caller explicitly
105
+ # passes a `readiness` option -- keeps non-opting tests insulated from
106
+ # Capybara drivers that don't implement evaluate_async_script.
107
+ # Any StandardError is caught at debug level.
108
+ private def wait_for_ready(page, options)
109
+ return nil unless options.key?(:readiness) || options.key?('readiness')
110
+
111
+ readiness_config = options[:readiness] || options['readiness'] || {}
112
+ return nil if readiness_config.is_a?(Hash) && (
113
+ readiness_config[:preset] == 'disabled' || readiness_config['preset'] == 'disabled'
114
+ )
115
+
116
+ begin
117
+ page.evaluate_async_script(<<~JS)
118
+ var cfg = #{readiness_config.to_json};
119
+ var done = arguments[arguments.length - 1];
120
+ try {
121
+ if (typeof PercyDOM !== 'undefined' && typeof PercyDOM.waitForReady === 'function') {
122
+ PercyDOM.waitForReady(cfg).then(function(r){ done(r); }).catch(function(){ done(); });
123
+ } else { done(); }
124
+ } catch (e) { done(); }
125
+ JS
126
+ rescue StandardError => e
127
+ if PERCY_DEBUG then log("waitForReady failed, proceeding to serialize: #{e}") end
128
+ nil
129
+ end
130
+ end
131
+
88
132
  private def log(msg)
89
133
  puts "#{PERCY_LABEL} #{msg}"
90
134
  end
data/lib/percy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PercyCapybara
2
- VERSION = '5.0.0'.freeze
2
+ VERSION = '5.0.1.pre.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1.pre.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-15 00:00:00.000000000 Z
11
+ date: 2026-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -30,14 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 4.0.0.beta1
33
+ version: 4.0.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 4.0.0.beta1
40
+ version: 4.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: geckodriver-bin
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.28.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.28.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +98,16 @@ dependencies:
84
98
  name: capybara
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "~>"
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: '3.31'
103
+ version: '3'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - "~>"
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: '3.31'
110
+ version: '3'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: percy-style
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -125,7 +139,7 @@ licenses:
125
139
  metadata:
126
140
  bug_tracker_uri: https://github.com/percy/percy-capybara/issues
127
141
  source_code_uri: https://github.com/percy/percy-capybara
128
- post_install_message:
142
+ post_install_message:
129
143
  rdoc_options: []
130
144
  require_paths:
131
145
  - lib
@@ -136,12 +150,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
150
  version: 2.3.0
137
151
  required_rubygems_version: !ruby/object:Gem::Requirement
138
152
  requirements:
139
- - - ">="
153
+ - - ">"
140
154
  - !ruby/object:Gem::Version
141
- version: '0'
155
+ version: 1.3.1
142
156
  requirements: []
143
- rubygems_version: 3.0.3
144
- signing_key:
157
+ rubygems_version: 3.1.6
158
+ signing_key:
145
159
  specification_version: 4
146
160
  summary: Percy visual testing for Capybara
147
161
  test_files: []