light to dark theme
Playwright Tests / test (push) Successful in 6m52s

This commit is contained in:
2026-05-02 23:38:24 +02:00
parent e67a4a1edf
commit 18e78b04ba
33 changed files with 300 additions and 1119 deletions
+1 -1
View File
@@ -87,4 +87,4 @@ Error generating stack: `+l.message+`
<div id='root'></div>
</body>
</html>
<template id="playwrightReportBase64">data:application/zip;base64,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</template>
<template id="playwrightReportBase64">data:application/zip;base64,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</template>
@@ -6,23 +6,13 @@
# Test info
- Name: homePage.test.ts >> startuje přímo ve světlém režimu
- Location: tests/homePage.test.ts:137:5
- Name: homePage.test.ts >> Theme >> Mock date light >> Light to Dark check
- Location: tests/homePage.test.ts:175:9
# Error details
```
Error: expect(locator).toHaveAttribute(expected) failed
Locator: locator('data-theme')
Expected: "light"
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toHaveAttribute" with timeout 5000ms
- waiting for locator('data-theme')
ReferenceError: homePage is not defined
```
# Page snapshot
@@ -61,7 +51,7 @@ Call log:
- generic [ref=e25]: 
- text: Sdílet
- button "Přepnout téma" [ref=e26] [cursor=pointer]:
- generic [ref=e27]:
- generic [ref=e27]:
- main [ref=e28]:
- generic [ref=e29]:
- heading "🇨🇿 Vítám Tě na webu České komunity EndeavourOS! 🇨🇿" [level=1] [ref=e30]
@@ -125,107 +115,109 @@ Call log:
# Test source
```ts
48 | test('navigation to EndeavourOS', async ({ page }) => {
49 | await homePage.clickMenuItem('EndeavourOS');
50 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/endeavouros`));
51 | });
52 |
53 | test('navigation to Články', async ({ page }) => {
54 | await homePage.clickMenuItem('Články');
55 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/rozcestnik`));
56 | });
57 |
58 | test('navigation to Krátké návody', async ({ page }) => {
59 | await homePage.clickMenuItem('Krátké návody');
60 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/cheatsheet`));
61 | });
62 |
63 | // Seznam externích odkazů, které chceme prověřit
64 | // Nyní nejde nutno doopravit
65 | // test('externí odkazy v menu jsou platné', async ({ page, request }) => {
66 | // const homePage = new HomePage(page);
67 | // await homePage.navigate();
68 |
69 | // Seznam externích odkazů, které chceme prověřit
70 | // test('kontrola externích odkazů na zdraví (status 200)', async ({ page, request }) => {
71 | // const homePage = new HomePage(page);
72 | // await homePage.navigate();
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('startuje přímo ve světlém režimu', async ({ page }) => {
138 | // Tento skript se spustí dříve, než se načte CSS a JS tvého webu
139 | await page.addInitScript(() => {
140 | document.documentElement.setAttribute('data-theme', 'light');
141 | // Pokud ukládáš nastavení do localStorage, můžeš ho "přednastavit" i tam
142 | window.localStorage.setItem('data-theme', 'light');
143 | });
144 |
145 | await page.goto('https://endeavouros.cz');
146 |
147 | // Nyní už rovnou ověřuješ, že je vše světlé
> 148 | await expect(page.locator('data-theme')).toHaveAttribute('data-theme', 'light');
| ^ Error: expect(locator).toHaveAttribute(expected) failed
149 | });
101 |
102 |
103 | test.describe('Carts (Karty) na HomePage', () => {
104 | let homePage: HomePage;
105 |
106 | test.beforeEach(async ({ page }) => {
107 | homePage = new HomePage(page);
108 | await homePage.navigate();
109 | });
110 |
111 | // Otestuje textace na kartách
112 | test('should display all cards correctly', async () => {
113 | for (const card of homePageCards) {
114 | // Používáme naši POM metodu pro každou kartu
115 | await homePage.verifyCardContent(card.title, card.description);
116 | }
117 | });
118 |
119 | // test('should navigate after clicking on a specific card', async ({ page }) => {
120 | // // Příklad pro jednu konkrétní kartu
121 | // await homePage.clickCardButton('Lehkost a rychlost');
122 | // // Zde by následoval expect na novou URL
123 | // });
124 | });
125 | });
126 |
127 |
128 |
129 | test.describe('Theme', () => {
130 | test.describe('Theme -- dark default to light', () => {
131 | let homePage: HomePage;
132 |
133 | test.beforeEach(async ({ page }) => {
134 | homePage = new HomePage(page);
135 | await homePage.navigate();
136 | });
137 | test('switch theme sun', async ({ page }) => {
138 | await homePage.switchThemeFunctionLight()
139 | });
140 |
141 | });
142 | test.describe('Mock date light', () => {
143 | test('vynucený start ve světlém režimu + kontrola režimu', async ({ page }) => {
144 | // 1. Nastavíme emulaci systému na light (to je základ)
145 | await page.emulateMedia({ colorScheme: 'light' });
146 |
147 | // 2. Mockujeme stav paměti a DOMu
148 | await page.addInitScript(() => {
149 | // Vnutíme informaci, že chceme light do paměti
150 | window.localStorage.setItem('theme', 'light');
151 | window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
152 |
153 | // Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
154 | const observer = new MutationObserver(() => {
155 | if (document.documentElement.classList.contains('dark')) {
156 | document.documentElement.classList.remove('dark');
157 | }
158 | });
159 | observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
160 | });
161 |
162 | // 3. Jdeme na web
163 | await page.goto('https://endeavouros.cz');
164 |
165 | // 4. OVĚŘENÍ: Teď už musí být světlý
166 | const html = page.locator('html');
167 | await expect(html).not.toHaveClass(/dark/);
168 |
169 | // Vizuální kontrola - barva pozadí by teď měla být bílá/světlá (rgb 255, 255, 255)
170 | // Poznámka: Pokud má web i ve světlém režimu jinou barvu, uprav si rgb hodnotu
171 | await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(248, 249, 250)');
172 | await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
173 |
174 | });
175 | test('Light to Dark check', async ({ page }) => {
176 | // 1. Nastavíme emulaci systému na light (to je základ)
177 | await page.emulateMedia({ colorScheme: 'light' });
178 |
179 | // 2. Mockujeme stav paměti a DOMu
180 | await page.addInitScript(() => {
181 | // Vnutíme informaci, že chceme light do paměti
182 | window.localStorage.setItem('theme', 'light');
183 | window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
184 |
185 | // Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
186 | const observer = new MutationObserver(() => {
187 | if (document.documentElement.classList.contains('dark')) {
188 | document.documentElement.classList.remove('dark');
189 | }
190 | });
191 | observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
192 | });
193 |
194 | // 3. Jdeme na web
195 | await page.goto('https://endeavouros.cz');
196 |
197 | // 4. OVĚŘENÍ: Teď už musí být světlý
198 | const html = page.locator('html');
199 | await expect(html).not.toHaveClass(/dark/);
> 200 | await homePage.switchThemeFunctionDark()
| ^ ReferenceError: homePage is not defined
201 | });
202 | });
203 | });
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

