});
test('data-sveltekit-reload', async ({ baseURL, page, clicknav }) => {
- /** @type {string[]} */
- const requests = [];
- page.on('request', (r) => requests.push(r.url()));
-
await page.goto('/data-sveltekit/reload');
+ let request_promise = page.waitForRequest(`${baseURL}/data-sveltekit/reload/target`);
await clicknav('#one');
- expect(requests).toContain(`${baseURL}/data-sveltekit/reload/target`);
+ await request_promise;
- requests.length = 0;
await page.goto('/data-sveltekit/reload');
+ request_promise = page.waitForRequest(`${baseURL}/data-sveltekit/reload/target`);
await clicknav('#two');
- expect(requests).toContain(`${baseURL}/data-sveltekit/reload/target`);
+ await request_promise;
- requests.length = 0;
await page.goto('/data-sveltekit/reload');
+ request_promise = page.waitForRequest(`${baseURL}/data-sveltekit/reload/target`, {
+ timeout: 1000
+ });
+ request_promise.catch(() => {});
await clicknav('#three');
- expect(requests).not.toContain(`${baseURL}/data-sveltekit/reload/target`);
+ await expect(request_promise).rejects.toThrow();
});
test('data-sveltekit-noscroll', async ({ page, clicknav }) => {
});
test.describe('reroute', () => {
- test('Apply reroute during client side navigation', async ({ page }) => {
+ test('Apply reroute during client side navigation', async ({ page, clicknav }) => {
await page.goto('/reroute/basic');
- await page.click("a[href='/reroute/basic/a']");
+ await clicknav('a[href="/reroute/basic/a"]', { waitForURL: '/reroute/basic/a' });
expect(await page.textContent('h1')).toContain(
'Successfully rewritten, URL should still show a: /reroute/basic/a'
);
await page.goto('/accessibility/a');
- await clicknav('[href="/accessibility/b"]');
- expect(await page.innerHTML('h1')).toBe('b');
+ await clicknav('[href="/accessibility/b"]', { waitForURL: '/accessibility/b' });
expect(await page.evaluate(() => (document.activeElement || {}).nodeName)).toBe('BODY');
await page.keyboard.press(tab);
expect(await page.evaluate(() => (document.activeElement || {}).nodeName)).toBe('BUTTON');
expect(await page.evaluate(() => (document.activeElement || {}).textContent)).toBe('focus me');
- await clicknav('[href="/accessibility/a"]');
+ await clicknav('[href="/accessibility/a"]', { waitForURL: '/accessibility/a' });
expect(await page.innerHTML('h1')).toBe('a');
expect(await page.evaluate(() => (document.activeElement || {}).nodeName)).toBe('BODY');
test('applies autofocus after a navigation', async ({ page, clicknav }) => {
await page.goto('/accessibility/autofocus/a');
- await clicknav('[href="/accessibility/autofocus/b"]');
+ await clicknav('[href="/accessibility/autofocus/b"]', {
+ waitForURL: '/accessibility/autofocus/b'
+ });
expect(await page.innerHTML('h1')).toBe('b');
expect(await page.evaluate(() => (document.activeElement || {}).nodeName)).toBe('INPUT');
});
await page.goto('/anchor');
await page.locator('#scroll-anchor').click();
const originalScrollY = /** @type {number} */ (await page.evaluate(() => scrollY));
- await clicknav('#routing-page');
- await page.goBack();
+ await clicknav('#routing-page', { waitForURL: '/routing/hashes/target' });
- await expect(page).toHaveURL('/anchor#last-anchor-2');
+ await page.goBack();
+ await page.waitForURL('/anchor#last-anchor-2');
expect(await page.evaluate(() => scrollY)).toEqual(originalScrollY);
await page.goBack();
- await expect(page).toHaveURL('/anchor');
+ await page.waitForURL('/anchor');
expect(await page.evaluate(() => scrollY)).toEqual(0);
});
test('same route hash links work more than once', async ({ page, clicknav, baseURL }) => {
await page.goto('/routing/hashes/a');
- await clicknav('[href="#preload"]');
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a#preload`);
-
- await clicknav('[href="/routing/hashes/a"]');
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a`);
+ await clicknav('[href="#preload"]', { waitForURL: `${baseURL}/routing/hashes/a#preload` });
- await clicknav('[href="#preload"]');
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a#preload`);
+ await clicknav('[href="/routing/hashes/a"]', { waitForURL: `${baseURL}/routing/hashes/a` });
+ await clicknav('[href="#preload"]', { waitForURL: `${baseURL}/routing/hashes/a#preload` });
});
test('does not rerun load on calls to duplicate preload hash route', async ({ app, page }) => {
expect(await page.textContent('#page-url-hash')).toBe('#target');
});
- test('page.url.hash is correctly set on navigation', async ({ page }) => {
+ test('page.url.hash is correctly set on navigation', async ({ page, clicknav }) => {
await page.goto('/routing/hashes/pagestate');
- expect(await page.textContent('#window-hash')).toBe('');
- expect(await page.textContent('#page-url-hash')).toBe('');
- await page.locator('[href="#target"]').click();
- expect(await page.textContent('#window-hash')).toBe('#target');
- expect(await page.textContent('#page-url-hash')).toBe('#target');
- await page.locator('[href="/routing/hashes/pagestate"]').click();
+ await expect(page.locator('#window-hash')).toHaveText('');
+ await expect(page.locator('#page-url-hash')).toHaveText('');
+ await clicknav('[href="#target"]');
+ await expect(page.locator('#window-hash')).toHaveText('#target');
+ await expect(page.locator('#page-url-hash')).toHaveText('#target');
+ await clicknav('[href="/routing/hashes/pagestate"]');
await expect(page.locator('#window-hash')).toHaveText('#target'); // hashchange doesn't fire for these
await expect(page.locator('#page-url-hash')).toHaveText('');
await page.goBack();
- expect(await page.textContent('#window-hash')).toBe('#target');
- expect(await page.textContent('#page-url-hash')).toBe('#target');
+ await expect(page.locator('#window-hash')).toHaveText('#target');
+ await expect(page.locator('#page-url-hash')).toHaveText('#target');
});
test('clicking on a hash link focuses the associated element', async ({ page }) => {
baseURL
}) => {
await page.goto('/data-sveltekit/reload/hash');
- await page.locator('a[href="#example"]').click();
- expect(page.url()).toBe(`${baseURL}/data-sveltekit/reload/hash#example`);
- await clicknav('a[href="/data-sveltekit/reload/hash/new"]');
- expect(page.url()).toBe(`${baseURL}/data-sveltekit/reload/hash/new`);
+ await clicknav('a[href="#example"]', {
+ waitForURL: `${baseURL}/data-sveltekit/reload/hash#example`
+ });
+ await clicknav('a[href="/data-sveltekit/reload/hash/new"]', {
+ waitForURL: `${baseURL}/data-sveltekit/reload/hash/new`
+ });
await page.goBack();
- expect(page.url()).toBe(`${baseURL}/data-sveltekit/reload/hash#example`);
+ await page.waitForURL(`${baseURL}/data-sveltekit/reload/hash#example`);
await expect(page.getByRole('textbox')).toBeVisible();
});
await page.goto('/routing/hashes/a');
await page.locator('[href="#hash-target"]').click();
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a#hash-target`);
+ await page.waitForURL(`${baseURL}/routing/hashes/a#hash-target`);
await clicknav('[href="/routing/hashes/b"]');
- expect(await page.textContent('h1')).toBe('b');
-
await expect(page.locator('h1')).toHaveText('b');
await page.goBack();
await expect(page.locator('h1')).toHaveText('a');
}) => {
await page.goto('/routing/hashes/a');
- await clicknav('[href="#hash-target"]');
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a#hash-target`);
+ await clicknav('[href="#hash-target"]', {
+ waitForURL: `${baseURL}/routing/hashes/a#hash-target`
+ });
- await clicknav('[href="#replace-state"]');
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a#replace-state`);
+ await clicknav('[href="#replace-state"]', {
+ waitForURL: `${baseURL}/routing/hashes/a#replace-state`
+ });
await page.goBack();
- expect(page.url()).toBe(`${baseURL}/routing/hashes/a`);
+ await page.waitForURL(`${baseURL}/routing/hashes/a`);
});
test('does not normalize external path', async ({ page, start_server }) => {
specifier: ^2.0.1
version: 2.2.0
'@playwright/test':
- specifier: ^1.51.1
- version: 1.51.1
+ specifier: 1.56.0
+ version: 1.56.0
'@polka/url':
specifier: ^1.0.0-next.28
version: 1.0.0-next.28
version: 2.29.6(@types/node@18.19.119)
'@playwright/test':
specifier: 'catalog:'
- version: 1.51.1
+ version: 1.56.0
'@sveltejs/eslint-config':
specifier: 'catalog:'
version: 8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.42.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)
devDependencies:
'@playwright/test':
specifier: 'catalog:'
- version: 1.51.1
+ version: 1.56.0
'@sveltejs/kit':
specifier: workspace:^
version: link:../kit
devDependencies:
'@playwright/test':
specifier: 'catalog:'
- version: 1.51.1
+ version: 1.56.0
'@sveltejs/kit':
specifier: workspace:^
version: link:../kit
version: 1.9.0
'@playwright/test':
specifier: 'catalog:'
- version: 1.51.1
+ version: 1.56.0
'@sveltejs/vite-plugin-svelte':
specifier: 'catalog:'
version: 6.0.0-next.3(svelte@5.42.2)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))
version: 6.0.0-next.3(svelte@5.42.2)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))
'@vitest/browser':
specifier: 'catalog:'
- version: 3.2.4(playwright@1.51.1)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)
+ version: 3.2.4(playwright@1.56.0)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)
svelte:
specifier: 'catalog:'
version: 5.42.2
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.51.1':
- resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==}
+ '@playwright/test@1.56.0':
+ resolution: {integrity: sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==}
engines: {node: '>=18'}
hasBin: true
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- playwright-core@1.51.1:
- resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==}
+ playwright-core@1.56.0:
+ resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.51.1:
- resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==}
+ playwright@1.56.0:
+ resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==}
engines: {node: '>=18'}
hasBin: true
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.51.1':
+ '@playwright/test@1.56.0':
dependencies:
- playwright: 1.51.1
+ playwright: 1.56.0
'@pnpm/config.env-replace@1.1.0': {}
- rollup
- supports-color
- '@vitest/browser@3.2.4(playwright@1.51.1)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)':
+ '@vitest/browser@3.2.4(playwright@1.56.0)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)':
dependencies:
'@testing-library/dom': 10.4.1
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
vitest: 3.2.4(@types/node@18.19.119)(@vitest/browser@3.2.4)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)
ws: 8.18.3
optionalDependencies:
- playwright: 1.51.1
+ playwright: 1.56.0
transitivePeerDependencies:
- bufferutil
- msw
mlly: 1.7.4
pathe: 2.0.3
- playwright-core@1.51.1: {}
+ playwright-core@1.56.0: {}
- playwright@1.51.1:
+ playwright@1.56.0:
dependencies:
- playwright-core: 1.51.1
+ playwright-core: 1.56.0
optionalDependencies:
fsevents: 2.3.2
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 18.19.119
- '@vitest/browser': 3.2.4(playwright@1.51.1)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)
+ '@vitest/browser': 3.2.4(playwright@1.56.0)(vite@6.3.6(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4)
transitivePeerDependencies:
- jiti
- less