Skip to content

Commit 3c0a5ce

Browse files
committed
PRO-10170 fix: add switchPlaywrightPage internal switcher
1 parent f015362 commit 3c0a5ce

23 files changed

Lines changed: 376 additions & 78 deletions

autotests/entities/product.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const addProduct: ClientFunction<[Product], Promise<ApiProduct>> = create
1515
model: product.model,
1616
version: product.version,
1717
}),
18-
headers: {'Content-Type': 'application/json; charset=UTF-8'},
18+
headers: {'Content-Type': 'application/json; charset=UTF-8', 'x-api-key': 'reqres-free-v1'},
1919
method: 'POST',
2020
}).then((res) => res.json() as Promise<ApiProduct>),
2121
{name: 'addProduct', timeout: 2_000},

autotests/entities/worker.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const addUser: ClientFunction<[UserWorker, number?], Promise<object>> = c
1616
(user: UserWorker, delay?: number) =>
1717
fetch(`https://reqres.in/api/users${delay !== undefined ? `?delay=${delay}` : ''}`, {
1818
body: JSON.stringify(user),
19-
headers: {'Content-Type': 'application/json; charset=UTF-8'},
19+
headers: {'Content-Type': 'application/json; charset=UTF-8', 'x-api-key': 'reqres-free-v1'},
2020
method: 'POST',
2121
}),
2222
{name: 'addUser', timeout: 3_000},
@@ -33,9 +33,10 @@ export const getUsers = ({delay = 0, retries = 0}: GetUsersOptions = {}): Promis
3333

3434
clientGetUsers = createClientFunction(
3535
(clientDelay: number) =>
36-
fetch(`https://reqres.in/api/users?delay=${clientDelay}`, {method: 'GET'}).then(
37-
(res) => res.json() as unknown,
38-
),
36+
fetch(`https://reqres.in/api/users?delay=${clientDelay}`, {
37+
headers: {'x-api-key': 'reqres-free-v1'},
38+
method: 'GET',
39+
}).then((res) => res.json() as unknown),
3940
{name: 'getUsers', retries, timeout: 6_000},
4041
);
4142
}

autotests/packs/allTests.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export const pack: Pack = {
8080
skipTests,
8181
takeFullPageScreenshotOnError: false,
8282
takeViewportScreenshotOnError: true,
83-
testFileGlobs: ['**/autotests/tests/**/switchingPages.ts'],
83+
testFileGlobs: ['**/autotests/tests/**/*.ts'],
8484
testIdleTimeout: 8_000,
8585
testTimeout: 15_000,
8686
userAgent,

autotests/pageObjects/pages/E2edReportExample/E2edReportExample.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
} from 'autotests/actions';
55
import {setPageCookies, setPageRequestHeaders} from 'autotests/context';
66
import {E2edReportExample as E2edReportExampleRoute} from 'autotests/routes/pageRoutes';
7-
import {createSelector, locator} from 'autotests/selectors';
7+
import {locator} from 'autotests/selectors';
88
import {Page} from 'e2ed';
99
import {setReadonlyProperty} from 'e2ed/utils';
1010