@@ -6,25 +6,13 @@
# Test info
- Name: homePage.test.ts >> EndeavourOS HomePage - POM >> Theme >> startuje přímo ve světlém režimu
- Location: tests/homePage.test.ts:111:9
- Name: homePage.test.ts >> Theme >> Theme -- dark default to light >> switch theme sun
- Location: tests/homePage.test.ts:137:9
# Error details
```
Error: expect(locator).toHaveAttribute(expected) failed
Locator: locator('html')
Expected: "light"
Received: "dark"
Timeout: 5000ms
Call log:
- Expect "toHaveAttribute" with timeout 5000ms
- waiting for locator('html')
9 × locator resolved to <html lang="cs" data-theme="dark">…</html>
- unexpected value "dark"
TypeError: homePage.switchThemeFunctionLight is not a function
```
# Page snapshot
@@ -127,22 +115,6 @@ Call log:
# Test source
```ts
22 | });
23 |
24 | test('check all hello text visibility', async ({ page }) => {
25 | await homePage.checkHalloText(expectedHalloText);
26 | const locator = page.locator('.hero');
27 |
28 | await expect(locator).toHaveText(expectedHeroToHaveText);
29 | await expect(homePage.halloDescription2).toHaveText(expectedHalloToHaveText2);
30 |
31 |
32 | });
33 | });
34 |
35 | test.describe('navigate', () => {
36 |
37 | test('search for a term', async ({page}) => {
38 | await homePage.searchInput.fill('EndeavourOS');
39 | // nejdříve je nutno opravit vyhledávaní na webu
40 | // await page.getByText('Linux pacman příkazy').click();
@@ -206,56 +178,108 @@ Call log:
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 | test('startuje přímo ve světlém režimu', async ({ page }) => {
112 | // Tento skript se spustí dříve, než se načte CSS a JS tvého webu
113 | await page.addInitScript(() => {
114 | document.documentElement.setAttribute('data-theme', 'light');
115 | // Pokud ukládáš nastavení do localStorage, můžeš ho "přednastavit" i tam
116 | window.localStorage.setItem('theme', 'light');
117 | });
118 |
119 | await page.goto('https://endeavouros.cz');
120 |
121 | // Nyní už rovnou ověřuješ, že je vše světlé
> 122 | await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
| ^ Error: expect(locator).toHaveAttribute(expected) failed
123 | const themeButton = page.locator('#data-theme');
124 | await themeButton.click();
125 | await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark');
126 | });
127 | })
101 |
102 |
103 | test.describe('Carts (Karty) na HomePage', () => {
104 | let homePage: HomePage;
105 |
106 | test.beforeEach(async ({ page }) => {
107 | homePage = new HomePage(page);
108 | await homePage.navigate();
109 | });
110 |
111 | // Otestuje textace na kartách
112 | test('should display all cards correctly', async () => {
113 | for (const card of homePageCards) {
114 | // Používáme naši POM metodu pro každou kartu
115 | await homePage.verifyCardContent(card.title, card.description);
116 | }
117 | });
118 |
119 | // test('should navigate after clicking on a specific card', async ({ page }) => {
120 | // // Příklad pro jednu konkrétní kartu
121 | // await homePage.clickCardButton('Lehkost a rychlost');
122 | // // Zde by následoval expect na novou URL
123 | // });
124 | });
125 | });
126 |
127 |
128 |
129 | test.describe('Carts (Karty) na HomePage', () => {
130 | let homePage: HomePage;
131 |
132 | test.beforeEach(async ({ page }) => {
133 | homePage = new HomePage(page);
134 | await homePage.navigate();
135 | });
136 |
137 | // Otestuje textace na kartách
138 | test('should display all cards correctly', async () => {
139 | for (const card of homePageCards) {
140 | // Používáme naši POM metodu pro každou kartu
141 | await homePage.verifyCardContent(card.title, card.description);
142 | }
143 | });
144 |
145 | // test('should navigate after clicking on a specific card', async ({ page }) => {
146 | // // Příklad pro jednu konkrétní kartu
147 | // await homePage.clickCardButton('Lehkost a rychlost');
148 | // // Zde by následoval expect na novou URL
149 | // });
150 | });
151 | });
129 | test.describe('Theme', () => {
130 | test.describe('Theme -- dark default to light', () => {
131 | let homePage: HomePage;
132 |
133 | test.beforeEach(async ({ page }) => {
134 | homePage = new HomePage(page);
135 | await homePage.navigate();
136 | });
137 | test('switch theme sun', async ({ page }) => {
> 138 | await homePage.switchThemeFunctionLight()
| ^ TypeError: homePage.switchThemeFunctionLight is not a function
139 | });
140 |
141 | });
142 | test.describe('Mock date light', () => {
143 | test('vynucený start ve světlém režimu + kontrola režimu', async ({ page }) => {
144 | // 1. Nastavíme emulaci systému na light (to je základ)
145 | await page.emulateMedia({ colorScheme: 'light' });
146 |
147 | // 2. Mockujeme stav paměti a DOMu
148 | await page.addInitScript(() => {
149 | // Vnutíme informaci, že chceme light do paměti
150 | window.localStorage.setItem('theme', 'light');
151 | window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
152 |
153 | // Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
154 | const observer = new MutationObserver(() => {
155 | if (document.documentElement.classList.contains('dark')) {
156 | document.documentElement.classList.remove('dark');
157 | }
158 | });
159 | observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
160 | });
161 |
162 | // 3. Jdeme na web
163 | await page.goto('https://endeavouros.cz');
164 |
165 | // 4. OVĚŘENÍ: Teď už musí být světlý
166 | const html = page.locator('html');
167 | await expect(html).not.toHaveClass(/dark/);
168 |
169 | // Vizuální kontrola - barva pozadí by teď měla být bílá/světlá (rgb 255, 255, 255)
170 | // Poznámka: Pokud má web i ve světlém režimu jinou barvu, uprav si rgb hodnotu
171 | await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(248, 249, 250)');
172 | await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
173 |
174 | });
175 | test('Light to Dark check', async ({ page }) => {
176 | // 1. Nastavíme emulaci systému na light (to je základ)
177 | await page.emulateMedia({ colorScheme: 'light' });
178 |
179 | // 2. Mockujeme stav paměti a DOMu
180 | await page.addInitScript(() => {
181 | // Vnutíme informaci, že chceme light do paměti
182 | window.localStorage.setItem('theme', 'light');
183 | window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
184 |
185 | // Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
186 | const observer = new MutationObserver(() => {
187 | if (document.documentElement.classList.contains('dark')) {
188 | document.documentElement.classList.remove('dark');
189 | }
190 | });
191 | observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
192 | });
193 |
194 | // 3. Jdeme na web
195 | await page.goto('https://endeavouros.cz');
196 |
197 | // 4. OVĚŘENÍ: Teď už musí být světlý
198 | const html = page.locator('html');
199 | await expect(html).not.toHaveClass(/dark/);
200 | await homePage.switchThemeFunctionDark()
201 | });
202 | });
203 | });
```
@@ -1,138 +0,0 @@
# 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 |
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

