Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
@percy/sdk-utils
Advanced tools
@percy/sdk-utils is a utility package designed to assist with the integration of Percy visual testing into various SDKs. It provides common functionality and helpers that can be used to simplify the process of capturing and managing visual snapshots.
Snapshot Creation
This feature allows you to create visual snapshots of web pages. The `createSnapshot` function is used to capture the current state of a page and save it as a snapshot for visual comparison.
const { createSnapshot } = require('@percy/sdk-utils');
async function takeSnapshot(page, name) {
await createSnapshot(page, name);
}
takeSnapshot(page, 'Home Page');
DOM Manipulation
This feature provides a way to serialize the DOM of a web page. The `serializeDOM` function can be used to capture the HTML structure of a page, which can then be used for visual testing or other purposes.
const { serializeDOM } = require('@percy/sdk-utils');
async function getSerializedDOM(page) {
const dom = await page.evaluate(() => serializeDOM());
return dom;
}
getSerializedDOM(page).then(dom => console.log(dom));
Asset Discovery
This feature helps in discovering assets on a web page. The `discoverAssets` function can be used to identify and list all the assets (like images, stylesheets, etc.) that are part of a page, which is useful for ensuring all necessary resources are captured during visual testing.
const { discoverAssets } = require('@percy/sdk-utils');
async function findAssets(page) {
const assets = await discoverAssets(page);
return assets;
}
findAssets(page).then(assets => console.log(assets));
Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. It can be used for taking screenshots, generating PDFs, and automating web page interactions. While Puppeteer can capture screenshots, it does not provide the same level of integration with visual testing tools like Percy.
Cypress is a JavaScript end-to-end testing framework that allows you to write tests for web applications. It includes features for taking screenshots and recording videos of tests. However, it is primarily focused on functional testing rather than visual testing, and does not offer the same utilities for integrating with visual testing services like Percy.
WebdriverIO is a test automation framework that allows you to run tests based on the WebDriver protocol and Appium. It supports taking screenshots and has plugins for visual regression testing, but it requires additional setup and configuration compared to the out-of-the-box utilities provided by @percy/sdk-utils.
Common Node SDK utils
log(level, message)
Logs colored output and stack traces based on the loglevel defined by the PERCY_LOGLEVEL
environment variable.
const { log } = require('@percy/sdk-utils');
// logs unless loglevel is quiet or silent
log('info', 'foobar');
// [percy] foobar
// logs a red error message unless the loglevel is silent
log('error', 'bad');
// [percy] bad
// logs the stack trace when loglevel is debug
log('error', new Error('some error'));
// [percy] Error: some error
// at example (/path/to/example.js:2:10)
// at ...
// only logs when the loglevel is debug
log('debug', 'debug message');
// [percy] debug message
getInfo()
Returns information about any running Percy CLI server. Some information is only available after
isPercyEnabled
has been called.
const { getInfo } = require('@percy/sdk-utils');
let info = getInfo();
// CLI API address
info.cliAPI === (process.env.PERCY_CLI_API || 'http://localhost:5338/percy')
// CLI loglevel
info.loglevel === (process.env.PERCY_LOGLEVEL || 'info')
// CLI version parts (requires isPercyEnabled call)
info.version === (['1', '0', '0'] || undefined)
// CLI config options (requires isPercyEnabled call)
info.config === {}
isPercyEnabled()
Returns true
or false
if the Percy CLI API server is running. Calls the server's /healthcheck
endpoint and populates information for getInfo
. The result of this function is cached
and subsequent calls will return the first cached result. If the healthcheck fails, will log a
message unless the CLI loglevel is quiet
or silent
.
const { isPercyEnabled } = require('@percy/sdk-utils');
// CLI API not running
await isPercyEnabled() === false
// [percy] Percy is not running, disabling snapshots
// CLI API is running
await isPercyEnabled() === true
fetchPercyDOM()
Fetches and returns the @percy/dom
serialization script hosted by the CLI API server. The
resulting string can be evaulated within a browser context to add the PercyDOM.serialize
function
to the global scope. Subsequent calls return the first cached result.
const { fetchPercyDOM } = require('@percy/sdk-utils');
let script = await fetchPercyDOM();
// selenium-webdriver
driver.executeScript(script);
// webdriverio
browser.execute(script);
// puppeteer
page.evaluate(script);
// protractor
browser.executeScript(script);
// etc...
postSnapshot(options)
Posts snapshot options to the CLI API server.
const { postSnapshot } = require('@percy/sdk-utils');
await postSnapshot({
// required
name: 'Snapshot Name',
url: 'http://localhost:8000/',
domSnapshot: 'result from PercyDOM.serialize()'
// optional
environmentInfo: ['<lib>/<version>', '<lang>/<version>'],
clientInfo: '<sdk>/<version>',
widths: [475, 1280],
minHeight: 1024,
enableJavaScript: false,
requestHeaders: {}
});
FAQs
Common JavaScript SDK utils
The npm package @percy/sdk-utils receives a total of 95,866 weekly downloads. As such, @percy/sdk-utils popularity was classified as popular.
We found that @percy/sdk-utils demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.