@@ -23,7 +23,7 @@ export class E2edReportExample extends Page<CustomPageParams> {
2323
/**
2424
* Page header.
2525
*/
26-
readonly header: Selector = createSelector('.header');
26+
readonly header: Selector = locator('header');
2727

2828
/**
2929
* Navigation bar with test retries.

autotests/tests/request.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ test(
99
async () => {
1010
const {
1111
responseBody: {data},
12-
} = await request(GetUsers, {routeParams: {delay: 3}});
12+
} = await request(GetUsers, {
13+
requestHeaders: {'x-api-key': 'reqres-free-v1'},
14+
routeParams: {delay: 3},
15+
});
1316

1417
await expect(data.length, 'request returns some users').gt(0);
1518

autotests/tests/switchingPages.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/* eslint-disable @typescript-eslint/no-magic-numbers */
2+
3+
import {test} from 'autotests';
4+
import {getUsers} from 'autotests/entities';
5+
import {E2edReportExample} from 'autotests/pageObjects/pages';
6+
import {GetUsers} from 'autotests/routes/apiRoutes';
7+
import {expect} from 'e2ed';
8+
import {
9+
click,
10+
navigateToPage,
11+
switchToTab,
12+
waitForNewTab,
13+
waitForRequestToRoute,
14+
waitForTimeout,
15+
} from 'e2ed/actions';
16+
import {log} from 'e2ed/utils';
17+
18+
const maxNumberOfRequests = 15;
19+
20+
const timeout = (maxNumberOfRequests + 10) * 1_000;
21+
22+
test(
23+
'support switching of tabs for waitForRequest',
24+
{meta: {testId: '21'}, testTimeout: timeout + 1_000},
25+
async () => {
26+
let numberOfCaughtRequests = 0;
27+
let numberOfSentRequests = 0;
28+
29+
setInterval(() => {
30+
if (numberOfSentRequests < maxNumberOfRequests) {
31+
numberOfSentRequests += 1;
32+
33+
log(`Sent request number ${numberOfSentRequests}`);
34+
35+
void getUsers({retries: 1});
36+
}
37+
}, 1_000);
38+
39+
void waitForRequestToRoute(GetUsers, {
40+
predicate: (routeParams, request) => {
41+
numberOfCaughtRequests += 1;
42+
43+
log(`Caught request number ${numberOfCaughtRequests}`, {request, routeParams});
44+
45+
return false;
46+
},
47+
timeout,
48+
});
49+
50+
await waitForTimeout(maxNumberOfRequests * 333);
51+
52+
const reportPage = await navigateToPage(E2edReportExample);
53+
54+
await waitForTimeout(maxNumberOfRequests * 333);
55+
56+
const npmPageTab = await waitForNewTab(async () => {
57+
await click(reportPage.header);
58+
});
59+
60+
switchToTab(npmPageTab);
61+
62+
await waitForTimeout(maxNumberOfRequests * 333 + 1_000);
63+
64+
await expect(
65+
numberOfSentRequests === numberOfCaughtRequests ||
66+
numberOfSentRequests === numberOfCaughtRequests + 1,
67+
`almost all responses were caught (${numberOfCaughtRequests} of ${numberOfSentRequests})`,
68+
).ok();
69+
},
70+
);
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/* eslint-disable @typescript-eslint/no-magic-numbers */
2+
3+
import {test} from 'autotests';
4+
import {getUsers} from 'autotests/entities';
5+
import {E2edReportExample} from 'autotests/pageObjects/pages';
6+
import {GetUsers} from 'autotests/routes/apiRoutes';
7+
import {expect} from 'e2ed';
8+
import {
9+
click,
10+
navigateToPage,
11+
switchToTab,
12+
waitForNewTab,
13+
waitForResponseToRoute,
14+
waitForTimeout,
15+
} from 'e2ed/actions';
16+
import {log} from 'e2ed/utils';
17+
18+
const maxNumberOfRequests = 15;
19+
20+
const timeout = (maxNumberOfRequests + 10) * 1_000;
21+
22+
test(
23+
'support switching of tabs for waitForResponse',
24+
{meta: {testId: '22'}, testTimeout: timeout + 1_000},
25+
async () => {
26+
let numberOfCaughtResponses = 0;
27+
let numberOfSentRequests = 0;
28+
29+
setInterval(() => {
30+
if (numberOfSentRequests < maxNumberOfRequests) {
31+
numberOfSentRequests += 1;
32+
33+
log(`Sent request number ${numberOfSentRequests}`);
34+
35+
void getUsers({retries: 1});
36+
}
37+
}, 1_000);
38+
39+
void waitForResponseToRoute(GetUsers, {
40+
predicate: (routeParams, response) => {
41+
numberOfCaughtResponses += 1;
42+
43+
log(`Caught response number ${numberOfCaughtResponses}`, {response, routeParams});
44+
45+
return false;
46+
},
47+
timeout,
48+
});
49+
50+
await waitForTimeout(maxNumberOfRequests * 333);
51+
52+
const reportPage = await navigateToPage(E2edReportExample);
53+
54+
await waitForTimeout(maxNumberOfRequests * 333);
55+
56+
const npmPageTab = await waitForNewTab(async () => {
57+
await click(reportPage.header);
58+
});
59+
60+
switchToTab(npmPageTab);
61+
62+
await waitForTimeout(maxNumberOfRequests * 333 + 1_000);
63+
64+
await expect(
65+
numberOfSentRequests === numberOfCaughtResponses ||
66+
numberOfSentRequests === numberOfCaughtResponses + 1,
67+
`almost all responses were caught (${numberOfCaughtResponses} of ${numberOfSentRequests})`,
68+
).ok();
69+
},
70+
);

src/actions/switchToMainTab.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@ import {LogEventType} from '../constants/internal';
22
import {clearTab} from '../context/tab';
33
import {getPlaywrightPage} from '../useContext';
44
import {log} from '../utils/log';
5+
import {switchPlaywrightPage} from '../utils/playwrightPage';
56

67
/**
78
* Switches page context to the specified tab.
89
*/
910
export const switchToMainTab = (): void => {
11+
clearTab();
12+
1013
const page = getPlaywrightPage();
1114
const url = page.url();
1215

1316
log(`Switch page context to the main tab at ${url}`, LogEventType.InternalAction);
1417

15-
clearTab();
18+
switchPlaywrightPage(page);
1619
};

src/actions/switchToTab.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {LogEventType} from '../constants/internal';
22
import {setTab} from '../context/tab';
33
import {log} from '../utils/log';
4+
import {switchPlaywrightPage} from '../utils/playwrightPage';
45

56
import type {InternalTab, Tab} from '../types/internal';
67

@@ -14,4 +15,6 @@ export const switchToTab = (tab: Tab): void => {
1415
log(`Switch page context to the specified tab at ${url}`, LogEventType.InternalAction);
1516

1617
setTab(tab);
18+
19+
switchPlaywrightPage(page);
1720
};

0 commit comments

Comments
 (0)