@@ -1,252 +0,0 @@
# 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í ze světlého startu do tmavého režimu
- Location: tests/homePage.test.ts:138:7
# Error details
```
Test timeout of 30000ms exceeded.
```
```
Error: locator.click: Test timeout of 30000ms exceeded.
Call log:
- waiting for locator('button.theme-switcher, .mode-switcher')
```
# Page snapshot
```yaml
- generic [active] [ref=e1]:
- banner [ref=e2]:
- generic [ref=e3]:
- link "EndeavourOS Logo CZ" [ref=e4] [cursor=pointer]:
- /url: /index.php
- img "EndeavourOS Logo" [ref=e5]
- generic [ref=e6]: CZ
- navigation [ref=e7]:
- list [ref=e8]:
- listitem [ref=e9]:
- link "Domů" [ref=e10] [cursor=pointer]:
- /url: /index.php
- listitem [ref=e11]:
- link "EndeavourOS" [ref=e12] [cursor=pointer]:
- /url: /endeavouros.php
- listitem [ref=e13]:
- link "Články" [ref=e14] [cursor=pointer]:
- /url: /rozcestnik.php
- listitem [ref=e15]:
- link "Krátké návody" [ref=e16] [cursor=pointer]:
- /url: /cheatsheet.php
- listitem [ref=e17]:
- link "Fórum" [ref=e18] [cursor=pointer]:
- /url: https://forum.arch-linux.cz/
- listitem [ref=e19]:
- link "O nás" [ref=e20] [cursor=pointer]:
- /url: /o-nas.php
- generic [ref=e21]:
- textbox "Hledat v článcích..." [ref=e23]
- button "Sdílet stránku" [ref=e24] [cursor=pointer]:
- generic [ref=e25]:
- text: Sdílet
- button "Přepnout téma" [ref=e26] [cursor=pointer]:
- generic [ref=e27]:
- main [ref=e28]:
- generic [ref=e29]:
- heading "🇨🇿 Vítám Tě na webu České komunity EndeavourOS! 🇨🇿" [level=1] [ref=e30]
- paragraph [ref=e31]: Lehká, rychlá a moderní distribuce založená na Arch Linuxu.
- heading "Je navržena tak, aby poskytovala uživatelům přístup k nejnovějším technologiím a softwaru, přičemž zachovává jednoduchost a stabilitu. Distribuce nabízí několik předinstalovaných prostředí." [level=4] [ref=e32]
- heading "👇 Začínáme 👇" [level=2] [ref=e33]
- generic [ref=e34]:
- 'link "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon... 2026-04-28" [ref=e35] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME"
- 'heading "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME" [level=3] [ref=e36]'
- paragraph [ref=e37]: Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon...
- generic [ref=e38]: 2026-04-28
- link "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows... 2026-04-28" [ref=e39] [cursor=pointer]:
- /url: /article.php?slug=⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky
- heading "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky" [level=3] [ref=e40]
- paragraph [ref=e41]: Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows...
- generic [ref=e42]: 2026-04-28
- 'link "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č... 2026-04-28" [ref=e43] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME"
- 'heading "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME" [level=3] [ref=e44]'
- paragraph [ref=e45]: Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č...
- generic [ref=e46]: 2026-04-28
- 'link "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta... 2026-04-28" [ref=e47] [cursor=pointer]':
- /url: "/article.php?slug=🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované"
- 'heading "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované" [level=3] [ref=e48]'
- paragraph [ref=e49]: Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta...
- generic [ref=e50]: 2026-04-28
- link "💽 Jak připojit nový SSD disk v EndeavourOS Určíme přidaný disk (dle názvu či velikosti), v mém případě ... 2026-04-28" [ref=e51] [cursor=pointer]:
- /url: /article.php?slug=💽 Jak připojit nový SSD disk v EndeavourOS
- heading "💽 Jak připojit nový SSD disk v EndeavourOS" [level=3] [ref=e52]
- paragraph [ref=e53]: Určíme přidaný disk (dle názvu či velikosti), v mém případě ...
- generic [ref=e54]: 2026-04-28
- link "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac Jak lehce instalovat aplikace pomocí grafického správce Pamac... 2026-04-28" [ref=e55] [cursor=pointer]:
- /url: /article.php?slug=Jak lehce instalovat aplikace pomocí grafického správce Pamac
- heading "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac" [level=3] [ref=e56]
- paragraph [ref=e57]: Jak lehce instalovat aplikace pomocí grafického správce Pamac...
- generic [ref=e58]: 2026-04-28
- link "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků... 2026-04-28" [ref=e59] [cursor=pointer]:
- /url: /article.php?slug=AUR packages a jak nainstalovat aplikaci pomocí YAY
- heading "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY" [level=3] [ref=e60]
- paragraph [ref=e61]: EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků...
- generic [ref=e62]: 2026-04-28
- link "🚨 Jak zapnout upozornění na nové aktualizace Jak zapnout upozornění na nové aktualizace... 2026-04-28" [ref=e63] [cursor=pointer]:
- /url: /article.php?slug=Jak zapnout upozornění na nové aktualizace
- heading "🚨 Jak zapnout upozornění na nové aktualizace" [level=3] [ref=e64]
- paragraph [ref=e65]: Jak zapnout upozornění na nové aktualizace...
- generic [ref=e66]: 2026-04-28
- link "🐧 Linux pacman příkazy Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc... 2026-04-28" [ref=e67] [cursor=pointer]:
- /url: /article.php?slug=🐧 Linux pacman příkazy
- heading "🐧 Linux pacman příkazy" [level=3] [ref=e68]
- paragraph [ref=e69]: Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc...
- generic [ref=e70]: 2026-04-28
- contentinfo [ref=e71]:
- generic [ref=e72]:
- paragraph [ref=e73]: © 2026 EndeavourOS CZ Komunita. Vytvořeno s láskou k Linuxu ❤️.
- paragraph [ref=e74]:
- link "Zásady ochrany osobních údajů" [ref=e75] [cursor=pointer]:
- /url: /privacy-policy.php
```
# Test source
```ts
56 | });
57 |
58 | test('navigation to Krátké návody', async ({ page }) => {
59 | await homePage.clickMenuItem('Krátké návody');
60 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/cheatsheet`));
61 | });
62 |
63 | // Seznam externích odkazů, které chceme prověřit
64 | // Nyní nejde nutno doopravit
65 | // test('externí odkazy v menu jsou platné', async ({ page, request }) => {
66 | // const homePage = new HomePage(page);
67 | // await homePage.navigate();
68 |
69 | // Seznam externích odkazů, které chceme prověřit
70 | // test('kontrola externích odkazů na zdraví (status 200)', async ({ page, request }) => {
71 | // const homePage = new HomePage(page);
72 | // await homePage.navigate();
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();
| ^ Error: locator.click: Test timeout of 30000ms exceeded.
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('.tlačítko-přepínače').click(); // Zde doplň svůj reálný selektor
174 |
175 | // A teď už musí být dark
176 | await expect(html).toHaveClass(/dark/);
177 | });
178 | });
179 |
180 |
181 |
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

