playwright/packages
Andrey Lushnikov c18077c0de
feat(toHaveScreenshot): align screenshot generation & comparison (#12812)
This patch aligns the strategies that are used to generate new
screnshot expectations and to compare screenshot expectations against
baseline.

With this patch, `toHaveScreenshot` will:
- when generating a new expectation: will wait for 2 consecutive
  screenshots to match and accept the last one as expectation.
- when given an expectation:
  * will compare first screenshot against expectation. If matches,
    resolve successfully
  * if first screenshot doesn't match, then wait for 2 consecutive
    screenshots to match and then compare last screenshot with the
    expectation.

An example of a new detailed call log:

```
  1) a.spec.ts:3:1 › should work ===================================================================

    Error: Screenshot comparison failed:

      20000 pixels (ratio 0.03 of all image pixels) are different

    Call log:
      - expect.toHaveScreenshot with timeout 5000ms
      -   verifying given screenshot expectation
      - fast-path: checking first screenshot to match expectation
      - taking page screenshot
      -   disabled all CSS animations
      -   waiting for fonts to load...
      -   fonts in all frames are loaded
      - fast-path failed: first screenshot did not match expectation - 20000 pixels (ratio 0.03 of all image pixels) are different
      - waiting for 2 consecutive screenshots to match
      - waiting 100ms before taking screenshot
      - taking page screenshot
      -   disabled all CSS animations
      -   waiting for fonts to load...
      -   fonts in all frames are loaded
      - 2 consecutive screenshots matched
      - final screenshot did not match expectation - 20000 pixels (ratio 0.03 of all image pixels) are different
      - 20000 pixels (ratio 0.03 of all image pixels) are different

    Expected: /Users/andreylushnikov/tmp/test-results/a-should-work/should-work-1-expected.png
    Received: /Users/andreylushnikov/tmp/test-results/a-should-work/should-work-1-actual.png
        Diff: /Users/andreylushnikov/tmp/test-results/a-should-work/should-work-1-diff.png

      3 | test('should work', async ({ page }) => {
      4 |   await page.goto('file:///Users/andreylushnikov/prog/playwright/tests/assets/rotate-z.html');
    > 5 |   await expect(page).toHaveScreenshot();
        |                      ^
      6 | });
      7 |
```
2022-03-21 15:10:33 -07:00
..
html-reporter chore: prepare to publish component packages (#12697) 2022-03-12 13:51:27 -08:00
playwright chore: cut v1.20 branch (#12593) 2022-03-08 14:01:20 -08:00
playwright-chromium chore: fix markdown links in NPM README's (#12833) 2022-03-17 15:28:57 +01:00
playwright-core feat(toHaveScreenshot): align screenshot generation & comparison (#12812) 2022-03-21 15:10:33 -07:00
playwright-ct-react chore: mount should return locator pointing to the component element / fragment (#12718) 2022-03-13 21:26:13 -07:00
playwright-ct-svelte chore: mount should return locator pointing to the component element / fragment (#12718) 2022-03-13 21:26:13 -07:00
playwright-ct-vue chore(vue): allow adding events in jsx templates (#12746) 2022-03-15 13:02:10 -07:00
playwright-firefox chore: fix markdown links in NPM README's (#12833) 2022-03-17 15:28:57 +01:00
playwright-test feat(test-runner): implement expect.poll (#12815) 2022-03-18 16:31:26 -07:00
playwright-webkit chore: fix markdown links in NPM README's (#12833) 2022-03-17 15:28:57 +01:00
.eslintrc.js chore: don't write into stdout from the test runner, use reporters instead (#11367) 2022-01-12 19:52:40 -08:00