# 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: journal.spec.ts >> user can cook recipe and see stock deducted correctly
- Location: tests/journal.spec.ts:40:5

# Error details

```
Test timeout of 30000ms exceeded.
```

```
Error: page.waitForTimeout: Test timeout of 30000ms exceeded.
```

# Page snapshot

```yaml
- generic [ref=e2]:
  - generic [ref=e4]:
    - generic [ref=e6]:
      - generic [ref=e8]:
        - generic [ref=e9]:
          - img [ref=e10]
          - generic [ref=e12]: 9 мая
        - generic [ref=e14]:
          - generic:
            - generic [ref=e17]:
              - generic [ref=e20]:
                - generic [ref=e21]: пн
                - generic [ref=e22]: "27"
              - generic [ref=e25]:
                - generic [ref=e26]: вт
                - generic [ref=e27]: "28"
              - generic [ref=e30]:
                - generic [ref=e31]: ср
                - generic [ref=e32]: "29"
              - generic [ref=e35]:
                - generic [ref=e36]: чт
                - generic [ref=e37]: "30"
              - generic [ref=e40]:
                - generic [ref=e41]: пт
                - generic [ref=e42]: "1"
              - generic [ref=e45]:
                - generic [ref=e46]: сб
                - generic [ref=e47]: "2"
              - generic [ref=e50]:
                - generic [ref=e51]: вс
                - generic [ref=e52]: "3"
            - generic [ref=e54]:
              - generic [ref=e57]:
                - generic [ref=e58]: пн
                - generic [ref=e59]: "4"
              - generic [ref=e62]:
                - generic [ref=e63]: вт
                - generic [ref=e64]: "5"
              - generic [ref=e67]:
                - generic [ref=e68]: ср
                - generic [ref=e69]: "6"
              - generic [ref=e72]:
                - generic [ref=e73]: чт
                - generic [ref=e74]: "7"
              - generic [ref=e77]:
                - generic [ref=e78]: пт
                - generic [ref=e79]: "8"
              - generic [ref=e80]:
                - generic [ref=e82]:
                  - generic [ref=e83]: сб
                  - generic [ref=e84]: "9"
                - img [ref=e86]
              - generic [ref=e90]:
                - generic [ref=e91]: вс
                - generic [ref=e92]: "10"
            - generic [ref=e94]:
              - generic [ref=e97]:
                - generic [ref=e98]: пн
                - generic [ref=e99]: "11"
              - generic [ref=e102]:
                - generic [ref=e103]: вт
                - generic [ref=e104]: "12"
              - generic [ref=e107]:
                - generic [ref=e108]: ср
                - generic [ref=e109]: "13"
              - generic [ref=e112]:
                - generic [ref=e113]: чт
                - generic [ref=e114]: "14"
              - generic [ref=e117]:
                - generic [ref=e118]: пт
                - generic [ref=e119]: "15"
              - generic [ref=e122]:
                - generic [ref=e123]: сб
                - generic [ref=e124]: "16"
              - generic [ref=e127]:
                - generic [ref=e128]: вс
                - generic [ref=e129]: "17"
      - generic [ref=e132]:
        - generic [ref=e134]:
          - region "Завтрак" [ref=e135]:
            - generic [ref=e137]: Завтрак
            - generic [ref=e139]:
              - generic [ref=e140]: Что готовили?
              - button "Отметить блюдо" [ref=e141]:
                - generic [ref=e142]:
                  - img [ref=e143]
                  - generic [ref=e145]: Отметить блюдо
          - region "Обед" [ref=e146]:
            - generic [ref=e148]: Обед
            - generic [ref=e150]:
              - generic [ref=e151]: Что готовили?
              - button "Отметить блюдо" [ref=e152]:
                - generic [ref=e153]:
                  - img [ref=e154]
                  - generic [ref=e156]: Отметить блюдо
          - region "Ужин" [ref=e157]:
            - generic [ref=e159]: Ужин
            - generic [ref=e161]:
              - generic [ref=e162]: Что готовили?
              - button "Отметить блюдо" [ref=e163]:
                - generic [ref=e164]:
                  - img [ref=e165]
                  - generic [ref=e167]: Отметить блюдо
          - region "Прочее" [ref=e168]:
            - generic [ref=e170]: Прочее
            - generic [ref=e172]:
              - generic [ref=e173]: Что готовили?
              - button "Отметить блюдо" [ref=e174]:
                - generic [ref=e175]:
                  - img [ref=e176]
                  - generic [ref=e178]: Отметить блюдо
        - generic [ref=e180]:
          - region "Завтрак" [ref=e181]:
            - generic [ref=e183]: Завтрак
            - generic [ref=e185]:
              - generic [ref=e186]: Что планируете?
              - button "Добавить блюдо" [ref=e187]:
                - generic [ref=e188]:
                  - img [ref=e189]
                  - generic [ref=e191]: Добавить блюдо
          - region "Обед" [ref=e192]:
            - generic [ref=e194]: Обед
            - generic [ref=e196]:
              - generic [ref=e197]: Что планируете?
              - button "Добавить блюдо" [ref=e198]:
                - generic [ref=e199]:
                  - img [ref=e200]
                  - generic [ref=e202]: Добавить блюдо
          - region "Ужин" [ref=e203]:
            - generic [ref=e204]:
              - generic [ref=e205]: Ужин
              - button "Добавить блюдо" [ref=e206]:
                - img [ref=e208]
            - region "Тестовое блюдо для проверки запасов" [ref=e211]:
              - button "Тестовое блюдо для проверки запасов" [ref=e212] [cursor=pointer]:
                - generic "Тестовое блюдо для проверки запасов" [ref=e213]:
                  - generic [ref=e214]:
                    - generic [ref=e215]:
                      - img [ref=e218]
                      - img [ref=e222]
                    - generic [ref=e224]:
                      - generic [ref=e225]: Тестовое блюдо для проверки запасов
                      - generic [ref=e226]: 2 порции
          - region "Прочее" [ref=e227]:
            - generic [ref=e229]: Прочее
            - generic [ref=e231]:
              - generic [ref=e232]: Что планируете?
              - button "Добавить блюдо" [ref=e233]:
                - generic [ref=e234]:
                  - img [ref=e235]
                  - generic [ref=e237]: Добавить блюдо
        - generic [ref=e239]:
          - region "Завтрак" [ref=e240]:
            - generic [ref=e242]: Завтрак
            - generic [ref=e244]:
              - generic [ref=e245]: Что планируете?
              - button "Добавить блюдо" [ref=e246]:
                - generic [ref=e247]:
                  - img [ref=e248]
                  - generic [ref=e250]: Добавить блюдо
          - region "Обед" [ref=e251]:
            - generic [ref=e253]: Обед
            - generic [ref=e255]:
              - generic [ref=e256]: Что планируете?
              - button "Добавить блюдо" [ref=e257]:
                - generic [ref=e258]:
                  - img [ref=e259]
                  - generic [ref=e261]: Добавить блюдо
          - region "Ужин" [ref=e262]:
            - generic [ref=e264]: Ужин
            - generic [ref=e266]:
              - generic [ref=e267]: Что планируете?
              - button "Добавить блюдо" [ref=e268]:
                - generic [ref=e269]:
                  - img [ref=e270]
                  - generic [ref=e272]: Добавить блюдо
          - region "Прочее" [ref=e273]:
            - generic [ref=e275]: Прочее
            - generic [ref=e277]:
              - generic [ref=e278]: Что планируете?
              - button "Добавить блюдо" [ref=e279]:
                - generic [ref=e280]:
                  - img [ref=e281]
                  - generic [ref=e283]: Добавить блюдо
    - navigation [ref=e284]:
      - button "Рецепты" [ref=e285] [cursor=pointer]:
        - img [ref=e286]
      - button "Журнал" [ref=e288] [cursor=pointer]:
        - img [ref=e289]
      - button "Есть дома" [ref=e291] [cursor=pointer]:
        - img [ref=e292]
      - button "Покупки" [ref=e294] [cursor=pointer]:
        - img [ref=e295]
      - button "Профиль" [ref=e297] [cursor=pointer]:
        - img [ref=e298]
  - alert [ref=e300]:
    - img [ref=e302]
    - generic [ref=e304]: Рецепт отмечен как приготовленный
    - button "Close" [active] [ref=e306] [cursor=pointer]:
      - img [ref=e307]
```