@@ -1,239 +0,0 @@
# 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 >> startuje přímo ve světlém režimu
- Location: tests/homePage.test.ts:152:7
# Error details
```
Error: expect(locator).toHaveAttribute(expected) failed
Locator: locator('html')
Expected: "light"
Received: "dark"
Timeout: 5000ms
Call log:
- Expect "toHaveAttribute" with timeout 5000ms
- waiting for locator('html')
9 × locator resolved to <html lang="cs" data-theme="dark">…</html>
- unexpected value "dark"
```
# Page snapshot
```yaml
- generic [active] [ref=e1]:
- banner [ref=e2]:
- generic [ref=e3]:
- link "EndeavourOS Logo CZ" [ref=e4] [cursor=pointer]:
- /url: /index.php
- img "EndeavourOS Logo" [ref=e5]
- generic [ref=e6]: CZ
- navigation [ref=e7]:
- list [ref=e8]:
- listitem [ref=e9]:
- link "Domů" [ref=e10] [cursor=pointer]:
- /url: /index.php
- listitem [ref=e11]:
- link "EndeavourOS" [ref=e12] [cursor=pointer]:
- /url: /endeavouros.php
- listitem [ref=e13]:
- link "Články" [ref=e14] [cursor=pointer]:
- /url: /rozcestnik.php
- listitem [ref=e15]:
- link "Krátké návody" [ref=e16] [cursor=pointer]:
- /url: /cheatsheet.php
- listitem [ref=e17]:
- link "Fórum" [ref=e18] [cursor=pointer]:
- /url: https://forum.arch-linux.cz/
- listitem [ref=e19]:
- link "O nás" [ref=e20] [cursor=pointer]:
- /url: /o-nas.php
- generic [ref=e21]:
- textbox "Hledat v článcích..." [ref=e23]
- button "Sdílet stránku" [ref=e24] [cursor=pointer]:
- generic [ref=e25]:
- text: Sdílet
- button "Přepnout téma" [ref=e26] [cursor=pointer]:
- generic [ref=e27]:
- main [ref=e28]:
- generic [ref=e29]:
- heading "🇨🇿 Vítám Tě na webu České komunity EndeavourOS! 🇨🇿" [level=1] [ref=e30]
- paragraph [ref=e31]: Lehká, rychlá a moderní distribuce založená na Arch Linuxu.
- heading "Je navržena tak, aby poskytovala uživatelům přístup k nejnovějším technologiím a softwaru, přičemž zachovává jednoduchost a stabilitu. Distribuce nabízí několik předinstalovaných prostředí." [level=4] [ref=e32]
- heading "👇 Začínáme 👇" [level=2] [ref=e33]
- generic [ref=e34]:
- 'link "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon... 2026-04-28" [ref=e35] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME"
- 'heading "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME" [level=3] [ref=e36]'
- paragraph [ref=e37]: Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon...
- generic [ref=e38]: 2026-04-28
- link "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows... 2026-04-28" [ref=e39] [cursor=pointer]:
- /url: /article.php?slug=⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky
- heading "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky" [level=3] [ref=e40]
- paragraph [ref=e41]: Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows...
- generic [ref=e42]: 2026-04-28
- 'link "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č... 2026-04-28" [ref=e43] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME"
- 'heading "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME" [level=3] [ref=e44]'
- paragraph [ref=e45]: Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č...
- generic [ref=e46]: 2026-04-28
- 'link "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta... 2026-04-28" [ref=e47] [cursor=pointer]':
- /url: "/article.php?slug=🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované"
- 'heading "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované" [level=3] [ref=e48]'
- paragraph [ref=e49]: Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta...
- generic [ref=e50]: 2026-04-28
- link "💽 Jak připojit nový SSD disk v EndeavourOS Určíme přidaný disk (dle názvu či velikosti), v mém případě ... 2026-04-28" [ref=e51] [cursor=pointer]:
- /url: /article.php?slug=💽 Jak připojit nový SSD disk v EndeavourOS
- heading "💽 Jak připojit nový SSD disk v EndeavourOS" [level=3] [ref=e52]
- paragraph [ref=e53]: Určíme přidaný disk (dle názvu či velikosti), v mém případě ...
- generic [ref=e54]: 2026-04-28
- link "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac Jak lehce instalovat aplikace pomocí grafického správce Pamac... 2026-04-28" [ref=e55] [cursor=pointer]:
- /url: /article.php?slug=Jak lehce instalovat aplikace pomocí grafického správce Pamac
- heading "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac" [level=3] [ref=e56]
- paragraph [ref=e57]: Jak lehce instalovat aplikace pomocí grafického správce Pamac...
- generic [ref=e58]: 2026-04-28
- link "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků... 2026-04-28" [ref=e59] [cursor=pointer]:
- /url: /article.php?slug=AUR packages a jak nainstalovat aplikaci pomocí YAY
- heading "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY" [level=3] [ref=e60]
- paragraph [ref=e61]: EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků...
- generic [ref=e62]: 2026-04-28
- link "🚨 Jak zapnout upozornění na nové aktualizace Jak zapnout upozornění na nové aktualizace... 2026-04-28" [ref=e63] [cursor=pointer]:
- /url: /article.php?slug=Jak zapnout upozornění na nové aktualizace
- heading "🚨 Jak zapnout upozornění na nové aktualizace" [level=3] [ref=e64]
- paragraph [ref=e65]: Jak zapnout upozornění na nové aktualizace...
- generic [ref=e66]: 2026-04-28
- link "🐧 Linux pacman příkazy Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc... 2026-04-28" [ref=e67] [cursor=pointer]:
- /url: /article.php?slug=🐧 Linux pacman příkazy
- heading "🐧 Linux pacman příkazy" [level=3] [ref=e68]
- paragraph [ref=e69]: Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc...
- generic [ref=e70]: 2026-04-28
- contentinfo [ref=e71]:
- generic [ref=e72]:
- paragraph [ref=e73]: © 2026 EndeavourOS CZ Komunita. Vytvořeno s láskou k Linuxu ❤️.
- paragraph [ref=e74]:
- link "Zásady ochrany osobních údajů" [ref=e75] [cursor=pointer]:
- /url: /privacy-policy.php
```
# Test source
```ts
54 | await homePage.clickMenuItem('Články');
55 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/rozcestnik`));
56 | });
57 |
58 | test('navigation to Krátké návody', async ({ page }) => {
59 | await homePage.clickMenuItem('Krátké návody');
60 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/cheatsheet`));
61 | });
62 |
63 | // Seznam externích odkazů, které chceme prověřit
64 | // Nyní nejde nutno doopravit
65 | // test('externí odkazy v menu jsou platné', async ({ page, request }) => {
66 | // const homePage = new HomePage(page);
67 | // await homePage.navigate();
68 |
69 | // Seznam externích odkazů, které chceme prověřit
70 | // test('kontrola externích odkazů na zdraví (status 200)', async ({ page, request }) => {
71 | // const homePage = new HomePage(page);
72 | // await homePage.navigate();
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.beforeEach(async ({ page }) => {
139 | await page.emulateMedia({ colorScheme: 'light' });
140 | // 1. NEJDŘÍV připravíme prostředí (vstříkneme skript)
141 | await page.addInitScript(() => {
142 | // Nastavíme atribut, podle kterého web barví
143 | document.documentElement.setAttribute('data-theme', 'light');
144 | // A preventivně i localStorage, kdyby si to web kontroloval tam
145 | //window.localStorage.setItem('theme', 'light');
146 | });
147 |
148 | // 2. POTÉ teprve jdeme na web
149 | await page.goto('https://endeavouros.cz');
150 | });
151 |
152 | test('startuje přímo ve světlém režimu', async ({ page }) => {
153 | // Nyní už rovnou ověřuješ, že je vše světlé
> 154 | await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
| ^ Error: expect(locator).toHaveAttribute(expected) failed
155 | });
156 |
157 |
158 | });
159 |
160 |
161 |
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

@@ -1,238 +0,0 @@
# 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 >> přepnutí ze světlého startu do tmavého režimu
- Location: tests/homePage.test.ts:137:5
# Error details
```
Test timeout of 30000ms exceeded.
```
```
Error: locator.click: Test timeout of 30000ms exceeded.
Call log:
- waiting for locator('button.theme-switcher, .mode-switcher')
```
# Page snapshot
```yaml
- generic [active] [ref=e1]:
- banner [ref=e2]:
- generic [ref=e3]:
- link "EndeavourOS Logo CZ" [ref=e4] [cursor=pointer]:
- /url: /index.php
- img "EndeavourOS Logo" [ref=e5]
- generic [ref=e6]: CZ
- navigation [ref=e7]:
- list [ref=e8]:
- listitem [ref=e9]:
- link "Domů" [ref=e10] [cursor=pointer]:
- /url: /index.php
- listitem [ref=e11]:
- link "EndeavourOS" [ref=e12] [cursor=pointer]:
- /url: /endeavouros.php
- listitem [ref=e13]:
- link "Články" [ref=e14] [cursor=pointer]:
- /url: /rozcestnik.php
- listitem [ref=e15]:
- link "Krátké návody" [ref=e16] [cursor=pointer]:
- /url: /cheatsheet.php
- listitem [ref=e17]:
- link "Fórum" [ref=e18] [cursor=pointer]:
- /url: https://forum.arch-linux.cz/
- listitem [ref=e19]:
- link "O nás" [ref=e20] [cursor=pointer]:
- /url: /o-nas.php
- generic [ref=e21]:
- textbox "Hledat v článcích..." [ref=e23]
- button "Sdílet stránku" [ref=e24] [cursor=pointer]:
- generic [ref=e25]:
- text: Sdílet
- button "Přepnout téma" [ref=e26] [cursor=pointer]:
- generic [ref=e27]:
- main [ref=e28]:
- generic [ref=e29]:
- heading "🇨🇿 Vítám Tě na webu České komunity EndeavourOS! 🇨🇿" [level=1] [ref=e30]
- paragraph [ref=e31]: Lehká, rychlá a moderní distribuce založená na Arch Linuxu.
- heading "Je navržena tak, aby poskytovala uživatelům přístup k nejnovějším technologiím a softwaru, přičemž zachovává jednoduchost a stabilitu. Distribuce nabízí několik předinstalovaných prostředí." [level=4] [ref=e32]
- heading "👇 Začínáme 👇" [level=2] [ref=e33]
- generic [ref=e34]:
- 'link "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon... 2026-04-28" [ref=e35] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME"
- 'heading "🚀 Přecházíme na Linux: Kompletní průvodce světem EndeavourOS a GNOME" [level=3] [ref=e36]'
- paragraph [ref=e37]: Máte pocit, že váš počítač s Windows je čím dál pomalejší? Štve vás, že si systém dělá, co chce, a vy nad ním nemáte kon...
- generic [ref=e38]: 2026-04-28
- link "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows... 2026-04-28" [ref=e39] [cursor=pointer]:
- /url: /article.php?slug=⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky
- heading "⛵ Co je to ten Linux, EndeavourOS a GNOME? Malý slovníček pro úplné začátečníky" [level=3] [ref=e40]
- paragraph [ref=e41]: Rozhodli jste se zkusit Linux, ale točí se vám hlava z názvů jako distribuce, prostředí, balíčky nebo AUR? Nebojte se. Ve světě Windows...
- generic [ref=e42]: 2026-04-28
- 'link "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č... 2026-04-28" [ref=e43] [cursor=pointer]':
- /url: "/article.php?slug=🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME"
- 'heading "🚀 Jak oživit počítač moderním systémem: Instalujeme EndeavourOS s GNOME" [level=3] [ref=e44]'
- paragraph [ref=e45]: Láká vás svět Linuxu, konkrétně pověstná rychlost a aktuálnost Arch Linuxu, ale odrazuje vás složitá instalace přes č...
- generic [ref=e46]: 2026-04-28
- 'link "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta... 2026-04-28" [ref=e47] [cursor=pointer]':
- /url: "/article.php?slug=🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované"
- 'heading "🔥 Záchranná brzda pro váš systém: Co je to LTS jádro a proč ho mít nainstalované" [level=3] [ref=e48]'
- paragraph [ref=e49]: Užíváte si rychlost EndeavourOS? Skvělé. Ale co když jednoho dne po aktualizaci zapnete počítač a nenaběhne grafika, nebo přesta...
- generic [ref=e50]: 2026-04-28
- link "💽 Jak připojit nový SSD disk v EndeavourOS Určíme přidaný disk (dle názvu či velikosti), v mém případě ... 2026-04-28" [ref=e51] [cursor=pointer]:
- /url: /article.php?slug=💽 Jak připojit nový SSD disk v EndeavourOS
- heading "💽 Jak připojit nový SSD disk v EndeavourOS" [level=3] [ref=e52]
- paragraph [ref=e53]: Určíme přidaný disk (dle názvu či velikosti), v mém případě ...
- generic [ref=e54]: 2026-04-28
- link "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac Jak lehce instalovat aplikace pomocí grafického správce Pamac... 2026-04-28" [ref=e55] [cursor=pointer]:
- /url: /article.php?slug=Jak lehce instalovat aplikace pomocí grafického správce Pamac
- heading "🧰 Jak lehce instalovat aplikace pomocí grafického správce Pamac" [level=3] [ref=e56]
- paragraph [ref=e57]: Jak lehce instalovat aplikace pomocí grafického správce Pamac...
- generic [ref=e58]: 2026-04-28
- link "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků... 2026-04-28" [ref=e59] [cursor=pointer]:
- /url: /article.php?slug=AUR packages a jak nainstalovat aplikaci pomocí YAY
- heading "💾 AUR packages a jak nainstalovat aplikaci pomocí YAY" [level=3] [ref=e60]
- paragraph [ref=e61]: EndeavourOS jako všechny ostatní distribuce rodiny Arch Linuxnabízí obří seznam balíčků...
- generic [ref=e62]: 2026-04-28
- link "🚨 Jak zapnout upozornění na nové aktualizace Jak zapnout upozornění na nové aktualizace... 2026-04-28" [ref=e63] [cursor=pointer]:
- /url: /article.php?slug=Jak zapnout upozornění na nové aktualizace
- heading "🚨 Jak zapnout upozornění na nové aktualizace" [level=3] [ref=e64]
- paragraph [ref=e65]: Jak zapnout upozornění na nové aktualizace...
- generic [ref=e66]: 2026-04-28
- link "🐧 Linux pacman příkazy Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc... 2026-04-28" [ref=e67] [cursor=pointer]:
- /url: /article.php?slug=🐧 Linux pacman příkazy
- heading "🐧 Linux pacman příkazy" [level=3] [ref=e68]
- paragraph [ref=e69]: Linux pacman příkazy. Pacman je nedílnou součástí Arch Linuxu a distribucí na Arc...
- generic [ref=e70]: 2026-04-28
- contentinfo [ref=e71]:
- generic [ref=e72]:
- paragraph [ref=e73]: © 2026 EndeavourOS CZ Komunita. Vytvořeno s láskou k Linuxu ❤️.
- paragraph [ref=e74]:
- link "Zásady ochrany osobních údajů" [ref=e75] [cursor=pointer]:
- /url: /privacy-policy.php
```
# Test source
```ts
55 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/rozcestnik`));
56 | });
57 |
58 | test('navigation to Krátké návody', async ({ page }) => {
59 | await homePage.clickMenuItem('Krátké návody');
60 | await expect(page).toHaveURL(new RegExp(`.*${homePage.url}/cheatsheet`));
61 | });
62 |
63 | // Seznam externích odkazů, které chceme prověřit
64 | // Nyní nejde nutno doopravit
65 | // test('externí odkazy v menu jsou platné', async ({ page, request }) => {
66 | // const homePage = new HomePage(page);
67 | // await homePage.navigate();
68 |
69 | // Seznam externích odkazů, které chceme prověřit
70 | // test('kontrola externích odkazů na zdraví (status 200)', async ({ page, request }) => {
71 | // const homePage = new HomePage(page);
72 | // await homePage.navigate();
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('přepnutí ze světlého startu do tmavého režimu', async ({ page }) => {
138 | // 1. FÁZE: Vynucení světlého režimu před startem
139 | // EndeavourOS.cz je defaultně tmavý, takže mu musíme zakázat třídu 'dark'
140 | await page.addInitScript(() => {
141 | document.documentElement.classList.remove('dark');
142 | window.localStorage.setItem('theme', 'light');
143 | });
144 |
145 | // 2. FÁZE: Načtení stránky
146 | await page.goto('https://endeavouros.cz');
147 |
148 | // Kontrola, že jsme skutečně začali ve světlém (třída 'dark' chybí)
149 | await expect(page.locator('html')).not.toHaveClass(/dark/);
150 |
151 | // 3. FÁZE: Akce - kliknutí na přepínač
152 | // Na webu EndeavourOS.cz je to obvykle tlačítko v menu nebo záhlaví
153 | // Tip: Použijeme ARIA label nebo ikonu, pokud známe selektor
154 | const themeSwitcher = page.locator('button.theme-switcher, .mode-switcher');
> 155 | await themeSwitcher.click();
| ^ Error: locator.click: Test timeout of 30000ms exceeded.
156 |
157 | // 4. FÁZE: Ověření výsledku
158 | // Nyní by se měla třída 'dark' vrátit na své místo
159 | await expect(page.locator('html')).toHaveClass(/dark/);
160 |
161 | // A můžeme ověřit, že se změnila barva pozadí na tmavou
162 | await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(25, 20, 36)');
163 | });
164 |
165 |
166 |
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

+76 -49
View File
@@ -122,56 +122,83 @@ test.describe('EndeavourOS HomePage - POM', () => {
// // Zde by následoval expect na novou URL
// });
});
test.describe('Theme', () => {
test.describe('Theme -- dark default to light', () => {
let homePage: HomePage;
test.beforeEach(async ({ page }) => {
homePage = new HomePage(page);
await homePage.navigate();
});
test('switch theme sun', async ({ page }) => {
await homePage.switchThemeFunctionLight()
});
});
test.describe('Mock date light', () => {
test('vynucený start ve světlém režimu + kontrola režimu', async ({ page }) => {
// 1. Nastavíme emulaci systému na light (to je základ)
await page.emulateMedia({ colorScheme: 'light' });
// 2. Mockujeme stav paměti a DOMu
await page.addInitScript(() => {
// Vnutíme informaci, že chceme light do paměti
window.localStorage.setItem('theme', 'light');
window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
// Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
const observer = new MutationObserver(() => {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
}
});
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
});
// 3. Jdeme na web
await page.goto('https://endeavouros.cz');
// 4. OVĚŘENÍ: Teď už musí být světlý
const html = page.locator('html');
await expect(html).not.toHaveClass(/dark/);
// Vizuální kontrola - barva pozadí by teď měla být bílá/světlá (rgb 255, 255, 255)
// Poznámka: Pokud má web i ve světlém režimu jinou barvu, uprav si rgb hodnotu
await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(248, 249, 250)');
await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
});
test('Light to Dark check', async ({ page }) => {
// 1. Nastavíme emulaci systému na light (to je základ)
await page.emulateMedia({ colorScheme: 'light' });
// 2. Mockujeme stav paměti a DOMu
await page.addInitScript(() => {
// Vnutíme informaci, že chceme light do paměti
window.localStorage.setItem('theme', 'light');
window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
// Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
const observer = new MutationObserver(() => {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
}
});
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
});
// 3. Jdeme na web
await page.goto('https://endeavouros.cz');
// 4. OVĚŘENÍ: Teď už musí být světlý
const html = page.locator('html');
await expect(html).not.toHaveClass(/dark/);
await homePage.switchThemeFunctionDark()
});
});
});
});
test.describe('Theme', () => {
test.describe('Theme -- dark default to light', () => {
let homePage: HomePage;
test.beforeEach(async ({ page }) => {
homePage = new HomePage(page);
await homePage.navigate();
});
test('switch theme sun', async ({ page }) => {
await homePage.switchThemeFunction()
});
});
test.describe('Mock date light', () => {
test('vynucený start ve světlém režimu + kontrola režimu', async ({ page }) => {
// 1. Nastavíme emulaci systému na light (to je základ)
await page.emulateMedia({ colorScheme: 'light' });
// 2. Mockujeme stav paměti a DOMu
await page.addInitScript(() => {
// Vnutíme informaci, že chceme light do paměti
window.localStorage.setItem('theme', 'light');
window.localStorage.setItem('color-theme', 'light'); // Pro jistotu oba běžné názvy
// Tady je ten trik: Sledujeme, kdyby se web snažil přidat 'dark' a hned to smažeme
const observer = new MutationObserver(() => {
if (document.documentElement.classList.contains('dark')) {
document.documentElement.classList.remove('dark');
}
});
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
});
// 3. Jdeme na web
await page.goto('https://endeavouros.cz');
// 4. OVĚŘENÍ: Teď už musí být světlý
const html = page.locator('html');
await expect(html).not.toHaveClass(/dark/);
// Vizuální kontrola - barva pozadí by teď měla být bílá/světlá (rgb 255, 255, 255)
// Poznámka: Pokud má web i ve světlém režimu jinou barvu, uprav si rgb hodnotu
await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(248, 249, 250)');
await expect(page.locator('html')).toHaveAttribute('data-theme', 'light');
});
});
});
+9 -4
View File
@@ -99,13 +99,18 @@ export class HomePage {
/*
* Test theme
*/
// Test Theme sun
async switchThemeFunction() {
// Test Theme Light
async switchThemeFunctionLight() {
const themeButton = this.page.locator('#themeToggle');
await themeButton.click();
await expect(this.page.locator('html')).toHaveAttribute('data-theme', 'light');
}
// Test Theme Dark
async switchThemeFunctionDark() {
const themeButton = this.page.locator('#themeToggle');
await themeButton.click();
await expect(this.page.locator('html')).toHaveAttribute('data-theme', 'dark');
}
}