Skip to content

Commit b1fd5d0

Browse files
authored
test: unflake some ui-mode tests (#38907)
1 parent faf317c commit b1fd5d0

4 files changed

Lines changed: 46 additions & 12 deletions

File tree

packages/trace-viewer/src/ui/workbench.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ const PartitionedWorkbench: React.FunctionComponent<WorkbenchProps & { partition
315315
id: 'actions',
316316
title: 'Actions',
317317
component: <div className='vbox'>
318-
{status && <div className='workbench-run-status'>
318+
{status && <div className='workbench-run-status' data-testid='workbench-run-status'>
319319
<span className={clsx('codicon', testStatusIcon(status))}></span>
320320
<div>{testStatusText(status)}</div>
321321
<div className='spacer'></div>

tests/playwright-test/ui-mode-test-network-tab.spec.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ test('should filter network requests by resource type', async ({ runUITest, serv
3030
});
3131

3232
await page.getByText('network tab test').dblclick();
33+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
34+
3335
await page.getByText('Network', { exact: true }).click();
3436

3537
const networkItems = page.getByRole('list', { name: 'Network requests' }).getByRole('listitem');
@@ -73,6 +75,8 @@ test('should filter network requests by multiple resource types', async ({ runUI
7375
});
7476

7577
await page.getByText('network tab test').dblclick();
78+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
79+
7680
await page.getByText('Network', { exact: true }).click();
7781

7882
const networkItems = page.getByRole('list', { name: 'Network requests' }).getByRole('listitem');
@@ -112,6 +116,8 @@ test('should filter network requests by url', async ({ runUITest, server }) => {
112116
});
113117

114118
await page.getByText('network tab test').dblclick();
119+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
120+
115121
await page.getByText('Network', { exact: true }).click();
116122

117123
const networkItems = page.getByRole('list', { name: 'Network requests' }).getByRole('listitem');
@@ -149,6 +155,8 @@ test('should format JSON request body', async ({ runUITest, server }) => {
149155
});
150156

151157
await page.getByText('network tab test').dblclick();
158+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
159+
152160
await page.getByText('Network', { exact: true }).click();
153161

154162
await page.getByText('post-data-1').click();
@@ -193,6 +201,8 @@ test('should display list of query parameters (only if present)', async ({ runUI
193201
});
194202

195203
await page.getByText('network tab test').dblclick();
204+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
205+
196206
await page.getByText('Network', { exact: true }).click();
197207

198208
await page.getByText('call-with-query-params').click();
@@ -245,6 +255,8 @@ test('should not duplicate network entries from beforeAll', {
245255
});
246256

247257
await page.getByText('first test').dblclick();
258+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
259+
248260
await page.getByText('Network', { exact: true }).click();
249261
await expect(page.getByRole('list', { name: 'Network requests' }).getByText('empty.html')).toHaveCount(1);
250262
});
@@ -261,6 +273,8 @@ test('should toggle sections inside network details', async ({ runUITest, server
261273
});
262274

263275
await page.getByRole('treeitem', { name: 'network tab test' }).dblclick();
276+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
277+
264278
await page.getByRole('tab', { name: 'Network' }).click();
265279
await page.getByRole('listitem').filter({ hasText: 'post-data-1' }).click();
266280
const headersPanel = page.getByRole('tabpanel', { name: 'Headers' });
@@ -303,6 +317,8 @@ test('should copy network request', async ({ runUITest, server }) => {
303317
});
304318

305319
await page.getByRole('treeitem', { name: 'network tab test' }).dblclick();
320+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
321+
306322
await page.getByRole('tab', { name: 'Network' }).click();
307323
await page.getByRole('listitem').filter({ hasText: 'post-data-1' }).click();
308324
await page.getByRole('button', { name: 'Copy request' }).hover();
@@ -362,14 +378,14 @@ test('should not preserve selection across test runs', async ({ runUITest, serve
362378
});
363379

364380
await page.getByRole('treeitem', { name: 'network tab test' }).dblclick();
381+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
382+
365383
await page.getByRole('tab', { name: 'Network' }).click();
366384
const networkItem = page.getByRole('listitem').filter({ hasText: 'network.html' });
367385
await networkItem.click();
368386
const headersPanel = page.getByRole('tabpanel', { name: 'Headers' });
369387
await expect(headersPanel).toBeVisible();
370388

371389
await page.getByRole('treeitem', { name: 'network tab test' }).dblclick();
372-
await networkItem.waitFor({ state: 'hidden' });
373-
await networkItem.waitFor();
374390
await expect(headersPanel).toBeHidden();
375391
});

tests/playwright-test/ui-mode-test-output.spec.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,13 @@ test('should collapse repeated console messages for test', async ({ runUITest })
119119
const { page } = await runUITest({
120120
'a.spec.ts': `
121121
import { test, expect } from '@playwright/test';
122-
test('print', async ({ page }) => {
122+
test('print test', async ({ page }) => {
123123
await page.evaluate(() => {
124124
console.log('page message')
125125
for (let i = 0; i < 10; ++i)
126126
console.log('page message')
127127
});
128+
await page.waitForTimeout(3000);
128129
for (let i = 0; i < 10; ++i)
129130
console.log('node message')
130131
await page.evaluate(async () => {
@@ -141,10 +142,10 @@ test('should collapse repeated console messages for test', async ({ runUITest })
141142
});
142143
`,
143144
});
144-
await page.getByTitle('Run all').click();
145-
await page.getByRole('tab', { name: 'Console' }).click();
146-
await page.getByText('print').click();
145+
await page.getByRole('treeitem', { name: 'print test' }).dblclick();
146+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
147147

148+
await page.getByRole('tab', { name: 'Console' }).click();
148149
await expect(page.getByRole('tabpanel', { name: 'Console' })).toMatchAriaSnapshot(`
149150
- tabpanel "Console":
150151
- list:

tests/playwright-test/ui-mode-trace.spec.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ test('should locate sync assertions in source', async ({ runUITest }) => {
140140
});
141141

142142
await page.getByText('trace test').dblclick();
143+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
144+
143145
await page.getByText('Expect "toBe"').click();
144146

145147
await expect(
@@ -253,6 +255,8 @@ test('should show image diff', async ({ runUITest }) => {
253255
});
254256

255257
await page.getByText('vrt test').dblclick();
258+
await expect(page.getByTestId('workbench-run-status')).toContainText('Failed');
259+
256260
await page.getByText(/Attachments/).click();
257261
await expect(page.getByText('Diff', { exact: true })).toBeVisible();
258262
await expect(page.getByText('Actual', { exact: true })).toBeVisible();
@@ -369,6 +373,8 @@ test('should show errors with causes in the error tab', async ({ runUITest }) =>
369373
});
370374

371375
await page.getByText('pass').dblclick();
376+
await expect(page.getByTestId('workbench-run-status')).toContainText('Failed');
377+
372378
await page.getByText('Errors', { exact: true }).click();
373379
await expect(page.locator('.tab-errors')).toContainText(`Error: wrapper-message
374380
[cause]: Error: outer-message
@@ -416,6 +422,8 @@ test('should show request source context id', async ({ runUITest, server }) => {
416422
});
417423

418424
await page.getByText('pass').dblclick();
425+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
426+
419427
await page.getByText('Network', { exact: true }).click();
420428
await expect(page.locator('span').filter({ hasText: 'Source' })).toBeVisible();
421429
await expect(page.getByText('page#1')).toBeVisible();
@@ -607,6 +615,8 @@ test('attachments tab shows all but top-level .push attachments', async ({ runUI
607615
});
608616

609617
await page.getByRole('treeitem', { name: 'attachment test' }).dblclick();
618+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
619+
610620
const actionsTree = page.getByTestId('actions-tree');
611621
await actionsTree.getByRole('treeitem', { name: 'step' }).click();
612622
await page.keyboard.press('ArrowRight');
@@ -641,6 +651,8 @@ test('skipped steps should have an indicator', async ({ runUITest }) => {
641651
});
642652

643653
await page.getByRole('treeitem', { name: 'test with steps' }).dblclick();
654+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
655+
644656
const actionsTree = page.getByTestId('actions-tree');
645657
await actionsTree.getByRole('treeitem', { name: 'outer' }).click();
646658
await page.keyboard.press('ArrowRight');
@@ -668,6 +680,7 @@ test('fails', async ({ page }) => {
668680
});
669681

670682
await page.getByText('fails').dblclick();
683+
await expect(page.getByTestId('workbench-run-status')).toContainText('Failed');
671684

672685
await page.context().grantPermissions(['clipboard-read', 'clipboard-write']);
673686
await page.getByText('Errors', { exact: true }).click();
@@ -685,13 +698,14 @@ test('fails', async ({ page }) => {
685698
`.trim());
686699
});
687700

688-
test('should indicate current test status', async ({ runUITest }) => {
701+
test('should indicate current test status', async ({ runUITest, createLatch }) => {
702+
const latch = createLatch();
689703
const { page } = await runUITest({
690704
'a.spec.ts': `
691705
import { test, expect } from '@playwright/test';
692706
test('basic pass', async ({ page }) => {
693707
await page.setContent('<button>Submit</button>');
694-
await new Promise(resolve => setTimeout(resolve, 1000));
708+
${latch.blockingCode}
695709
expect(1).toBe(1);
696710
});
697711
test('basic fail', async ({ page }) => {
@@ -702,11 +716,12 @@ test('basic fail', async ({ page }) => {
702716
});
703717

704718
await page.getByTestId('test-tree').getByText('basic pass').dblclick();
705-
await expect(page.getByRole('tabpanel', { name: 'Actions' })).toContainText('Running');
706-
await expect(page.getByRole('tabpanel', { name: 'Actions' })).toContainText('Passed');
719+
await expect(page.getByTestId('workbench-run-status')).toContainText('Running');
720+
latch.open();
721+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
707722

708723
await page.getByTestId('test-tree').getByText('basic fail').dblclick();
709-
await expect(page.getByRole('tabpanel', { name: 'Actions' })).toContainText('Failed');
724+
await expect(page.getByTestId('workbench-run-status')).toContainText('Failed');
710725
});
711726

712727
test('should be able to create and dispose APIRequestContext inside Promise.all', async ({ runUITest }) => {
@@ -728,6 +743,7 @@ test('should be able to create and dispose APIRequestContext inside Promise.all'
728743
});
729744

730745
await page.getByText('create api request contexts').dblclick();
746+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
731747

732748
await expect(page.getByTestId('status-line')).toHaveText('1/1 passed (100%)');
733749

@@ -762,6 +778,7 @@ test('should partition action tree state by test', async ({ runUITest }) => {
762778

763779
await page.getByTitle('Run all').click();
764780
await page.getByTestId('test-tree').getByText('test1').click();
781+
await expect(page.getByTestId('workbench-run-status')).toContainText('Passed');
765782

766783
const actionsTree = page.getByTestId('actions-tree');
767784
await actionsTree.getByRole('treeitem', { name: 'After Hooks' }).click();

0 commit comments

Comments
 (0)