# 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: homePage.test.ts >> dark >> přepnutí z light do dark
- Location: tests/homePage.test.ts:165:7

# Error details

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

```
Error: locator.click: Test timeout of 30000ms exceeded.
Call log:
  - waiting for locator('.data-theme')

```

# Test source

```ts
  73  |       
  74  |       //   for (const link of externalLinks) {
  75  |       //     // Ověříme, že text tlačítka je na stránce vidět
  76  |       //     const href = await homePage.getMenuItemHref(link.name);
  77  |           
  78  |       //     // Ověříme, že href v HTML odpovídá tomu, co máme v datech
  79  |       //     expect(href).toBe(link.url);
  80  |       
  81  |       //     // Provedeme rychlou kontrolu, zda link není "mrtvý"
  82  |       //     const response = await request.get(link.url);
  83  |       //     expect(response.ok(), `Odkaz ${link.name} na adrese ${link.url} vrací chybu!`).toBeTruthy();
  84  |           
  85  |       //     console.log(`Log: Odkaz "${link.name}" je v pořádku.`);
  86  |       //   }
  87  |       // });
  88  | 
  89  |       //funkční řešení - otevře web
  90  |       test('externí Fórum -> odkaz má správnou adresu', async () => {
  91  |         const href = await homePage.getMenuItemLinkHref('Fórum'); // Příklad
  92  |         expect(href).toBe('https://forum.arch-linux.cz/'); 
  93  |       });
  94  |     
  95  |     test('navigation to O nás', async ({ page }) => {
  96  |       await homePage.clickMenuItem('O nás');
  97  |       await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/o-nas`));
  98  |     });
  99  |   });
  100 | 
  101 |   test.describe('Theme', () => {
  102 |     let homePage: HomePage;
  103 | 
  104 |     test.beforeEach(async ({ page }) => {
  105 |       homePage = new HomePage(page);
  106 |       await homePage.navigate();
  107 |     });
  108 |     test('switch theme sun', async ({ page }) => {
  109 |       await homePage.switchThemeFunction()
  110 |     })
  111 |     
  112 |   })
  113 | 
  114 |   test.describe('Carts (Karty) na HomePage', () => {
  115 |     let homePage: HomePage;
  116 | 
  117 |     test.beforeEach(async ({ page }) => {
  118 |       homePage = new HomePage(page);
  119 |       await homePage.navigate();
  120 |     });
  121 | 
  122 |     // Otestuje textace na kartách
  123 |     test('should display all cards correctly', async () => {
  124 |       for (const card of homePageCards) {
  125 |         // Používáme naši POM metodu pro každou kartu
  126 |         await homePage.verifyCardContent(card.title, card.description);
  127 |       }
  128 |     });
  129 | 
  130 |   //   test('should navigate after clicking on a specific card', async ({ page }) => {
  131 |   //     // Příklad pro jednu konkrétní kartu
  132 |   //     await homePage.clickCardButton('Lehkost a rychlost');
  133 |   //     // Zde by následoval expect na novou URL
  134 |   //   });
  135 |    });
  136 | });
  137 | test.describe('dark', () => {
  138 |   test('přepnutí ze světlého startu do tmavého režimu', async ({ page }) => {
  139 |     // 1. FÁZE: Vynucení světlého režimu před startem
  140 |     // EndeavourOS.cz je defaultně tmavý, takže mu musíme zakázat třídu 'dark'
  141 |     await page.addInitScript(() => {
  142 |       document.documentElement.classList.remove('dark');
  143 |       window.localStorage.setItem('theme', 'light');
  144 |     });
  145 |   
  146 |     // 2. FÁZE: Načtení stránky
  147 |     await page.goto('https://endeavouros.cz');
  148 |   
  149 |     // Kontrola, že jsme skutečně začali ve světlém (třída 'dark' chybí)
  150 |     await expect(page.locator('html')).not.toHaveClass(/dark/);
  151 |   
  152 |     // 3. FÁZE: Akce - kliknutí na přepínač
  153 |     // Na webu EndeavourOS.cz je to obvykle tlačítko v menu nebo záhlaví
  154 |     // Tip: Použijeme ARIA label nebo ikonu, pokud známe selektor
  155 |     const themeSwitcher = page.locator('button.theme-switcher, .mode-switcher'); 
  156 |     await themeSwitcher.click();
  157 |   
  158 |     // 4. FÁZE: Ověření výsledku
  159 |     // Nyní by se měla třída 'dark' vrátit na své místo
  160 |     await expect(page.locator('html')).toHaveClass(/dark/);
  161 |     
  162 |     // A můžeme ověřit, že se změnila barva pozadí na tmavou
  163 |     await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(25, 20, 36)');
  164 |   });
  165 |   test('přepnutí z light do dark', async ({ page }) => {
  166 |     // Počkáme, až se web načte a ujistíme se, že je fakt světlý
  167 |     const html = page.locator('html');
  168 |     await html.evaluate(el => el.classList.remove('dark')); 
  169 |     
  170 |     await expect(html).not.toHaveClass(/dark/);
  171 |   
  172 |     // Teď klikni na přepínač
> 173 |     await page.locator('.data-theme').click(); // Zde doplň svůj reálný selektor
      |                                       ^ Error: locator.click: Test timeout of 30000ms exceeded.
  174 |   
  175 |     // A teď už musí být dark
  176 |     await expect(html).toHaveClass(/dark/);
  177 |   });
  178 | });
  179 | 
  180 | 
  181 | 
```