From 0559b55cf65cef6073741e61bca131ae195fadc2 Mon Sep 17 00:00:00 2001 From: rishigupta1599 Date: Wed, 6 May 2026 00:49:58 +0530 Subject: [PATCH] fix: merge .percy.yml config options with snapshot options for serializeDOM Config options from .percy.yml (like widths, minHeight, enableJavaScript, etc.) were not being passed to PercyDOM.serialize(). Only per-snapshot options were used. Now merges both, with per-snapshot options taking priority. Co-Authored-By: Claude Opus 4.6 --- src/main/java/io/percy/playwright/Percy.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/percy/playwright/Percy.java b/src/main/java/io/percy/playwright/Percy.java index 2f2224e..aacf5eb 100644 --- a/src/main/java/io/percy/playwright/Percy.java +++ b/src/main/java/io/percy/playwright/Percy.java @@ -299,6 +299,19 @@ public JSONObject snapshot(String name, Map options) { if ("automate".equals(sessionType)) { throw new RuntimeException("Invalid function call - snapshot(). Please use screenshot() function while using Percy with Automate. For more information on usage of PercyScreenshot, refer https://www.browserstack.com/docs/percy/integrate/functional-and-visual"); } Object domSnapshot = null; + + // Merge .percy.yml config options with snapshot options (snapshot options take priority) + Map mergedOptions = new HashMap<>(); + if (cliConfig != null && cliConfig.has("snapshot") && !cliConfig.isNull("snapshot")) { + JSONObject snapshotConfig = cliConfig.getJSONObject("snapshot"); + for (String key : snapshotConfig.keySet()) { + mergedOptions.put(key, snapshotConfig.get(key)); + } + } + if (options != null) { + mergedOptions.putAll(options); + } + try { String percyDomScript = fetchPercyDOM(); page.evaluate(percyDomScript); @@ -310,10 +323,10 @@ public JSONObject snapshot(String name, Map options) { log("Cookie collection failed: " + e.getMessage(), "debug"); } - if (isCaptureResponsiveDOM(options)) { - domSnapshot = captureResponsiveDom(cookies, percyDomScript, options); + if (isCaptureResponsiveDOM(mergedOptions)) { + domSnapshot = captureResponsiveDom(cookies, percyDomScript, mergedOptions); } else { - domSnapshot = getSerializedDOM(cookies, percyDomScript, options); + domSnapshot = getSerializedDOM(cookies, percyDomScript, mergedOptions); } } catch (Exception e) { log("Snapshot capture failed: " + e.getMessage());