An open API service indexing awesome lists of open source software.

https://github.com/mischnic/screenshot-tester

A node testing library for comparing GUI app screenshot
https://github.com/mischnic/screenshot-tester

node nodejs test testing testing-tools ui

Last synced: 2 months ago
JSON representation

A node testing library for comparing GUI app screenshot

Awesome Lists containing this project

README

          

# screenshot-tester

Take screenshots (= snapshots) of desktop (node) apps (i.e. [libui-node](https://github.com/parro-it/libui-node)) to test for regressions.

![An example report generated by screenshot-tester](report.png "HTML Report")

## Usage:

```js
const test = require("screenshot-tester")();

(async function(){
await test("my_example.js", "The Window Title");
})();
```

or for native apps:

```js
const test = require("screenshot-tester")({raw: true});

(async function(){
await test("app", "The Window Title");
})();
```

This will:
- Run `node my_example.js` or `app`.
- Take a screenshot of the window with the specified title.
- Close the app.
- Compare with or create a new reference screenshot.

A failed test will generate a diff file, hightlighting the differing areas in red:

```
─ outDir ('.')
├─ reference
│ └─ my_example.js.png
└─ tmp
├─ my_example.js.png
└─ my_example.js_diff.png
```

## Reference

```js
const test = require("screenshot-tester")({
outDir = ".",
raw = false,
interactive = false,
delay = 0,
accuracy = "0.01%",
logger = require("screenshot-tester").defaultLogger
});

async function test(file, title, {delay, raw, delta = 20}){};

function test.generateHTML(){};

async function test.pushToServer(host, repoId, issue, onlyFailed, osAppend) {};
```

### Parameters

#### `require("screenshot-tester")(...)`
- `outDir`: *Optional* - The folder in which the screenshots will be saved (see above).
- `raw`: *Optional* - Set to `true` to run a binary instead of a node script. It is applied to all following `test()` calls.
- `interactive`: *Optional* - Whether to prompt the user if the reference image should be updated if a test failed.
- `delay`: *Optional* - Additional delay after starting the application (in ms). It is applied to all following `test()` calls.
- `accuracy`: *Optional* - The threshold (`500` or `"500"` => 500px, `"0.01%"` => 0.01%)
- `logger`: *Optional* - A function to call for logging: `function(type, file, error){}`. Types: `PASSED, FAILED, MISSING, ERROR, REPORT, OS, RETRY, PUSH`

### `test(...)`
- `file`: The node script/binary to test (or an array to pass arguments).
- `title`: The title of the window to be captured.
- `delay`: *Optional* - As above, but only for this call.
- `raw`: *Optional* - As above, but only for this call.
- `delta`: *Optional* - How insensitive the color comparison is.
- `accuracy`: *Optional* - As above, but only for this call.

### `test.generateHTML()`

This will generate a HTML report (see example image) at `${outDir}/report.html`.

### `test.pushToServer(...)`

Send the result this test to a [screenshot-tester-server](https://github.com/mischnic/screenshot-tester-server) instance.

- `host`: The domain of the server (e.g. `https://example.com`)
- `repoId`: The GitHub repo of the current pull request(e.g. `owner/repo-name`)
- `issue`: The PR number (e.g. `2`)
- `onlyFailed`: Whether to push only failed tests
- `osAppend`: String to append to the reported OS

## Requirements

- **macOS**: Python 3 and `pip install click pyobjc-framework-Quartz`
- **Linux**: ImageMagick

## Bundled projects

- for macOS: https://github.com/mischnic/screenshot-native
- screenshot-cmd for Windows from https://github.com/chuntaro/screenshot-cmd