Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/percy/percy-selenium-java
Visual testing with Java Selenium and Percy
https://github.com/percy/percy-selenium-java
java percy percy-agent percy-sdk selenium visual-regression-testing visual-testing visual-tests
Last synced: 4 months ago
JSON representation
Visual testing with Java Selenium and Percy
- Host: GitHub
- URL: https://github.com/percy/percy-selenium-java
- Owner: percy
- License: mit
- Created: 2018-11-08T18:51:45.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-28T19:45:22.000Z (4 months ago)
- Last Synced: 2024-09-29T02:05:57.636Z (4 months ago)
- Topics: java, percy, percy-agent, percy-sdk, selenium, visual-regression-testing, visual-testing, visual-tests
- Language: Java
- Homepage: https://docs.percy.io/docs/java-selenium
- Size: 463 KB
- Stars: 12
- Watchers: 10
- Forks: 17
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# percy-java-selenium
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.percy/percy-java-selenium/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.percy/percy-java-selenium)
![Test](https://github.com/percy/percy-java-selenium/workflows/Test/badge.svg)[Percy](https://percy.io) visual testing for Java Selenium.
## Development
Install/update `@percy/cli` dev dependency (requires Node 14+):
```sh-session
$ npm install --save-dev @percy/cli
```Install maven:
```sh-session
$ brew install mvn
```Run tests:
```
npm test
```## Installation
npm install `@percy/cli`:
```sh-session
$ npm install --save-dev @percy/cli
```Add percy-java-selenium to your project dependencies. If you're using Maven:
``` xml
io.percy
percy-java-selenium
1.2.0```
If you're using a different build system, see https://search.maven.org/artifact/io.percy/percy-java-selenium for details for your specific system.
## Usage
This is an example test using the `percy.snapshot` function.
``` java
// import ...
import io.percy.selenium.Percy;public class Example {
private static WebDriver driver;
private static Percy percy;public static void main(String[] args) {
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
driver = new FirefoxDriver(options);
percy = new Percy(driver);driver.get("https://example.com");
percy.snapshot("Java example");
}
}
```Running the test above normally will result in the following log:
```sh-session
[percy] Percy is not running, disabling snapshots
```When running with [`percy
exec`](https://github.com/percy/cli/tree/master/packages/cli-exec#percy-exec), and your project's
`PERCY_TOKEN`, a new Percy build will be created and snapshots will be uploaded to your project.```sh-session
$ export PERCY_TOKEN=[your-project-token]
$ percy exec -- [java test command]
[percy] Percy has started!
[percy] Created build #1: https://percy.io/[your-project]
[percy] Snapshot taken "Java example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
```## Configuration
The snapshot method arguments:
`percy.snapshot(name, widths[], minHeight, enableJavaScript, percyCSS, scope, sync, responsiveSnapshotCapture)`
- `name` (**required**) - The snapshot name; must be unique to each snapshot
- Additional snapshot options (overrides any project options):
- `widths` - An array of widths to take screenshots at
- `minHeight` - The minimum viewport height to take screenshots at
- `enableJavaScript` - Enable JavaScript in Percy's rendering environment
- `percyCSS` - Percy specific CSS only applied in Percy's rendering
environment
- `scope` - A CSS selector to scope the screenshot to
- `sync` - For getting syncronous results https://www.browserstack.com/docs/percy/advanced/sync-comparison-results
- `responsiveSnapshotCapture` - For capturing snapshot of responsive websites## Upgrading
### Automatically with `@percy/migrate`
We built a tool to help automate migrating to the new CLI toolchain! Migrating
can be done by running the following commands and following the prompts:``` shell
$ npx @percy/migrate
? Are you currently using percy-java-selenium? Yes
? Install @percy/cli (required to run percy)? Yes
? Migrate Percy config file? Yes
```This will automatically run the changes described below for you.
### Manually
#### Installing `@percy/cli` & removing `@percy/agent`
If you're coming from a pre-3.0 version of this package, make sure to install `@percy/cli` after
upgrading to retain any existing scripts that reference the Percy CLI
command. You will also want to uninstall `@percy/agent`, as it's been replaced
by `@percy/cli`.```sh-session
$ npm uninstall @percy/agent
$ npm install --save-dev @percy/cli
```### Migrating Config
If you have a previous Percy configuration file, migrate it to the newest version with the
[`config:migrate`](https://github.com/percy/cli/tree/master/packages/cli-config#percy-configmigrate-filepath-output) command:```sh-session
$ percy config:migrate
```## Running Percy on Automate
`percy.screenshot(driver, name, options)` [ needs @percy/cli 1.27.0-beta.0+ ];This is an example test using the `percy.screenshot` method.
``` java
// import ...
import io.percy.selenium.Percy;public class Example {
public static void main(String[] args) throws MalformedURLException, InterruptedException {
DesiredCapabilities caps = new DesiredCapabilities();
// Add caps hereWebDriver driver = new RemoteWebDriver(new URL(URL), caps);
Percy percy = new Percy(driver);
percy.screenshot("Screenshot 1");
driver.quit();
}
}
```- `driver` (**required**) - A selenium driver instance
- `name` (**required**) - The screenshot name; must be unique to each screenshot
- `options` (**optional**) - There are various options supported by percy.screenshot to server further functionality.
- `sync` - Boolean value by default it falls back to false, Gives the processed result around screenshot [From CLI v1.28.0-beta.0+]
- `fullPage` - Boolean value by default it falls back to `false`, Takes full page screenshot [From CLI v1.27.6+]
- `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 xpath
- `ignoreRegionSelectors` - List of selectors. elements in the DOM can be ignored using selectors.
- `ignoreRegionSeleniumElements` - List of selenium web-element. elements can be ignored using selenium_elements.
- `customIgnoreRegions` - List of custom objects. elements can be ignored using custom boundaries
- Refer to example -
- ```
List customRegion = new ArrayList<>();
HashMap region1 = new HashMap<>();
region1.put("top", 10);
region1.put("bottom", 110);
region1.put("right", 10);
region1.put("left", 120);
customRegion.add(region1);
options.put("custom_ignore_regions", customRegion);
```
- Parameters:
- `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.
- `considerRegionSeleniumElements` - List of selenium web-element. elements can be considered for diffing and will be ignored by Intelli Ignore using selenium_elements.
- `customConsiderRegions` - List of custom objects. elements can be considered for diffing and will be ignored by Intelli Ignore using custom boundaries
- Refer to example -
- ```
List customRegion = new ArrayList<>();
HashMap region2 = new HashMap<>();
region2.put("top", 10);
region2.put("bottom", 110);
region2.put("right", 10);
region2.put("left", 120);
customRegion.add(region2);
options.put("custom_consider_regions", customRegion);
```
- Parameters:
- `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.### Creating Percy on automate build
Note: Automate Percy Token starts with `auto` keyword. The command can be triggered using `exec` keyword.
```sh-session
$ export PERCY_TOKEN=[your-project-token]
$ percy exec -- [java test command]
[percy] Percy has started!
[percy] [Java example] : Starting automate screenshot ...
[percy] Screenshot taken "Java example"
[percy] Stopping percy...
[percy] Finalized build #1: https://percy.io/[your-project]
[percy] Done!
```Refer to docs here: [Percy on Automate](https://www.browserstack.com/docs/percy/integrate/functional-and-visual)