@browserstack/mcp-server 1.2.3 → 1.2.4
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.
- package/README.md +88 -2
- package/dist/lib/device-cache.js +20 -17
- package/dist/lib/inmemory-store.d.ts +1 -0
- package/dist/lib/inmemory-store.js +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +27 -0
- package/dist/server-factory.js +6 -0
- package/dist/tools/add-percy-snapshots.d.ts +5 -0
- package/dist/tools/add-percy-snapshots.js +17 -0
- package/dist/tools/appautomate-utils/appium-sdk/config-generator.d.ts +1 -0
- package/dist/tools/appautomate-utils/appium-sdk/config-generator.js +50 -0
- package/dist/tools/appautomate-utils/appium-sdk/constants.d.ts +23 -0
- package/dist/tools/appautomate-utils/appium-sdk/constants.js +43 -0
- package/dist/tools/appautomate-utils/appium-sdk/formatter.d.ts +8 -0
- package/dist/tools/appautomate-utils/appium-sdk/formatter.js +59 -0
- package/dist/tools/appautomate-utils/appium-sdk/handler.d.ts +3 -0
- package/dist/tools/appautomate-utils/appium-sdk/handler.js +52 -0
- package/dist/tools/appautomate-utils/appium-sdk/index.d.ts +7 -0
- package/dist/tools/appautomate-utils/appium-sdk/index.js +8 -0
- package/dist/tools/appautomate-utils/appium-sdk/instructions.d.ts +3 -0
- package/dist/tools/appautomate-utils/appium-sdk/instructions.js +47 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/csharp.d.ts +2 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/csharp.js +78 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/java.d.ts +8 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/java.js +87 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/nodejs.d.ts +3 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/nodejs.js +194 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/python.d.ts +3 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/python.js +76 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/ruby.d.ts +2 -0
- package/dist/tools/appautomate-utils/appium-sdk/languages/ruby.js +85 -0
- package/dist/tools/appautomate-utils/appium-sdk/types.d.ts +57 -0
- package/dist/tools/appautomate-utils/appium-sdk/types.js +54 -0
- package/dist/tools/appautomate-utils/appium-sdk/utils.d.ts +17 -0
- package/dist/tools/appautomate-utils/appium-sdk/utils.js +64 -0
- package/dist/tools/appautomate-utils/{appautomate.d.ts → native-execution/appautomate.d.ts} +1 -1
- package/dist/tools/appautomate-utils/{appautomate.js → native-execution/appautomate.js} +2 -2
- package/dist/tools/appautomate-utils/native-execution/constants.d.ts +10 -0
- package/dist/tools/appautomate-utils/native-execution/constants.js +36 -0
- package/dist/tools/appautomate-utils/native-execution/types.d.ts +19 -0
- package/dist/tools/appautomate-utils/{types.js → native-execution/types.js} +5 -1
- package/dist/tools/appautomate.js +25 -40
- package/dist/tools/bstack-sdk.d.ts +2 -15
- package/dist/tools/bstack-sdk.js +10 -119
- package/dist/tools/build-insights.d.ts +7 -0
- package/dist/tools/build-insights.js +67 -0
- package/dist/tools/list-test-files.d.ts +2 -0
- package/dist/tools/list-test-files.js +36 -0
- package/dist/tools/percy-sdk.d.ts +4 -0
- package/dist/tools/percy-sdk.js +71 -0
- package/dist/tools/percy-snapshot-utils/constants.d.ts +16 -0
- package/dist/tools/percy-snapshot-utils/constants.js +500 -0
- package/dist/tools/percy-snapshot-utils/detect-test-files.d.ts +10 -0
- package/dist/tools/percy-snapshot-utils/detect-test-files.js +175 -0
- package/dist/tools/percy-snapshot-utils/types.d.ts +15 -0
- package/dist/tools/percy-snapshot-utils/utils.d.ts +4 -0
- package/dist/tools/percy-snapshot-utils/utils.js +30 -0
- package/dist/tools/rca-agent-utils/constants.d.ts +13 -0
- package/dist/tools/rca-agent-utils/constants.js +24 -0
- package/dist/tools/rca-agent-utils/format-rca.d.ts +1 -0
- package/dist/tools/rca-agent-utils/format-rca.js +37 -0
- package/dist/tools/rca-agent-utils/get-build-id.d.ts +1 -0
- package/dist/tools/rca-agent-utils/get-build-id.js +18 -0
- package/dist/tools/rca-agent-utils/get-failed-test-id.d.ts +2 -0
- package/dist/tools/rca-agent-utils/get-failed-test-id.js +69 -0
- package/dist/tools/rca-agent-utils/rca-data.d.ts +9 -0
- package/dist/tools/rca-agent-utils/rca-data.js +196 -0
- package/dist/tools/rca-agent-utils/types.d.ts +48 -0
- package/dist/tools/rca-agent-utils/types.js +20 -0
- package/dist/tools/rca-agent.d.ts +14 -0
- package/dist/tools/rca-agent.js +119 -0
- package/dist/tools/review-agent-utils/build-counts.d.ts +7 -0
- package/dist/tools/review-agent-utils/build-counts.js +44 -0
- package/dist/tools/review-agent-utils/percy-approve-reject.d.ts +6 -0
- package/dist/tools/review-agent-utils/percy-approve-reject.js +39 -0
- package/dist/tools/review-agent-utils/percy-diffs.d.ts +9 -0
- package/dist/tools/review-agent-utils/percy-diffs.js +35 -0
- package/dist/tools/review-agent-utils/percy-snapshots.d.ts +11 -0
- package/dist/tools/review-agent-utils/percy-snapshots.js +58 -0
- package/dist/tools/review-agent.d.ts +5 -0
- package/dist/tools/review-agent.js +56 -0
- package/dist/tools/run-percy-scan.d.ts +8 -0
- package/dist/tools/run-percy-scan.js +37 -0
- package/dist/tools/sdk-utils/{commands.d.ts → bstack/commands.d.ts} +1 -1
- package/dist/tools/sdk-utils/bstack/commands.js +88 -0
- package/dist/tools/sdk-utils/bstack/configUtils.d.ts +4 -0
- package/dist/tools/sdk-utils/bstack/configUtils.js +66 -0
- package/dist/tools/sdk-utils/bstack/constants.d.ts +58 -0
- package/dist/tools/sdk-utils/{constants.js → bstack/constants.js} +117 -78
- package/dist/tools/sdk-utils/{constants.d.ts → bstack/frameworks.d.ts} +1 -1
- package/dist/tools/sdk-utils/bstack/frameworks.js +57 -0
- package/dist/tools/sdk-utils/bstack/index.d.ts +4 -0
- package/dist/tools/sdk-utils/bstack/index.js +5 -0
- package/dist/tools/sdk-utils/bstack/sdkHandler.d.ts +4 -0
- package/dist/tools/sdk-utils/bstack/sdkHandler.js +74 -0
- package/dist/tools/sdk-utils/common/constants.d.ts +10 -0
- package/dist/tools/sdk-utils/common/constants.js +86 -0
- package/dist/tools/sdk-utils/common/formatUtils.d.ts +5 -0
- package/dist/tools/sdk-utils/common/formatUtils.js +27 -0
- package/dist/tools/sdk-utils/common/index.d.ts +3 -0
- package/dist/tools/sdk-utils/common/index.js +4 -0
- package/dist/tools/sdk-utils/common/instructionUtils.d.ts +8 -0
- package/dist/tools/sdk-utils/common/instructionUtils.js +20 -0
- package/dist/tools/sdk-utils/common/schema.d.ts +73 -0
- package/dist/tools/sdk-utils/common/schema.js +51 -0
- package/dist/tools/sdk-utils/common/types.d.ts +66 -0
- package/dist/tools/sdk-utils/{types.js → common/types.js} +15 -2
- package/dist/tools/sdk-utils/common/utils.d.ts +25 -0
- package/dist/tools/sdk-utils/common/utils.js +90 -0
- package/dist/tools/sdk-utils/handler.d.ts +4 -0
- package/dist/tools/sdk-utils/handler.js +119 -0
- package/dist/tools/sdk-utils/percy-automate/constants.d.ts +11 -0
- package/dist/tools/sdk-utils/percy-automate/constants.js +338 -0
- package/dist/tools/sdk-utils/percy-automate/frameworks.d.ts +8 -0
- package/dist/tools/sdk-utils/percy-automate/frameworks.js +50 -0
- package/dist/tools/sdk-utils/percy-automate/handler.d.ts +3 -0
- package/dist/tools/sdk-utils/percy-automate/handler.js +30 -0
- package/dist/tools/sdk-utils/percy-automate/index.d.ts +1 -0
- package/dist/tools/sdk-utils/percy-automate/index.js +2 -0
- package/dist/tools/sdk-utils/percy-automate/types.d.ts +13 -0
- package/dist/tools/sdk-utils/percy-automate/types.js +1 -0
- package/dist/tools/sdk-utils/percy-bstack/constants.d.ts +4 -0
- package/dist/tools/sdk-utils/{percy → percy-bstack}/constants.js +13 -39
- package/dist/tools/sdk-utils/percy-bstack/frameworks.d.ts +2 -0
- package/dist/tools/sdk-utils/percy-bstack/frameworks.js +27 -0
- package/dist/tools/sdk-utils/percy-bstack/handler.d.ts +4 -0
- package/dist/tools/sdk-utils/percy-bstack/handler.js +99 -0
- package/dist/tools/sdk-utils/percy-bstack/index.d.ts +4 -0
- package/dist/tools/sdk-utils/percy-bstack/index.js +4 -0
- package/dist/tools/sdk-utils/percy-bstack/instructions.d.ts +7 -0
- package/dist/tools/sdk-utils/{percy → percy-bstack}/instructions.js +5 -9
- package/dist/tools/sdk-utils/percy-bstack/types.d.ts +13 -0
- package/dist/tools/sdk-utils/percy-bstack/types.js +5 -0
- package/dist/tools/sdk-utils/percy-web/constants.d.ts +41 -0
- package/dist/tools/sdk-utils/percy-web/constants.js +883 -0
- package/dist/tools/sdk-utils/percy-web/fetchPercyToken.d.ts +4 -0
- package/dist/tools/sdk-utils/percy-web/fetchPercyToken.js +32 -0
- package/dist/tools/sdk-utils/percy-web/frameworks.d.ts +7 -0
- package/dist/tools/sdk-utils/percy-web/frameworks.js +103 -0
- package/dist/tools/sdk-utils/percy-web/handler.d.ts +4 -0
- package/dist/tools/sdk-utils/percy-web/handler.js +27 -0
- package/dist/tools/sdk-utils/percy-web/index.d.ts +4 -0
- package/dist/tools/sdk-utils/percy-web/index.js +4 -0
- package/dist/tools/sdk-utils/percy-web/types.d.ts +12 -0
- package/dist/tools/sdk-utils/percy-web/types.js +1 -0
- package/dist/tools/testmanagement-utils/create-testrun.d.ts +4 -4
- package/dist/tools/testmanagement-utils/update-testrun.d.ts +4 -4
- package/package.json +2 -1
- package/dist/tools/appautomate-utils/types.d.ts +0 -5
- package/dist/tools/sdk-utils/commands.js +0 -65
- package/dist/tools/sdk-utils/instructions.d.ts +0 -6
- package/dist/tools/sdk-utils/instructions.js +0 -99
- package/dist/tools/sdk-utils/percy/constants.d.ts +0 -3
- package/dist/tools/sdk-utils/percy/instructions.d.ts +0 -10
- package/dist/tools/sdk-utils/percy/types.d.ts +0 -5
- package/dist/tools/sdk-utils/types.d.ts +0 -40
- /package/dist/tools/{sdk-utils/percy → percy-snapshot-utils}/types.js +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { getBrowserStackAuth } from "../../../lib/get-auth.js";
|
|
2
|
+
import { getSDKPrefixCommand } from "../bstack/commands.js";
|
|
3
|
+
import { generateBrowserStackYMLInstructions } from "../bstack/configUtils.js";
|
|
4
|
+
import { getInstructionsForProjectConfiguration } from "../common/instructionUtils.js";
|
|
5
|
+
import { formatPercyInstructions, getPercyInstructions, } from "./instructions.js";
|
|
6
|
+
export function runPercyWithBrowserstackSDK(input, config) {
|
|
7
|
+
const steps = [];
|
|
8
|
+
const authString = getBrowserStackAuth(config);
|
|
9
|
+
const [username, accessKey] = authString.split(":");
|
|
10
|
+
// Check if Percy is supported for this configuration
|
|
11
|
+
const percyResult = getPercyInstructions(input.detectedLanguage, input.detectedBrowserAutomationFramework, input.detectedTestingFramework);
|
|
12
|
+
if (!percyResult) {
|
|
13
|
+
// Percy not supported for this configuration
|
|
14
|
+
return {
|
|
15
|
+
steps: [
|
|
16
|
+
{
|
|
17
|
+
type: "error",
|
|
18
|
+
title: "Percy Not Supported",
|
|
19
|
+
content: `Percy is not supported for this ${input.detectedBrowserAutomationFramework} framework configuration. Please use BrowserStack SDK only mode or try a different framework combination.`,
|
|
20
|
+
isError: true,
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
requiresPercy: true,
|
|
24
|
+
shouldSkipFormatting: true,
|
|
25
|
+
missingDependencies: [],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Handle frameworks with unique setup instructions that don't use browserstack.yml
|
|
29
|
+
if (input.detectedBrowserAutomationFramework === "cypress" ||
|
|
30
|
+
input.detectedTestingFramework === "webdriverio") {
|
|
31
|
+
const frameworkInstructions = getInstructionsForProjectConfiguration(input.detectedBrowserAutomationFramework, input.detectedTestingFramework, input.detectedLanguage, username, accessKey);
|
|
32
|
+
if (frameworkInstructions && frameworkInstructions.setup) {
|
|
33
|
+
steps.push({
|
|
34
|
+
type: "instruction",
|
|
35
|
+
title: "Framework-Specific Setup",
|
|
36
|
+
content: frameworkInstructions.setup,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
steps.push({
|
|
40
|
+
type: "instruction",
|
|
41
|
+
title: "Percy Setup (BrowserStack SDK + Percy)",
|
|
42
|
+
content: formatPercyInstructions(percyResult),
|
|
43
|
+
});
|
|
44
|
+
if (frameworkInstructions && frameworkInstructions.run) {
|
|
45
|
+
steps.push({
|
|
46
|
+
type: "instruction",
|
|
47
|
+
title: "Run the tests",
|
|
48
|
+
content: frameworkInstructions.run,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
steps,
|
|
53
|
+
requiresPercy: true,
|
|
54
|
+
missingDependencies: [],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Default flow using browserstack.yml with Percy
|
|
58
|
+
const sdkSetupCommand = getSDKPrefixCommand(input.detectedLanguage, input.detectedTestingFramework, username, accessKey);
|
|
59
|
+
if (sdkSetupCommand) {
|
|
60
|
+
steps.push({
|
|
61
|
+
type: "instruction",
|
|
62
|
+
title: "Install BrowserStack SDK",
|
|
63
|
+
content: sdkSetupCommand,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const ymlInstructions = generateBrowserStackYMLInstructions(input.desiredPlatforms, true, input.projectName);
|
|
67
|
+
if (ymlInstructions) {
|
|
68
|
+
steps.push({
|
|
69
|
+
type: "instruction",
|
|
70
|
+
title: "Configure browserstack.yml",
|
|
71
|
+
content: ymlInstructions,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const frameworkInstructions = getInstructionsForProjectConfiguration(input.detectedBrowserAutomationFramework, input.detectedTestingFramework, input.detectedLanguage, username, accessKey);
|
|
75
|
+
if (frameworkInstructions && frameworkInstructions.setup) {
|
|
76
|
+
steps.push({
|
|
77
|
+
type: "instruction",
|
|
78
|
+
title: "Framework-Specific Setup",
|
|
79
|
+
content: frameworkInstructions.setup,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
steps.push({
|
|
83
|
+
type: "instruction",
|
|
84
|
+
title: "Percy Setup (BrowserStack SDK + Percy)",
|
|
85
|
+
content: formatPercyInstructions(percyResult),
|
|
86
|
+
});
|
|
87
|
+
if (frameworkInstructions && frameworkInstructions.run) {
|
|
88
|
+
steps.push({
|
|
89
|
+
type: "instruction",
|
|
90
|
+
title: "Run the tests",
|
|
91
|
+
content: frameworkInstructions.run,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
steps,
|
|
96
|
+
requiresPercy: true,
|
|
97
|
+
missingDependencies: [],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SDKSupportedBrowserAutomationFramework, SDKSupportedLanguage, SDKSupportedTestingFramework } from "../common/types.js";
|
|
2
|
+
export declare function getPercyInstructions(language: SDKSupportedLanguage, automationFramework: SDKSupportedBrowserAutomationFramework, testingFramework: SDKSupportedTestingFramework): {
|
|
3
|
+
instructions: string;
|
|
4
|
+
} | null;
|
|
5
|
+
export declare function formatPercyInstructions(instructions: {
|
|
6
|
+
instructions: string;
|
|
7
|
+
}): string;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { PERCY_INSTRUCTIONS } from "./
|
|
2
|
-
|
|
3
|
-
* Retrieves Percy-specific instructions for a given language and framework.
|
|
4
|
-
*/
|
|
1
|
+
import { PERCY_INSTRUCTIONS } from "./frameworks.js";
|
|
2
|
+
// Retrieves Percy-specific instructions for a given language and framework
|
|
5
3
|
export function getPercyInstructions(language, automationFramework, testingFramework) {
|
|
6
4
|
const langConfig = PERCY_INSTRUCTIONS[language];
|
|
7
5
|
if (!langConfig) {
|
|
@@ -17,12 +15,10 @@ export function getPercyInstructions(language, automationFramework, testingFrame
|
|
|
17
15
|
}
|
|
18
16
|
return percyInstructions;
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
* Formats the retrieved Percy instructions into a user-friendly string.
|
|
22
|
-
*/
|
|
18
|
+
// Formats the retrieved Percy instructions into a user-friendly string
|
|
23
19
|
export function formatPercyInstructions(instructions) {
|
|
24
|
-
return
|
|
20
|
+
return `---STEP--- Percy Visual Testing Setup
|
|
25
21
|
To enable visual testing with Percy, you need to make the following changes to your project configuration and test scripts.
|
|
26
|
-
${instructions.
|
|
22
|
+
${instructions.instructions}
|
|
27
23
|
`;
|
|
28
24
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type for Percy + BrowserStack SDK configuration mapping.
|
|
3
|
+
* Structure: language -> automationFramework -> testingFramework -> { instructions: (bsdkToken: string) => string }
|
|
4
|
+
*/
|
|
5
|
+
export type ConfigMapping = {
|
|
6
|
+
[language: string]: {
|
|
7
|
+
[automationFramework: string]: {
|
|
8
|
+
[testingFramework: string]: {
|
|
9
|
+
instructions: string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const percyReviewSnapshotsStep = "\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n";
|
|
2
|
+
export declare const pythonInstructionsSnapshot = "\nExample:\n```python\n- Import the Percy snapshot helper:\nfrom selenium import webdriver\nfrom percy import percy_snapshot\n\ndriver = webdriver.Chrome()\ndriver.get('http://localhost:8000')\npercy_snapshot(driver, 'Home page')\n# ... more test steps ...\npercy_snapshot(driver, 'After login')\n```\n";
|
|
3
|
+
export declare const nodejsInstructionsSnapshot = "\n- Import the Percy snapshot helper:\n const { percySnapshot } = require('@percy/selenium-js');\n - In your test, take snapshots like this:\n await percySnapshot(driver, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { Builder } = require('selenium-webdriver');\nconst percySnapshot = require('@percy/selenium-webdriver');\n\nconst driver = await new Builder().forBrowser('chrome').build();\nawait driver.get('http://localhost:8000');\nawait percySnapshot(driver, 'Home page');\n```\n";
|
|
4
|
+
export declare const javaInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n import io.percy.selenium.Percy;\n - In your test, take snapshots like this:\n Percy percy = new Percy(driver);\n percy.snapshot(\"Your snapshot name\");\n Example:\n```java\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport io.percy.selenium.Percy;\n\npublic class PercyExample {\n public static void main(String[] args) {\n WebDriver driver = new ChromeDriver();\n driver.get(\"http://localhost:8000\");\n Percy percy = new Percy(driver);\n percy.snapshot(\"Home page\");\n driver.quit();\n }\n}\n```";
|
|
5
|
+
export declare const rubyInstructionsSnapshot = "\n - Require the Percy snapshot helper:\n require 'percy'\n - In your test, take snapshots like this:\n Percy.snapshot(page, 'Your snapshot name')\n\nExample:\n```ruby\nrequire 'selenium-webdriver'\nrequire 'percy'\n\ndriver = Selenium::WebDriver.for :chrome\ndriver.get('http://localhost:8000')\nPercy.snapshot(driver, 'Your snapshot name')\ndriver.quit\n```\n";
|
|
6
|
+
export declare const rubyCapybaraInstructionsSnapshot = "\n - In your test setup file, require percy/capybara:\n require 'percy/capybara'\n - In your test, take snapshots like this:\n page.percy_snapshot('Capybara snapshot')\n\nExample:\n```ruby\nrequire 'percy/capybara'\n\ndescribe 'my feature', type: :feature do\n it 'renders the page' do\n visit 'https://example.com'\n page.percy_snapshot('Capybara snapshot')\n end\nend\n```\n\n - The snapshot method arguments are:\n page.percy_snapshot(name[, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n";
|
|
7
|
+
export declare const csharpInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n using PercyIO.Selenium;\n - In your test, take snapshots like this:\n Percy.Snapshot(driver,\"Your snapshot name\");\n\nExample:\n```csharp\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\nusing PercyIO.Selenium;\n\nclass PercyExample\n{\n static void Main()\n {\n IWebDriver driver = new ChromeDriver();\n driver.Navigate().GoToUrl(\"http://localhost:8000\");\n Percy.Snapshot(driver,\"Empty Todo State\");\n driver.Quit();\n }\n}\n```\n";
|
|
8
|
+
export declare const javaPlaywrightInstructionsSnapshot = "\n - Import the Percy library and use the snapshot method:\n percy.snapshot(\"snapshot_1\");\n - You can also pass options:\n Map<String, Object> options = new HashMap<>();\n options.put(\"testCase\", \"Should add product to cart\");\n percy.snapshot(\"snapshot_2\", options);\n\nExample:\n```java\nimport com.microsoft.playwright.*;\nimport io.percy.playwright.*;\n\npublic class PercyPlaywrightExample {\n public static void main(String[] args) {\n try (Playwright playwright = Playwright.create()) {\n Browser browser = playwright.chromium().launch();\n Page page = browser.newPage();\n Percy percy = new Percy(page);\n\n page.navigate(\"http://localhost:8000\");\n percy.snapshot(\"Home page\");\n\n // ... more test steps ...\n percy.snapshot(\"After login\");\n\n browser.close();\n }\n }\n}\n```\n";
|
|
9
|
+
export declare const nodejsPlaywrightInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/playwright');\n - In your test, take snapshots like this:\n await percySnapshot(page, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { chromium } = require('playwright');\nconst percySnapshot = require('@percy/playwright');\n\n(async () => {\n const browser = await chromium.launch();\n const page = await browser.newPage();\n await page.goto('http://example.com/', { waitUntil: 'networkidle' });\n await percySnapshot(page, 'Example Site');\n await browser.close();\n})();\n```\n";
|
|
10
|
+
export declare const nodejsWebdriverioInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/selenium-webdriver');\n - In your test, take snapshots like this:\n await percySnapshot(driver, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { remote } = require('webdriverio');\nconst percySnapshot = require('@percy/selenium-webdriver');\n\n(async () => {\n const browser = await remote({\n logLevel: 'error',\n capabilities: { browserName: 'chrome' }\n });\n\n await browser.url('https://example.com');\n await percySnapshot(browser, 'WebdriverIO example');\n await browser.deleteSession();\n})();\n```\n";
|
|
11
|
+
export declare const nodejsEmberInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/ember';\n - In your test, take snapshots like this:\n await percySnapshot('My Snapshot');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/ember';\ndescribe('My ppp', () => {\n // ...app setup\n it('about page should look good', async () => {\n await visit('/about');\n await percySnapshot('My Snapshot');\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n";
|
|
12
|
+
export declare const nodejsCypressInstructionsSnapshot = "\n - Import the Percy snapshot helper in your cypress/support/e2e.js file:\n import '@percy/cypress';\n - If you\u2019re using TypeScript, include \"types\": [\"cypress\", \"@percy/cypress\"] in your tsconfig.json file.\n - In your test, take snapshots like this:\n cy.percySnapshot();\n\nExample:\n```javascript\nimport '@percy/cypress';\n\ndescribe('Integration test with visual testing', function() {\n it('Loads the homepage', function() {\n // Load the page or perform any other interactions with the app.\n cy.visit('<URL under test>');\n // Take a snapshot for visual diffing\n cy.percySnapshot();\n });\n});\n```\n\n - The snapshot method arguments are:\n cy.percySnapshot([name][, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n\n - For example:\n cy.percySnapshot();\n cy.percySnapshot('Homepage test');\n cy.percySnapshot('Homepage responsive test', { widths: [768, 992, 1200] });\n";
|
|
13
|
+
export declare const nodejsPuppeteerInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/puppeteer');\n - In your test, take snapshots like this:\n await percySnapshot(page, 'Snapshot name');\n\nExample:\n```javascript\nconst puppeteer = require('puppeteer');\nconst percySnapshot = require('@percy/puppeteer');\n\ndescribe('Integration test with visual testing', function() {\n it('Loads the homepage', async function() {\n const browser = await puppeteer.launch();\n const page = await browser.newPage();\n await page.goto('https://example.com');\n await percySnapshot(page, this.test.fullTitle());\n await browser.close();\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(page, name[, options])\n page (required) - A puppeteer page instance\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n - For example:\n percySnapshot(page, 'Homepage test');\n percySnapshot(page, 'Homepage responsive test', { widths: [768, 992, 1200] });\n";
|
|
14
|
+
export declare const nodejsNightmareInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n const Nightmare = require('nightmare');\n const percySnapshot = require('@percy/nightmare');\n - In your test, take snapshots like this:\n .use(percySnapshot('Snapshot name'))\n\nExample:\n```javascript\nconst Nightmare = require('nightmare');\nconst percySnapshot = require('@percy/nightmare');\n\nNightmare()\n .goto('http://example.com')\n // ... other actions ...\n .use(percySnapshot('Example Snapshot'))\n // ... more actions ...\n .end()\n .then(() => {\n // ...\n });\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n";
|
|
15
|
+
export declare const nodejsNightwatchInstructionsSnapshot = "\n - Import the Percy library and add the path exported by @percy/nightwatch to your Nightwatch configuration\u2019s custom_commands_path property:\n const percy = require('@percy/nightwatch');\n module.exports = {\n // ...\n custom_commands_path: [percy.path],\n // ...\n };\n - In your test, take snapshots like this:\n browser.percySnapshot('Snapshot name');\n\nExample:\n```javascript\nconst percy = require('@percy/nightwatch');\nmodule.exports = {\n // ...\n custom_commands_path: [percy.path],\n // ...\n};\n\n// Example test\nmodule.exports = {\n 'Snapshots pages': function(browser) {\n browser\n .url('http://example.com')\n .assert.containsText('h1', 'Example Domain')\n .percySnapshot('Example snapshot');\n browser\n .url('http://google.com')\n .assert.elementPresent('img[alt=\"Google\"]')\n .percySnapshot('Google homepage');\n browser.end();\n }\n};\n```\n\n - The snapshot method arguments are:\n percySnapshot([name][, options])\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n";
|
|
16
|
+
export declare const nodejsProtractorInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/protractor';\n - In your test, take snapshots like this:\n await percySnapshot('Snapshot name');\n // or\n await percySnapshot(browser, 'Snapshot name');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/protractor';\ndescribe('angularjs homepage', function() {\n it('should greet the named user', async function() {\n await browser.get('https://www.angularjs.org');\n await percySnapshot('AngularJS homepage');\n await element(by.model('yourName')).sendKeys('Percy');\n var greeting = element(by.binding('yourName'));\n expect(await greeting.getText()).toEqual('Hello Percy!');\n await percySnapshot('AngularJS homepage greeting');\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n Standalone mode:\n percySnapshot(browser, name[, options])\n browser (required) - The Protractor browser object\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n";
|
|
17
|
+
export declare const nodejsTestcafeInstructionsSnapshot = "\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/testcafe';\n - In your test, take snapshots like this:\n await percySnapshot(t, 'Snapshot name');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/testcafe';\nfixture('MyFixture')\n .page('https://devexpress.github.io/testcafe/example');\ntest('Test1', async t => {\n await t.typeText('#developer-name', 'John Doe');\n await percySnapshot(t, 'TestCafe Example');\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(t, name[, options])\n t (required) - The test controller instance passed from test\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n";
|
|
18
|
+
export declare const nodejsGatsbyInstructionsSnapshot = "\n - Add the Percy plugin to your gatsby-config.js file:\n module.exports = {\n plugins: [`gatsby-plugin-percy`]\n }\n\n - The plugin will take snapshots of discovered pages during the build process.\n\n - Example gatsby-config.js with options:\n```javascript\nmodule.exports = {\n plugins: [{\n resolve: `gatsby-plugin-percy`,\n options: {\n // gatsby specific options\n query: `{\n allSitePage { nodes { path } }\n allOtherPage { nodes { path } }\n }`,\n resolvePages: ({\n allSitePage: { nodes: allPages },\n allOtherPage: { nodes: otherPages }\n }) => {\n return [...allPages, ...otherPages]\n .map(({ path }) => path);\n },\n // percy static snapshot options\n exclude: [\n '/dev-404-page/',\n '/offline-plugin-app-shell-fallback/'\n ],\n overrides: [{\n include: '/foobar/',\n waitForSelector: '.done-loading',\n additionalSnapshots: [{\n suffix: ' - after btn click',\n execute: () => document.querySelector('.btn').click()\n }]\n }]\n }\n }]\n}\n```\n";
|
|
19
|
+
export declare const nodejsStorybookInstructionsSnapshot = "\n - Add Percy parameters to your stories to customize snapshots:\n```js\nMyStory.parameters = {\n percy: {\n name: 'My snapshot',\n additionalSnapshots: [\n { prefix: '[Dark mode] ', args: { colorScheme: 'dark' } },\n { suffix: ' with globals', globals: { textDirection: 'rtl' } },\n { name: 'Search snapshot', queryParams: { search: 'foobar' } }\n ]\n }\n};\n```\n - Use argument names and values defined in your codebase.\n";
|
|
20
|
+
export declare const pythonPlaywrightInstructionsSnapshot = "\n - Import the Percy snapshot helper and use the snapshot method:\n percy_snapshot(page, name=\"Your snapshot name\")\n - You can also use:\n percy_screenshot(page, name=\"Your snapshot name\", options={})\n\nExample:\n```python\nfrom playwright.sync_api import sync_playwright\nfrom percy import percy_snapshot\n\nwith sync_playwright() as p:\n browser = p.chromium.launch()\n page = browser.new_page()\n page.goto(\"http://localhost:8000\")\n percy_snapshot(page, name=\"Home page\")\n\n # ... more test steps ...\n percy_snapshot(page, name=\"After login\")\n\n browser.close()\n```\n";
|
|
21
|
+
export declare const csharpPlaywrightInstructionsSnapshot = "\n - Import the Percy snapshot helper and use the snapshot method:\n Percy.Snapshot(page, \"Your snapshot name\");\n - You can also pass options:\n Percy.Snapshot(page, \"Your snapshot name\", options);\n\nExample:\n```csharp\nusing Microsoft.Playwright;\nusing PercyIO.Playwright;\n\nclass PercyPlaywrightExample\n{\n public static async Task Main()\n {\n using var playwright = await Playwright.CreateAsync();\n var browser = await playwright.Chromium.LaunchAsync();\n var page = await browser.NewPageAsync();\n\n await page.GotoAsync(\"http://localhost:8000\");\n Percy.Snapshot(page, \"Home page\");\n\n // ... more test steps ...\n Percy.Snapshot(page, \"After login\");\n\n await browser.CloseAsync();\n }\n}\n```\n";
|
|
22
|
+
export declare const pythonInstructions = "\nInstall Percy dependencies\n - Install Percy CLI:\n npm install --save-dev @percy/cli\n - Install Percy Selenium Python package:\n pip install percy-selenium\nIf faced any issue create a virtual environment and proceed.\nUpdate your Python Selenium script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\nExample:\n```python\n- Import the Percy snapshot helper:\nfrom selenium import webdriver\nfrom percy import percy_snapshot\n\ndriver = webdriver.Chrome()\ndriver.get('http://localhost:8000')\npercy_snapshot(driver, 'Home page')\n# ... more test steps ...\npercy_snapshot(driver, 'After login')\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- python tests.py').\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
23
|
+
export declare const nodejsInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI:\n npm install --save-dev @percy/cli\n - Install Percy SDK for Node.js:\n npm install @percy/selenium-webdriver\n---STEP---\nUpdate your Node.js Selenium script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n- Import the Percy snapshot helper:\n const { percySnapshot } = require('@percy/selenium-js');\n - In your test, take snapshots like this:\n await percySnapshot(driver, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { Builder } = require('selenium-webdriver');\nconst percySnapshot = require('@percy/selenium-webdriver');\n\nconst driver = await new Builder().forBrowser('chrome').build();\nawait driver.get('http://localhost:8000');\nawait percySnapshot(driver, 'Home page');\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- node script.js').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
24
|
+
export declare const javaInstructions = "\n---STEP---\nAdd Percy dependencies to your project\n - For Maven, add to your pom.xml:\n <dependency>\n <groupId>io.percy</groupId>\n <artifactId>percy-java-selenium</artifactId>\n <version>1.0.0</version>\n </dependency>\n - For Gradle, add to your build.gradle:\n implementation 'io.percy:percy-java-selenium:1.0.0'\n - For CLI usage, install Percy CLI:\n npm install --save-dev @percy/cli\n\n---STEP---\nUpdate your Java Selenium test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n import io.percy.selenium.Percy;\n - In your test, take snapshots like this:\n Percy percy = new Percy(driver);\n percy.snapshot(\"Your snapshot name\");\n Example:\n```java\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport io.percy.selenium.Percy;\n\npublic class PercyExample {\n public static void main(String[] args) {\n WebDriver driver = new ChromeDriver();\n driver.get(\"http://localhost:8000\");\n Percy percy = new Percy(driver);\n percy.snapshot(\"Home page\");\n driver.quit();\n }\n}\n```\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- mvn test').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
25
|
+
export declare const rubyInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI:\n npm install --save-dev @percy/cli\n - Install Percy Ruby Selenium gem:\n gem install percy-selenium\n\n---STEP---\nUpdate your Ruby Selenium test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Require the Percy snapshot helper:\n require 'percy'\n - In your test, take snapshots like this:\n Percy.snapshot(page, 'Your snapshot name')\n\nExample:\n```ruby\nrequire 'selenium-webdriver'\nrequire 'percy'\n\ndriver = Selenium::WebDriver.for :chrome\ndriver.get('http://localhost:8000')\nPercy.snapshot(driver, 'Your snapshot name')\ndriver.quit\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- bundle exec rspec').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
26
|
+
export declare const rubyCapybaraInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI:\n npm install --save-dev @percy/cli\n - Install Percy Capybara gem:\n gem install percy-capybara\n\n---STEP---\nUpdate your Capybara or Rails test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - In your test setup file, require percy/capybara:\n require 'percy/capybara'\n - In your test, take snapshots like this:\n page.percy_snapshot('Capybara snapshot')\n\nExample:\n```ruby\nrequire 'percy/capybara'\n\ndescribe 'my feature', type: :feature do\n it 'renders the page' do\n visit 'https://example.com'\n page.percy_snapshot('Capybara snapshot')\n end\nend\n```\n\n - The snapshot method arguments are:\n page.percy_snapshot(name[, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- bundle exec rspec').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
27
|
+
export declare const csharpInstructions = "\nInstall Percy CLI by running the following command:\nnpm install --save-dev @percy/cli\n\n---STEP---\nAdd Percy dependencies to your project\n - Add the Percy .NET Selenium NuGet package:\n dotnet add package PercyIO.Selenium\n\n---STEP---\nUpdate your C# Selenium test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n using PercyIO.Selenium;\n - In your test, take snapshots like this:\n Percy.Snapshot(driver,\"Your snapshot name\");\n\nExample:\n```csharp\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\nusing PercyIO.Selenium;\n\nclass PercyExample\n{\n static void Main()\n {\n IWebDriver driver = new ChromeDriver();\n driver.Navigate().GoToUrl(\"http://localhost:8000\");\n Percy.Snapshot(driver,\"Empty Todo State\");\n driver.Quit();\n }\n}\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- dotnet test').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
28
|
+
export declare const javaPlaywrightInstructions = "\nInstall Percy dependencies\n - For Maven, add to your pom.xml:\n <dependency>\n <groupId>io.percy</groupId>\n <artifactId>percy-playwright-java</artifactId>\n <version>1.0.0</version>\n </dependency>\n\n---STEP---\nUpdate your Java Playwright test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy library and use the snapshot method:\n percy.snapshot(\"snapshot_1\");\n - You can also pass options:\n Map<String, Object> options = new HashMap<>();\n options.put(\"testCase\", \"Should add product to cart\");\n percy.snapshot(\"snapshot_2\", options);\n\nExample:\n```java\nimport com.microsoft.playwright.*;\nimport io.percy.playwright.*;\n\npublic class PercyPlaywrightExample {\n public static void main(String[] args) {\n try (Playwright playwright = Playwright.create()) {\n Browser browser = playwright.chromium().launch();\n Page page = browser.newPage();\n Percy percy = new Percy(page);\n\n page.navigate(\"http://localhost:8000\");\n percy.snapshot(\"Home page\");\n\n // ... more test steps ...\n percy.snapshot(\"After login\");\n\n browser.close();\n }\n }\n}\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g. npx percy exec -- <command to run the test script file>).\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
29
|
+
export declare const nodejsPlaywrightInstructions = "\nInstall Percy dependencies\n - Install Percy Playwright SDK:\n npm install @percy/playwright\n\n---STEP---\nUpdate your Playwright JavaScript test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/playwright');\n - In your test, take snapshots like this:\n await percySnapshot(page, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { chromium } = require('playwright');\nconst percySnapshot = require('@percy/playwright');\n\n(async () => {\n const browser = await chromium.launch();\n const page = await browser.newPage();\n await page.goto('http://example.com/', { waitUntil: 'networkidle' });\n await percySnapshot(page, 'Example Site');\n await browser.close();\n})();\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., npx percy exec -- <command to run the test script file>).\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
30
|
+
export declare const nodejsWebdriverioInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI:\n npm install --save-dev @percy/cli\n - Install Percy Selenium Webdriver package:\n npm install --save-dev @percy/selenium-webdriver\n\n---STEP---\nUpdate your WebdriverIO test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/selenium-webdriver');\n - In your test, take snapshots like this:\n await percySnapshot(driver, \"Your snapshot name\");\n\nExample:\n```javascript\nconst { remote } = require('webdriverio');\nconst percySnapshot = require('@percy/selenium-webdriver');\n\n(async () => {\n const browser = await remote({\n logLevel: 'error',\n capabilities: { browserName: 'chrome' }\n });\n\n await browser.url('https://example.com');\n await percySnapshot(browser, 'WebdriverIO example');\n await browser.deleteSession();\n})();\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- wdio run wdio.conf.js').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
31
|
+
export declare const nodejsEmberInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Ember SDK:\n npm install --save-dev @percy/cli @percy/ember\n\n---STEP---\nUpdate your Ember test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/ember';\n - In your test, take snapshots like this:\n await percySnapshot('My Snapshot');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/ember';\ndescribe('My ppp', () => {\n // ...app setup\n it('about page should look good', async () => {\n await visit('/about');\n await percySnapshot('My Snapshot');\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- ember test').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
32
|
+
export declare const nodejsCypressInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Cypress SDK:\n npm install --save-dev @percy/cli @percy/cypress\n\n---STEP---\nUpdate your Cypress test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper in your cypress/support/e2e.js file:\n import '@percy/cypress';\n - If you\u2019re using TypeScript, include \"types\": [\"cypress\", \"@percy/cypress\"] in your tsconfig.json file.\n - In your test, take snapshots like this:\n cy.percySnapshot();\n\nExample:\n```javascript\nimport '@percy/cypress';\n\ndescribe('Integration test with visual testing', function() {\n it('Loads the homepage', function() {\n // Load the page or perform any other interactions with the app.\n cy.visit('<URL under test>');\n // Take a snapshot for visual diffing\n cy.percySnapshot();\n });\n});\n```\n\n - The snapshot method arguments are:\n cy.percySnapshot([name][, options])\n name - The snapshot name; must be unique to each snapshot; defaults to the test title\n options - See per-snapshot configuration options\n\n - For example:\n cy.percySnapshot();\n cy.percySnapshot('Homepage test');\n cy.percySnapshot('Homepage responsive test', { widths: [768, 992, 1200] });\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- cypress run').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
33
|
+
export declare const nodejsPuppeteerInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Puppeteer SDK:\n npm install --save-dev @percy/cli @percy/puppeteer\n\n---STEP---\nUpdate your Puppeteer test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n const percySnapshot = require('@percy/puppeteer');\n - In your test, take snapshots like this:\n await percySnapshot(page, 'Snapshot name');\n\nExample:\n```javascript\nconst puppeteer = require('puppeteer');\nconst percySnapshot = require('@percy/puppeteer');\n\ndescribe('Integration test with visual testing', function() {\n it('Loads the homepage', async function() {\n const browser = await puppeteer.launch();\n const page = await browser.newPage();\n await page.goto('https://example.com');\n await percySnapshot(page, this.test.fullTitle());\n await browser.close();\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(page, name[, options])\n page (required) - A puppeteer page instance\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n - For example:\n percySnapshot(page, 'Homepage test');\n percySnapshot(page, 'Homepage responsive test', { widths: [768, 992, 1200] });\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- <command to run the test script file>').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
34
|
+
export declare const nodejsNightmareInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Nightmare SDK:\n npm install --save-dev @percy/cli @percy/nightmare\n\n---STEP---\nUpdate your Nightmare test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n const Nightmare = require('nightmare');\n const percySnapshot = require('@percy/nightmare');\n - In your test, take snapshots like this:\n .use(percySnapshot('Snapshot name'))\n\nExample:\n```javascript\nconst Nightmare = require('nightmare');\nconst percySnapshot = require('@percy/nightmare');\n\nNightmare()\n .goto('http://example.com')\n // ... other actions ...\n .use(percySnapshot('Example Snapshot'))\n // ... more actions ...\n .end()\n .then(() => {\n // ...\n });\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- node script.js').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
35
|
+
export declare const nodejsNightwatchInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Nightwatch SDK:\n npm install --save-dev @percy/cli @percy/nightwatch\n\n---STEP---\nUpdate your Nightwatch configuration and test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy library and add the path exported by @percy/nightwatch to your Nightwatch configuration\u2019s custom_commands_path property:\n const percy = require('@percy/nightwatch');\n module.exports = {\n // ...\n custom_commands_path: [percy.path],\n // ...\n };\n - In your test, take snapshots like this:\n browser.percySnapshot('Snapshot name');\n\nExample:\n```javascript\nconst percy = require('@percy/nightwatch');\nmodule.exports = {\n // ...\n custom_commands_path: [percy.path],\n // ...\n};\n\n// Example test\nmodule.exports = {\n 'Snapshots pages': function(browser) {\n browser\n .url('http://example.com')\n .assert.containsText('h1', 'Example Domain')\n .percySnapshot('Example snapshot');\n browser\n .url('http://google.com')\n .assert.elementPresent('img[alt=\"Google\"]')\n .percySnapshot('Google homepage');\n browser.end();\n }\n};\n```\n\n - The snapshot method arguments are:\n percySnapshot([name][, options])\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- nightwatch').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
36
|
+
export declare const nodejsProtractorInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Protractor SDK:\n npm install --save-dev @percy/cli @percy/protractor\n\n---STEP---\nUpdate your Protractor test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/protractor';\n - In your test, take snapshots like this:\n await percySnapshot('Snapshot name');\n // or\n await percySnapshot(browser, 'Snapshot name');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/protractor';\ndescribe('angularjs homepage', function() {\n it('should greet the named user', async function() {\n await browser.get('https://www.angularjs.org');\n await percySnapshot('AngularJS homepage');\n await element(by.model('yourName')).sendKeys('Percy');\n var greeting = element(by.binding('yourName'));\n expect(await greeting.getText()).toEqual('Hello Percy!');\n await percySnapshot('AngularJS homepage greeting');\n });\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(name[, options])\n Standalone mode:\n percySnapshot(browser, name[, options])\n browser (required) - The Protractor browser object\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- protractor conf.js').\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
37
|
+
export declare const nodejsTestcafeInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and TestCafe SDK:\n npm install --save-dev @percy/cli @percy/testcafe\n\n---STEP---\nUpdate your TestCafe test script\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper:\n import percySnapshot from '@percy/testcafe';\n - In your test, take snapshots like this:\n await percySnapshot(t, 'Snapshot name');\n\nExample:\n```javascript\nimport percySnapshot from '@percy/testcafe';\nfixture('MyFixture')\n .page('https://devexpress.github.io/testcafe/example');\ntest('Test1', async t => {\n await t.typeText('#developer-name', 'John Doe');\n await percySnapshot(t, 'TestCafe Example');\n});\n```\n\n - The snapshot method arguments are:\n percySnapshot(t, name[, options])\n t (required) - The test controller instance passed from test\n name (required) - The snapshot name; must be unique to each snapshot\n options - See per-snapshot configuration options\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- testcafe chrome:headless tests').\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
38
|
+
export declare const nodejsGatsbyInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Gatsby plugin:\n npm install --save @percy/cli gatsby-plugin-percy\n\n---STEP---\nUpdate your Gatsby configuration\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Add the Percy plugin to your gatsby-config.js file:\n module.exports = {\n plugins: [`gatsby-plugin-percy`]\n }\n\n - The plugin will take snapshots of discovered pages during the build process.\n\n - Example gatsby-config.js with options:\n```javascript\nmodule.exports = {\n plugins: [{\n resolve: `gatsby-plugin-percy`,\n options: {\n // gatsby specific options\n query: `{\n allSitePage { nodes { path } }\n allOtherPage { nodes { path } }\n }`,\n resolvePages: ({\n allSitePage: { nodes: allPages },\n allOtherPage: { nodes: otherPages }\n }) => {\n return [...allPages, ...otherPages]\n .map(({ path }) => path);\n },\n // percy static snapshot options\n exclude: [\n '/dev-404-page/',\n '/offline-plugin-app-shell-fallback/'\n ],\n overrides: [{\n include: '/foobar/',\n waitForSelector: '.done-loading',\n additionalSnapshots: [{\n suffix: ' - after btn click',\n execute: () => document.querySelector('.btn').click()\n }]\n }]\n }\n }]\n}\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g., 'npx percy exec -- gatsby build').\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
39
|
+
export declare const nodejsStorybookInstructions = "\n---STEP---\nInstall Percy dependencies\n - Install Percy CLI and Storybook SDK:\n npm install --save-dev @percy/cli @percy/storybook\n\n---STEP---\nUpdate your Storybook stories\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Add Percy parameters to your stories to customize snapshots:\n```js\nMyStory.parameters = {\n percy: {\n name: 'My snapshot',\n additionalSnapshots: [\n { prefix: '[Dark mode] ', args: { colorScheme: 'dark' } },\n { suffix: ' with globals', globals: { textDirection: 'rtl' } },\n { name: 'Search snapshot', queryParams: { search: 'foobar' } }\n ]\n }\n};\n```\n - Use argument names and values defined in your codebase.\n\n\n---STEP---\nRun Percy with your Storybook\n - With a static Storybook build:\n percy storybook ./storybook-build\n - With a local or live Storybook URL:\n percy storybook http://localhost:9009\n percy storybook https://storybook.foobar.com\n - Automatically run start-storybook:\n Run this scan using tool runPercyScan with 'npx percy exec -- percy storybook:start --port=9009'.\n\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
40
|
+
export declare const pythonPlaywrightInstructions = "\n---STEP---\nCreate a Percy project\n - Sign in to Percy and create a project of type \"Web\". Name the project and note the generated token.\n\n---STEP---\nSet the project token as an environment variable\n - On macOS/Linux:\n export PERCY_TOKEN=\"<your token here>\"\n - On Windows PowerShell:\n $env:PERCY_TOKEN=\"<your token here>\"\n - On Windows CMD:\n set PERCY_TOKEN=<your token here>\n\n---STEP---\nInstall Percy dependencies\n - Install Percy Playwright SDK:\n pip install percy-playwright\n\n---STEP---\nUpdate your Playwright Python test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper and use the snapshot method:\n percy_snapshot(page, name=\"Your snapshot name\")\n - You can also use:\n percy_screenshot(page, name=\"Your snapshot name\", options={})\n\nExample:\n```python\nfrom playwright.sync_api import sync_playwright\nfrom percy import percy_snapshot\n\nwith sync_playwright() as p:\n browser = p.chromium.launch()\n page = browser.new_page()\n page.goto(\"http://localhost:8000\")\n percy_snapshot(page, name=\"Home page\")\n\n # ... more test steps ...\n percy_snapshot(page, name=\"After login\")\n\n browser.close()\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g. npx percy exec -- <command to run the test script file>).\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|
|
41
|
+
export declare const csharpPlaywrightInstructions = "\nInstall Percy dependencies\n - Add the Percy Playwright NuGet package:\n <PackageReference Include=\"PercyIO.Playwright\" Version=\"1.0.0\" />\n\n---STEP---\nUpdate your Playwright .NET test\n\nInvoke listTestFiles() with the provided directories from user to gather all test files in memory and obtain the generated UUID ---STEP---\nProcess files in STRICT sequential order using tool addPercySnapshotCommands() with below instructions:\n- Start with index 0\n- Then index 1 \n- Then index 2\n- Continue sequentially until the last index\n- DO NOT skip any index numbers\n- DO NOT jump to random indices like 10, 20, 30\n- DO NOT worry about time consuming and any constraints.\n- DO NOT STOP until you add commands in all the files or you reach end of the files.\n\n\n - Import the Percy snapshot helper and use the snapshot method:\n Percy.Snapshot(page, \"Your snapshot name\");\n - You can also pass options:\n Percy.Snapshot(page, \"Your snapshot name\", options);\n\nExample:\n```csharp\nusing Microsoft.Playwright;\nusing PercyIO.Playwright;\n\nclass PercyPlaywrightExample\n{\n public static async Task Main()\n {\n using var playwright = await Playwright.CreateAsync();\n var browser = await playwright.Chromium.LaunchAsync();\n var page = await browser.NewPageAsync();\n\n await page.GotoAsync(\"http://localhost:8000\");\n Percy.Snapshot(page, \"Home page\");\n\n // ... more test steps ...\n Percy.Snapshot(page, \"After login\");\n\n await browser.CloseAsync();\n }\n}\n```\n\n\n---STEP---\nTo run the Percy build, call the tool runPercyScan with the appropriate test command (e.g. npx percy exec -- <command to run the test script file>).\n\n---STEP---\nReview the snapshots\n - Go to your Percy project on https://percy.io to review snapshots and approve/reject any visual changes.\n\n";
|