# Instructions

- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.

# Test info

- Name: mfc-corporate-com.spec.ts >> blog >> post-with-comments
- Location: visual/mfc-corporate-com.spec.ts:82:9

# Error details

```
Error: expect(page).toHaveScreenshot(expected) failed

  12036 pixels (ratio 0.01 of all image pixels) are different.

  Snapshot: blog-post-with-comments.png

Call log:
  - Expect "toHaveScreenshot(blog-post-with-comments.png)" with timeout 15000ms
    - verifying given screenshot expectation
  - taking page screenshot
    - disabled all CSS animations
  - waiting for fonts to load...
  - fonts loaded
  - 12036 pixels (ratio 0.01 of all image pixels) are different.
  - waiting 100ms before taking screenshot
  - taking page screenshot
    - disabled all CSS animations
  - waiting for fonts to load...
  - fonts loaded
  - captured a stable screenshot
  - 12036 pixels (ratio 0.01 of all image pixels) are different.

```

# Page snapshot

```yaml
- generic [ref=e2]:
  - link "Skip to content" [ref=e3] [cursor=pointer]:
    - /url: "#page-content"
  - banner [ref=e4]:
    - generic [ref=e5]:
      - link "Marketing Factory Digital GmbH" [ref=e6] [cursor=pointer]:
        - /url: /
        - img "Marketing Factory Digital GmbH" [ref=e7]
      - link "Contact form" [ref=e26] [cursor=pointer]:
        - /url: /forms/contact-form/
      - button "Navigation" [expanded] [ref=e27] [cursor=pointer]
  - navigation "Breadcrumb" [ref=e29]:
    - generic [ref=e30]:
      - paragraph [ref=e31]: "You are here:"
      - list [ref=e32]:
        - listitem [ref=e33]:
          - link "Homepage" [ref=e34] [cursor=pointer]:
            - /url: /
            - img [ref=e35]
        - listitem [ref=e37]:
          - text: /
          - link "Blog" [ref=e38] [cursor=pointer]:
            - /url: /blog/
            - generic [ref=e39]: Blog
        - listitem [ref=e40]:
          - text: /
          - generic [ref=e41]: With comments
  - main [ref=e42]:
    - article [ref=e43]:
      - generic [ref=e45]:
        - generic [ref=e46]:
          - generic [ref=e47]:
            - figure [ref=e48]
            - list [ref=e53]:
              - listitem [ref=e54]:
                - link "Ice cream" [ref=e55] [cursor=pointer]:
                  - /url: /blog/categories/ice-cream/
              - listitem [ref=e56]:
                - link "Chocolate" [ref=e57] [cursor=pointer]:
                  - /url: /blog/categories/chocolate/
              - listitem [ref=e58]:
                - link "Cookies" [ref=e59] [cursor=pointer]:
                  - /url: /blog/categories/cookies/
            - time [ref=e63]: 15.06.2022
            - heading "With comments" [level=1] [ref=e64]
          - separator [ref=e65]
        - complementary [ref=e66]:
          - generic [ref=e68]:
            - generic [ref=e70]: John Doe
            - paragraph [ref=e71]:
              - link "More posts by this author" [ref=e72] [cursor=pointer]:
                - /url: /blog/authors/john-doe/
            - list [ref=e74]:
              - listitem [ref=e75]:
                - link "The author's website" [ref=e76] [cursor=pointer]:
                  - /url: https://www.example.org
                  - img [ref=e77]
              - listitem [ref=e79]:
                - link "The author on Twitter" [ref=e80] [cursor=pointer]:
                  - /url: https://twitter.com/realjohndoe
                  - img [ref=e81]
          - link "Get blog posts as RSS feed" [ref=e83] [cursor=pointer]:
            - /url: /blog/blog.recent.xml
            - img [ref=e84]
            - text: Get blog posts as RSS feed
          - paragraph [ref=e86]: All parts of this blog series
          - list [ref=e87]:
            - listitem [ref=e88]:
              - link "With comments" [ref=e89] [cursor=pointer]:
                - /url: /blog/with-comments/
            - listitem [ref=e90]:
              - link "Localized Featured Image" [ref=e91] [cursor=pointer]:
                - /url: /blog/localized-featured-image/
      - generic [ref=e92]:
        - paragraph [ref=e93]: Please feel free to share this article.
        - list [ref=e94]:
          - listitem [ref=e95]:
            - button "share" [ref=e96] [cursor=pointer]:
              - img [ref=e97]
              - generic [ref=e99]: share
          - listitem [ref=e100]:
            - button "share" [ref=e101] [cursor=pointer]:
              - img [ref=e102]
              - generic [ref=e104]: share
          - listitem [ref=e105]:
            - button "share" [ref=e106] [cursor=pointer]:
              - img [ref=e107]
              - generic [ref=e109]: share
  - generic [ref=e111]:
    - separator [ref=e112]
    - paragraph [ref=e113]: Comments
    - paragraph [ref=e114]: No comments yet.
  - contentinfo [ref=e115]:
    - generic [ref=e119]:
      - paragraph [ref=e121]: Write a comment.
      - generic [ref=e123]:
        - generic [ref=e124]:
          - generic [ref=e125]: Name *
          - textbox "Name *" [ref=e126]
        - generic [ref=e127]:
          - generic [ref=e128]: E-mail *
          - textbox "E-mail *" [ref=e129]
        - generic [ref=e130]:
          - generic [ref=e131]: Comment *
          - textbox "Comment *" [ref=e132]
        - generic [ref=e133]:
          - generic [ref=e134]:
            - checkbox "I have read the data privacy statement and consent to my personal data being processed according to this statement. *" [ref=e135]
            - generic [ref=e136]:
              - text: I have read the
              - link "data privacy statement" [ref=e137] [cursor=pointer]:
                - /url: https://www.marketing-factory.com/data-privacy-policy/
              - text: and consent to my personal data being processed according to this statement. *
          - generic [ref=e138]:
            - paragraph [ref=e139]: I have been informed that the processing of my data is on a voluntary basis and that I can refuse my consent without detrimental consequences for me or withdraw my consent at any time to Marketing Factory Digital GmbH by mail (Erkrather Straße 401, D-40231 Düsseldorf) or e-mail (info@marketing-factory.de).
            - paragraph [ref=e140]: I understand that the above data will be stored for as long as I wish to be contacted by Marketing Factory. After my revocation my data will be deleted. Further storage may take place in individual cases if this is required by law.
        - navigation [ref=e141]:
          - button "Submit" [ref=e142] [cursor=pointer]
    - generic [ref=e144]:
      - navigation [ref=e145]:
        - list [ref=e146]:
          - listitem [ref=e147]:
            - button "Cookie settings" [ref=e148] [cursor=pointer]
          - listitem [ref=e149]:
            - link "Data privacy policy" [ref=e150] [cursor=pointer]:
              - /url: https://www.marketing-factory.com/data-privacy-policy/
          - listitem [ref=e151]:
            - link "Legal notice" [ref=e152] [cursor=pointer]:
              - /url: https://www.marketing-factory.com/legal-notice/
      - generic [ref=e153]:
        - paragraph [ref=e154]: © Marketing Factory Digital GmbH
        - paragraph [ref=e155]:
          - text: Alternative text for images is partially
          - link "generated by AI" [ref=e156] [cursor=pointer]:
            - /url: https://www.marketing-factory.com/technology/typo3/our-typo3-extensions/ai-filemetadata/
    - generic [ref=e159]:
      - strong [ref=e160]: Picture Credits
      - list
```

