Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
@percy/appium-app
Advanced tools
Percy visual testing Appium (wd) and WebdriverIO
$ npm install --save-dev @percy/cli @percy/appium-app
Notes:
Minimum required version for
@percy/cli
is1.25.0
for this package to work correctly.This is tested on node 14+ and should be compatible with all newer node versions
This is an example test using the percyScreenshot
function.
const percyScreenshot = require('@percy/appium-app');
describe('Appium webdriverio test example', function() {
it('takes a screenshot', async () => {
await percyScreenshot('Appium JS example');
});
});
describe('Appium wd test example', function() {
it('takes a screenshot', async () => {
driver = // use your existing way to create appium driver with wd
await percyScreenshot(driver, 'Appium JS example');
});
});
Running the test above normally will result in the following log:
[percy] Percy is not running, disabling screenshots
When running with percy app:exec
, and your project's
PERCY_TOKEN
, a new Percy build will be created and screenshots will be uploaded to your project.
$ export PERCY_TOKEN=[your-project-token]
$ percy app:exec -- [appium test command]
[percy] Percy has started!
[percy] Created build #1: https://percy.io/[your-project]
[percy] Screenshot taken "Appium JS example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
percyScreenshot(driver, name[, {
fullscreen,
deviceName,
orientation,
statusBarHeight,
navigationBarHeight
}])
driver
(required) - A appium driver instance [ can be skipped in case of webdriverio runner]name
(required) - The screenshot name; must be unique to each screenshotoptions object
(optional)
sync
- Boolean value by default it falls back to false, Gives the processed result around screenshot [From CLI v1.28.0-beta.0+]fullscreen
: If the app is currently in fullscreen; booleandeviceName
: Custom device name to override SDK fetched nameorientation
: ["portrait"/"landscape"] - Tell SDK which orientation app is in [ Note: This is only for tagging purpose, does not change the orientation of the device ]statusBarHeight
: In px if you want to override SDK; intnavigationBarHeight
: In px if you want to override SDK; intfullPage
: [Alpha] Only supported on App Automate driver sessions [ needs @percy/cli 1.20.2+ ]; boolean
screenLengths
: [Alpha] Max screen lengths for fullPage; inttopScrollviewOffset
: [Alpha] Offset from top of scrollview; intbottomScrollviewOffset
: [Alpha] Offset from bottom of scrollview; intscrollableXpath
[Alpha] Scrollable element xpath for fullpage; stringscrollableId
: [Alpha] Scrollable element accessibility id for fullpage; stringignoreRegionXpaths
: Elements xpaths that user want to ignore in visual diff; list of stringignoreRegionAccessibilityIds
: Elements accessibility_ids that user want to ignore in visual diff; list of stringignoreRegionAppiumElements
: Appium elements that user want to ignore in visual diff; list of appium element objectcustomIgnoreRegions
: Custom locations that user want to ignore in visual diff; list of ignore_region objectconstructor(top, bottom, left, right)
top
(int): Top coordinate of the ignore region.bottom
(int): Bottom coordinate of the ignore region.left
(int): Left coordinate of the ignore region.right
(int): Right coordinate of the ignore region.For a hybrid app, we need to switch to native context before taking screenshot.
async function percyScreenshotFlutter(driver, name, options) {
// switch to native context
await driver.switchContext('NATIVE_APP');
await percyScreenshot(driver, name, options);
// switch back to flutter context
await driver.switchContext('FLUTTER');
}
await percyScreenshotFlutter(driver, name[, {
fullscreen,
deviceName,
orientation,
statusBarHeight,
navigationBarHeight
}])
Note:
For other hybrid apps the
await driver.switchContext('FLUTTER');
would change to context that it uses like say WEBVIEW etc.
percyScreenshot(driver, name, options)
[ needs @percy/cli 1.27.0-beta.0+ ];
driver
(required) - A appium driver instancename
(required) - The screenshot name; must be unique to each screenshotoptions
(optional) - There are various options supported by percy_screenshot to server further functionality.
freezeAnimatedImage
- Boolean value by default it falls back to false
, you can pass true
and percy will freeze image based animations.freezeImageBySelectors
- List of selectors. Images will be freezed which are passed using selectors. For this to work freezeAnimatedImage
must be set to true.freezeImageByXpaths
- List of xpaths. Images will be freezed which are passed using xpaths. For this to work freezeAnimatedImage
must be set to true.percyCSS
- Custom CSS to be added to DOM before the screenshot being taken. Note: This gets removed once the screenshot is taken.ignoreRegionXpaths
- List of xpaths. elements in the DOM can be ignored using xpathignoreRegionSelectors
- List of selectors. elements in the DOM can be ignored using selectors.ignoreRegionAppiumElements
- List of appium web-element. elements can be ignored using appiumElements.customIgnoreRegions
- List of custom objects. elements can be ignored using custom boundaries. Just passing a simple object for it like below.
{top: 10, right: 10, bottom: 120, left: 10}
top
(int): Top coordinate of the ignore region.bottom
(int): Bottom coordinate of the ignore region.left
(int): Left coordinate of the ignore region.right
(int): Right coordinate of the ignore region.considerRegionXpaths
- List of xpaths. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using xpaths.considerRegionSelectors
- List of selectors. elements in the DOM can be considered for diffing and will be ignored by Intelli Ignore using selectors.considerRegionAppiumElements
- List of appium web-element. elements can be considered for diffing and will be ignored by Intelli Ignore using appium_elements.customConsiderRegions
- List of custom objects. elements can be considered for diffing and will be ignored by Intelli Ignore using custom boundaries
{top: 10, right: 10, bottom: 120, left: 10}
top
(int): Top coordinate of the consider region.bottom
(int): Bottom coordinate of the consider region.left
(int): Left coordinate of the consider region.right
(int): Right coordinate of the consider region.androidScrollAreaPercentage
- Percentage Area to scroll for android devices. (should be between 0 and 100)scrollSpeed
- Scroll speed in pixel/second. (Should be between 0 and 5000)Note: Automate Percy Token starts with auto
keyword. The command can be triggered using exec
keyword.
$ export PERCY_TOKEN=[your-project-token]
$ percy exec -- [python test command]
[percy] Percy has started!
[percy] [Python example] : Starting automate screenshot ...
[percy] Screenshot taken "Python example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
Refer to docs here: Percy on Automate
FAQs
Appium client library for visual testing with Percy
We found that @percy/appium-app 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
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.