# 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: 02-shop.spec.ts >> what's broken here?
- Location: tests/02-shop.spec.ts:24:5

# Error details

```
Error: expect(locator).toHaveText(expected) failed

Locator:  getByTestId('cart').getByTestId('cart-item-quantity')
Expected: "3"
Received: "2"
Timeout:  5000ms

Call log:
  - Expect "toHaveText" with timeout 5000ms
  - waiting for getByTestId('cart').getByTestId('cart-item-quantity')
    4 × locator resolved to <span class="w-full text-sm" data-testid="cart-item-quantity">1</span>
      - unexpected value "1"
    5 × locator resolved to <span class="w-full text-sm" data-testid="cart-item-quantity">2</span>
      - unexpected value "2"

```

# Page snapshot

```yaml
- generic [active] [ref=e1]:
  - navigation [ref=e2]:
    - generic [ref=e3]:
      - generic [ref=e4]:
        - link [ref=e5]:
          - /url: /
          - img [ref=e7]
        - list [ref=e8]:
          - listitem [ref=e9]:
            - link [ref=e10]:
              - /url: /search/
              - text: Products
          - listitem [ref=e11]:
            - link [ref=e12]:
              - /url: /lessons/
              - text: Workshop
      - generic [ref=e14]:
        - textbox [ref=e15]:
          - /placeholder: Search for products...
        - button [ref=e16] [cursor=pointer]:
          - img [ref=e17]
          - text: Search
      - generic [ref=e19]:
        - generic [ref=e20]:
          - generic [ref=e21]: 🇪🇸
          - generic [ref=e22]: ES
        - link [ref=e23]:
          - /url: /login/
          - text: Login
        - button [ref=e24] [cursor=pointer]:
          - generic [ref=e25]:
            - img [ref=e26]
            - generic [ref=e29]: "2"
  - main [ref=e30]:
    - generic [ref=e31]:
      - generic [ref=e32]:
        - img "Top and bottom view of a snowboard. The top view shows an illustration with varied outlined shapes in black. The bottom view shows a black box character with an H pointing, and surrounded by black outlined illustrative elements." [ref=e35]
        - generic [ref=e36]:
          - generic [ref=e37]:
            - heading "The Multi-managed Snowboard" [level=1] [ref=e38]
            - paragraph [ref=e40]: 629.95EUR
          - button "Add item to cart" [ref=e41] [cursor=pointer]:
            - img [ref=e43]
            - generic [ref=e45]: Add To Cart
          - link "Share on Bluesky ↗" [ref=e46]:
            - /url: https://bsky.app/intent/compose?text=Check%20out%20%22The%20Multi-managed%20Snowboard%22%20on%20the%20PWT%20Workshop%20Store%3A%20%2Fproduct%2Fthe-multi-managed-snowboard
      - generic [ref=e47]:
        - heading "Related Products" [level=2] [ref=e48]
        - list [ref=e49]:
          - listitem [ref=e50]:
            - 'link "The Collection Snowboard: Liquid The Collection Snowboard: Liquid 749.95" [ref=e51]':
              - /url: /product/the-collection-snowboard-liquid/
              - generic [ref=e52]:
                - 'img "The Collection Snowboard: Liquid" [ref=e53]'
                - generic [ref=e55]:
                  - 'heading "The Collection Snowboard: Liquid" [level=3] [ref=e56]'
                  - paragraph [ref=e57]: "749.95"
          - listitem [ref=e58]:
            - link "The Compare at Price Snowboard The Compare at Price Snowboard 785.95" [ref=e59]:
              - /url: /product/the-compare-at-price-snowboard/
              - generic [ref=e60]:
                - img "The Compare at Price Snowboard" [ref=e61]
                - generic [ref=e63]:
                  - heading "The Compare at Price Snowboard" [level=3] [ref=e64]
                  - paragraph [ref=e65]: "785.95"
          - listitem [ref=e66]:
            - link "The Multi-location Snowboard The Multi-location Snowboard 729.95" [ref=e67]:
              - /url: /product/the-multi-location-snowboard/
              - generic [ref=e68]:
                - img "The Multi-location Snowboard" [ref=e69]
                - generic [ref=e71]:
                  - heading "The Multi-location Snowboard" [level=3] [ref=e72]
                  - paragraph [ref=e73]: "729.95"
          - listitem [ref=e74]:
            - link "The Complete Snowboard The Complete Snowboard 699.95" [ref=e75]:
              - /url: /product/the-complete-snowboard/
              - generic [ref=e76]:
                - img "The Complete Snowboard" [ref=e77]
                - generic [ref=e79]:
                  - heading "The Complete Snowboard" [level=3] [ref=e80]
                  - paragraph [ref=e81]: "699.95"
          - listitem [ref=e82]:
            - link "The Hidden Snowboard The Hidden Snowboard 749.95" [ref=e83]:
              - /url: /product/the-hidden-snowboard/
              - generic [ref=e84]:
                - img "The Hidden Snowboard" [ref=e85]
                - generic [ref=e87]:
                  - heading "The Hidden Snowboard" [level=3] [ref=e88]
                  - paragraph [ref=e89]: "749.95"
          - listitem [ref=e90]:
            - 'link "The Collection Snowboard: Hydrogen The Collection Snowboard: Hydrogen 600" [ref=e91]':
              - /url: /product/the-collection-snowboard-hydrogen/
              - generic [ref=e92]:
                - 'img "The Collection Snowboard: Hydrogen" [ref=e93]'
                - generic [ref=e95]:
                  - 'heading "The Collection Snowboard: Hydrogen" [level=3] [ref=e96]'
                  - paragraph [ref=e97]: "600"
    - generic [ref=e98]:
      - link "pwt logo PWT Workshop" [ref=e101]:
        - /url: /
        - img "pwt logo" [ref=e103]
        - generic [ref=e104]: PWT Workshop
      - generic [ref=e106]:
        - paragraph [ref=e107]: © 2023-2026 SeleniumConf & AppiumConf 2026 . All rights reserved.
        - separator [ref=e108]
        - paragraph [ref=e109]: Tweaked in Berlin
  - alert [ref=e110]: The Multi-managed Snowboard | PWT Workshop
  - generic:
    - generic:
      - generic:
        - dialog:
          - generic [ref=e112]:
            - generic [ref=e113]:
              - heading "My Cart" [level=3] [ref=e114]
              - button "Close cart" [ref=e115] [cursor=pointer]:
                - img [ref=e117]
            - generic [ref=e119]:
              - list [ref=e120]:
                - listitem [ref=e121]:
                  - generic [ref=e122]:
                    - button "Remove cart item" [ref=e124] [cursor=pointer]:
                      - img [ref=e125]
                    - link "Top and bottom view of a snowboard. The top view shows an illustration with varied outlined shapes in black. The bottom view shows a black box character with an H pointing, and surrounded by black outlined illustrative elements. The Multi-managed Snowboard" [ref=e127]:
                      - /url: /product/the-multi-managed-snowboard/
                      - img "Top and bottom view of a snowboard. The top view shows an illustration with varied outlined shapes in black. The bottom view shows a black box character with an H pointing, and surrounded by black outlined illustrative elements." [ref=e129] [cursor=pointer]
                      - heading "The Multi-managed Snowboard" [level=4] [ref=e131]
                    - generic [ref=e132]:
                      - paragraph [ref=e133]:
                        - generic [ref=e134]: "1259.9"
                        - generic [ref=e135]: EUR
                      - generic [ref=e136]:
                        - button "Reduce item quantity" [ref=e137] [cursor=pointer]:
                          - img [ref=e138]
                        - paragraph [ref=e139]: "2"
                        - button "Increase item quantity" [ref=e140] [cursor=pointer]:
                          - img [ref=e141]
              - generic [ref=e143]:
                - generic [ref=e144]:
                  - paragraph [ref=e145]: Taxes
                  - paragraph [ref=e146]: 0USD
                - generic [ref=e147]:
                  - paragraph [ref=e148]: Shipping
                  - paragraph [ref=e149]: Calculated at checkout
                - generic [ref=e150]:
                  - paragraph [ref=e151]: Total
                  - paragraph [ref=e152]: 1259.9EUR
              - link "Proceed to Checkout" [ref=e153]:
                - /url: /checkout/
```

