Hey! These docs are for version 1, which is no longer officially supported. Click here for the latest version, 2-web!

Java Selenium testing tutorial

Java testing with Selenium and Percy visual testing

This guide walks you through cloning an example Java application tested with Selenium, making some changes, and seeing visual differences in Percy's visual review tool. The example application is a to-do app, forked from todomvc.

The tutorial assumes you're already familiar with Java and Selenium and focuses on using it with Percy. You'll still be able to follow along if you're not familiar with Selenium, but we won't spend time introducing Selenium concepts.


This tutorial assumes you have installed the following:
Java 8 and Maven 3.6 or later

If you are on Mac OS X, you can use Homebrew to install the requirements above.

Step 1: Clone the example application, install dependencies and compile:

$ git clone [email protected]:percy/example-percy-java-selenium.git
$ cd example-percy-java-selenium
$ npm install
$ mvn package

The example app will now be ready to go. You can explore the app by running the server:

$ java -cp target/example-percy-java-selenium-1.0-SNAPSHOT.jar io.percy.examplepercyjavaselenium.App

Then open http://localhost:8000 in a browser to see the example app in action. Hit Ctrl-C to stop the server.

Step 2: Sign in to Percy, create a new organization, and create a new project. You can name both the organization and project 'todo'.

After you've created the project, you'll be shown a token environment variable.

Step 3: In the shell window you're working in, export the token environment variable:

$ export PERCY_TOKEN=<your token here>

Note: usually this would only be set up in your CI environment, but to keep things simple we'll configure it in your shell so that Percy is enabled in your local environment.

Step 4: Check out a new branch for your work in this tutorial (we'll call this branch tutorial-example), run tests and take snapshots:

$ git checkout -b tutorial-example
$ ./run_snapshots.sh

This will run the app's tests, which contain calls to create and upload Percy snapshots. The snapshots will then be uploaded to Percy for comparison. Percy will use the Percy token you used in Step 2 to know which organization and project to upload the snapshots to.

If you inspect the contents of ./run_snapshots.sh you'll see that it is a very simple script that wraps the mvn test command in a percy exec -- call.

You can view the screenshots in Percy now if you want, but there will be no visual comparisons yet. You'll see that Percy shows you that these snapshots come from your tutorial-example branch.


Step 5: Use your text editor to edit src/main/resources/index.html and introduce some visual change. For example, you can add a <strong> tag to the "Active" button on line 25. After the change, that line looks like this:

<a href="#/active"><strong>Active</strong></a>

Step 7: Commit the change:

$ git add . && git commit -m "Emphasize 'Active' button"

Step 8: Run the tests with snapshots again:

$ ./run_snapshots.sh

This will run the tests again, and take new snapshots of our modified application. The new snapshots will be uploaded to Percy and compared with the previous snapshots, showing any visual diffs.

At the end of the test run output, you will see logs from Percy confirming that the snapshots were successfully uploaded, and giving you a direct URL to check out any visual diffs.

Step 9: Visit your project in Percy and you'll see a new build with the visual comparisons between the two runs. Click anywhere on the Build 2 row. You can see the original snapshots on the left, and the new snapshots on the right.

Percy has highlighted what's changed visually in the app! Snapshots with the largest changes are shown first You can click on the highlight to reveal the underlying screenshot.


If you scroll down, you'll see that no other test cases were impacted by our changes to the 'Clear completed' button. The unchanged snapshots appear grouped together at the bottom of the list.

Finished! 😀

From here, you can try making your own changes to the app and tests, if you like. If you do, re-run the snapshots, and then you'll see any visual changes reflected in Percy.

This tutorial used an app with Selenium tests and Percy already added. You can check out the docs to learn how to add Percy to your own Java Selenium tests.