Git Product home page Git Product logo

percy-selenium-java's Introduction

percy-java-selenium

Maven Central Test

Percy visual testing for Java Selenium.

Development

Install/update @percy/cli dev dependency (requires Node 14+):

$ npm install --save-dev @percy/cli

Install maven:

$ brew install mvn

Run tests:

npm test

Installation

npm install @percy/cli:

$ npm install --save-dev @percy/cli

Add percy-java-selenium to your project dependencies. If you're using Maven:

<dependency>
  <groupId>io.percy</groupId>
  <artifactId>percy-java-selenium</artifactId>
  <version>1.2.0</version>
</dependency>

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.

// 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:

[percy] Percy is not running, disabling snapshots

When running with percy exec, and your project's PERCY_TOKEN, a new Percy build will be created and snapshots will be uploaded to your project.

$ 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)

  • 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

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:

$ 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.

$ 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 command:

$ 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.

// import ...
import io.percy.selenium.Percy;

public class Example {

  public static void main(String[] args) throws MalformedURLException, InterruptedException {
    DesiredCapabilities caps = new DesiredCapabilities();
    // Add caps here

    WebDriver 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<HashMap> customRegion = new ArrayList<>();
            HashMap<String, Integer> 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<HashMap> customRegion = new ArrayList<>();
            HashMap<String, Integer> 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.

$ 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

percy-selenium-java's People

Contributors

amit3200 avatar anaulin avatar bstack-security-github avatar chinmay-browserstack avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar djones avatar itsjwala avatar kengotoda avatar ksenia-loseva avatar ninadbstack avatar prklm10 avatar rishigupta1599 avatar robdel12 avatar samarsault avatar this-is-shivamsingh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

percy-selenium-java's Issues

Unable to take a screenshot - too much JS maybe???

I'm trying to use percy to take a screenshot of our web page and I get 413 error code. You can see the full response in the following screenshot.
image

I use Java and this is the line I have added to my test to take the screenshot
percy.snapshot("Test screenshot", Arrays.asList(1920), 2000, true)

I came across this issue and I realised that we may have too much JavaScript as well.
Our bundle was too big (around 7MB) and we managed to limit it to around 1.2MB, but I still get the same error.
Can you guide me on how to solve this issue? What's the limit (in KB/MB) for JS?

release automation

  • currently it's manually done following release.md
  • standardize release using github actions similar to other repos.

List of widths ignored

I am trying to take a screenshot in a specific width, but when I look at the screenshots, all the screenshots in the configuration are stored.

That specific test is only for that width (desktop); the rest of the widths in the configuration are considered mobile. This is the code to take the screenshot. Is the parameter being ignored? Or the configuration overwrites the code?

Percy percy = new Percy(driver); 
percy.snapshot(name, Arrays.asList(1200));

Blocks scroll position save

Have you read the "Debugging SDKs" doc yet?

Read this and understood u dont support such stuff percy/percy-cypress#2

The problem

I scrolled 3 blocks in our tests but Percy screenshot takes unscrolled.
https://percy.io/99050884/jet-cc/builds/31401112/changed/1729023464?browser=chrome&browser_ids=48&subcategories=unreviewed%2Cchanges_requested&viewLayout=overlay&viewMode=new&width=1920&widths=1280%2C1366%2C1920

Details

If necessary, describe the problem you have been experiencing in more detail.

Code to reproduce issue

Cant provide exact code but can provide logical copy

page.getContainer1()
                .scrollToBottom();
        page.getContainer2()
                .scrollToBottom();
        page.leftPageBlockScrollToBottom()
                .snapshot("Scrolled blocks page");

Question

Why dont you support such stuff, is it planned to support in future?
Do you know any workaround for this issue?

CSS files are missed if they are not in DOM

Percy currently saves DOM, then uploads it to the server and processes. However, this approach doesn't work if styles are not in DOM but are separate files. In this case, the page is not rendered correctly in Percy.

percy-selenium-java 1.1.0 doesn't work together with @percy/[email protected]

The problem

calling .snapshot("name") throws

java.lang.ClassCastException: class com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to class java.lang.String (com.google.common.collect.Maps$TransformedEntriesMap is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')

with @percy/cli = 1.16.0

Environment

  • @percy/cli version: 1.16.0
  • Version of Percy SDK you’re using: 1.1.0

Code to reproduce issue

npm install -g @percy/[email protected]
PERCY_TOKEN=<YOUR_TOKEN> percy exec:start

see that simple test

Details

works with @percy/cli on version 1.14.0

basically, there error is that the new version returns a map with the keys, html, warnings and resources instead (my assumption) the html only.

Version 0.1.0 is Giving the following Error: WARNING: Something went wrong trying to load {}. Snapshotting will not work.

When using the following Maven Dependency Version: 0.1.0

I get the following Warnings:

WARNING: Something went wrong trying to load {}. Snapshotting will not work.
Oct 18, 2019 4:42:08 PM io.percy.selenium.Percy snapshot
WARNING: percy-agent.js is not available. Snapshotting is disabled.

[percy] stopping percy...
[percy] waiting for 0 snapshots to complete...
[percy] done.

Using maven Dependency version: 0.0.3 everything works fine.

Node version: v8.11.1
java version "1.8.0_172"
Apache Maven 3.5.3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.