# Test source

```ts
  1  | import { expect, test } from "@playwright/test";
  2  | 
  3  | test("[broken] completes a full shopping journey from search to cart", async ({
  4  |   page,
  5  | }) => {
  6  |   await page.goto("https://www.playwright-workshop.online");
  7  | 
  8  |   await page.getByRole("link", { name: "Login" }).click();
  9  |   await page.getByLabel("Name").fill("stefan");
  10 |   await page.getByLabel("Your password").fill("12345678");
  11 |   await page.getByRole("button", { name: "Login" }).click();
  12 | 
  13 |   await page.waitForURL(/\//);
  14 | 
  15 |   await expect(page.getByTestId("login-name")).toBeVisible();
  16 | 
  17 |   await page.getByPlaceholder("Search for products...").fill("snowboard");
  18 |   await page.getByRole("button", { name: "Search" }).click();
  19 |   await expect(page.getByTestId("search-grid")).toBeVisible();
  20 |   await page.getByRole("link", { name: "Price: Low to high" }).click();
  21 |   await expect(page).toHaveURL(/sort=price-asc/);
  22 | });
  23 | 
  24 | /**
  25 | test("what's broken here?", async ({ page }) => {
  26 |   await page.goto("https://www.playwright-workshop.online/");
  27 |   await page.getByRole("link", { name: "The Multi-managed Snowboard" }).click();
  28 |   await page.getByRole("button", { name: "Add item to cart" }).click();
  29 | 
  30 |   const cart = page.getByTestId("cart");
  31 |   await cart
  32 |     .getByRole("button", { name: "Increase item quantity" })
  33 |     .first()
> 34 |     .dblclick();
     |                                                        ^ Error: expect(locator).toHaveText(expected) failed
  35 |   await expect(cart.getByTestId("cart-item-quantity")).toHaveText("3");
  36 | });
  37 | */
  38 | 
```