# Test source

```ts
  1  | import { Page, expect } from "@playwright/test";
  2  | 
  3  | /**
  4  |  * Navigate to the leftovers section (Есть дома)
  5  |  *
  6  |  * Note: This uses position-based navigation instead of accessible name because
  7  |  * immediately after certain operations (like dismissing alerts), the navigation
  8  |  * buttons may not be reliably clickable by name. Position-based navigation with
  9  |  * force click and animation delay ensures consistent behavior.
  10 |  */
  11 | export default async function goToLeftovers(page: Page): Promise<void> {
  12 |   // Click the leftovers navigation button (3rd button in the nav)
  13 |   // The buttons are: Рецепты, Журнал, Есть дома, Покупки, Профиль
  14 |   const navigation = page.getByRole("navigation");
  15 |   const navButtons = navigation.getByRole("button");
  16 |   const leftoverButton = navButtons.nth(2); // 0-indexed, so 2 is the 3rd button (Есть дома)
  17 | 
  18 |   // Dismiss any alerts that might be blocking the navigation
  19 |   const alert = page.getByRole("alert");
  20 |   const alertVisible = await alert.isVisible().catch(() => false);
  21 |   if (alertVisible) {
  22 |     const closeButton = alert.getByRole("button", { name: "Close" });
  23 |     await closeButton.click().catch(() => {});
> 24 |     await page.waitForTimeout(300);
     |                ^ Error: page.waitForTimeout: Test timeout of 30000ms exceeded.
  25 |   }
  26 | 
  27 |   // Wait for button to be visible and clickable
  28 |   await leftoverButton.waitFor({ state: "visible", timeout: 10000 });
  29 |   await page.waitForTimeout(300); // Allow animations to settle
  30 |   await leftoverButton.click({ force: true });
  31 | 
  32 |   // Wait for navigation to leftovers page
  33 |   await page.waitForURL("**/leftovers**", { timeout: 10000 });
  34 | 
  35 |   // Optionally verify the page heading is visible
  36 |   try {
  37 |     await expect(page.getByText("Есть дома")).toBeVisible({ timeout: 5000 });
  38 |   } catch (error) {
  39 |     // If the heading isn't visible, that's ok - we successfully navigated to the leftovers page
  40 |     console.log("Leftovers heading not visible, but navigation successful");
  41 |   }
  42 | }
  43 | 
```