# Test source

```ts
  1   | import { test, expect } from '@playwright/test';
  2   | import { setup, scrollToBottom, setDarkTheme, hideElements } from '../helpers/utils';
  3   | 
  4   | const PAGE_HEADER = ['.c-page-header'];
  5   | const snap = (name: string) => ({ name: `${name}.png`, fullPage: true } as const);
  6   | 
  7   | test.describe('content', () => {
  8   |     test('keyvisual', async ({ page }) => {
  9   |         await setup(page, '/content-elements/keyvisual/');
  10  |         await expect(page).toHaveScreenshot(snap('content-keyvisual'));
  11  |         await setDarkTheme(page);
  12  |         await expect(page).toHaveScreenshot(snap('content-keyvisual-dark'));
  13  |     });
  14  | 
  15  |     test('hero-image', async ({ page }) => {
  16  |         await setup(page, '/content-elements/hero-image/');
  17  |         await expect(page).toHaveScreenshot(snap('content-hero-image'));
  18  |     });
  19  | 
  20  |     test('slider-slide2grid', async ({ page }) => {
  21  |         await setup(page, '/content-elements/slider-slide2grid/');
  22  |         await expect(page).toHaveScreenshot(snap('content-slider-slide2grid'));
  23  |         await setDarkTheme(page);
  24  |         await expect(page).toHaveScreenshot(snap('content-slider-slide2grid-dark'));
  25  |     });
  26  | 
  27  |     test('comparison-modul', async ({ page }) => {
  28  |         await setup(page, '/content-elements/comparison-module/');
  29  |         await expect(page).toHaveScreenshot(snap('content-comparison-modul'));
  30  |         await setDarkTheme(page);
  31  |         await expect(page).toHaveScreenshot(snap('content-comparison-modul-dark'));
  32  |     });
  33  | });
  34  | 
  35  | test.describe('page-types', () => {
  36  |     test('search', async ({ page }) => {
  37  |         await setup(page, '/page-types/search/?tx_solr%5Bq%5D=obermeyer');
  38  |         await expect(page).toHaveScreenshot(snap('pagetype-search'));
  39  |     });
  40  | 
  41  |     test('client-list', async ({ page }) => {
  42  |         await setup(page, '/page-types/customers-list-view/');
  43  |         await expect(page).toHaveScreenshot(snap('pagetype-client-list'));
  44  |     });
  45  | 
  46  |     test('client-pfm', async ({ page }) => {
  47  |         await setup(page, '/page-types/customers-list-view/pfm-medical-sg/');
  48  |         await expect(page).toHaveScreenshot(snap('pagetype-client-pfm'));
  49  |     });
  50  | });
  51  | 
  52  | test.describe('plugins', () => {
  53  |     test('project-list', async ({ page }) => {
  54  |         await setup(page, '/plugins/project-list/');
  55  |         await expect(page).toHaveScreenshot(snap('plugin-project-list'));
  56  |     });
  57  | 
  58  |     test('project-obermeyer-corporate', async ({ page }) => {
  59  |         await setup(page, '/page-types/customers-list-view/obermeyer-sg/launch-of-the-obermeyer-groups-new-corporate-website-sg/');
  60  |         await hideElements(page, PAGE_HEADER);
  61  |         await scrollToBottom(page);
  62  |         await expect(page).toHaveScreenshot(snap('plugin-project-obermeyer-corporate'));
  63  |     });
  64  | 
  65  |     test('picturecredits', async ({ page }) => {
  66  |         await setup(page, '/plugins/picturecredits/');
  67  |         await expect(page).toHaveScreenshot(snap('plugin-picturecredits'));
  68  |     });
  69  | });
  70  | 
  71  | test.describe('blog', () => {
  72  |     test('overview', async ({ page }) => {
  73  |         await setup(page, '/blog/');
  74  |         await expect(page).toHaveScreenshot(snap('blog-overview'));
  75  |     });
  76  | 
  77  |     test('post-menu-elements', async ({ page }) => {
  78  |         await setup(page, '/blog/with-menu-elements/');
  79  |         await expect(page).toHaveScreenshot(snap('blog-post-menu-elements'));
  80  |     });
  81  | 
  82  |     test('post-with-comments', async ({ page }) => {
  83  |         await setup(page, '/blog/with-comments/');
> 84  |         await expect(page).toHaveScreenshot(snap('blog-post-with-comments'));
      |                            ^ Error: expect(page).toHaveScreenshot(expected) failed
  85  |     });
  86  | 
  87  |     test('post-localized-featured-image', async ({ page }) => {
  88  |         await setup(page, '/blog/localized-featured-image/');
  89  |         await expect(page).toHaveScreenshot(snap('blog-post-localized-featured-image'));
  90  |     });
  91  | });
  92  | 
  93  | test.describe('forms', () => {
  94  |     test('contact', async ({ page }) => {
  95  |         await setup(page, '/forms/contact-form/');
  96  |         await expect(page).toHaveScreenshot(snap('forms-contact'));
  97  |         await setDarkTheme(page);
  98  |         await expect(page).toHaveScreenshot(snap('forms-contact-dark'));
  99  |     });
  100 | 
  101 |     test('footer', async ({ page }) => {
  102 |         await setup(page, '/forms/footer-form/');
  103 |         await expect(page).toHaveScreenshot(snap('forms-footer'));
  104 |     });
  105 | });
  106 | 
```