Skip to content

Commit 5fd37e3

Browse files
committed
FI-943 feat: support CDP (aka native automation)
1 parent 1121f66 commit 5fd37e3

35 files changed

+441
-83
lines changed

autotests/actions/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export {createRandomUser} from './createRandomUser';
22
export {setPageCookiesAndNavigateToUrl} from './setPageCookiesAndNavigateToUrl';
3+
export {setPageRequestHeadersAndNavigateToUrl} from './setPageRequestHeadersAndNavigateToUrl';

autotests/actions/setPageCookiesAndNavigateToUrl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {setHeadersAndNavigateToUrl} from 'e2ed/actions';
22
import {LogEventType} from 'e2ed/constants';
3-
import {log, replaceSetCookie} from 'e2ed/utils';
3+
import {getHeaderValue, log, replaceSetCookie} from 'e2ed/utils';
44

55
import type {Cookie, Headers, Url} from 'e2ed/types';
66

@@ -12,7 +12,7 @@ export const setPageCookiesAndNavigateToUrl = async (
1212
pageCookies: readonly Cookie[],
1313
): Promise<void> => {
1414
const mapResponseHeaders = (headers: Headers): Headers => {
15-
let setCookies = headers['set-cookie'];
15+
let setCookies = getHeaderValue(headers, 'set-cookie');
1616

1717
if (setCookies === undefined) {
1818
setCookies = [];
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {setHeadersAndNavigateToUrl} from 'e2ed/actions';
2+
import {LogEventType} from 'e2ed/constants';
3+
import {log} from 'e2ed/utils';
4+
5+
import type {Headers, Url} from 'e2ed/types';
6+
7+
/**
8+
* Navigate to the url and set additional page request headers.
9+
*/
10+
export const setPageRequestHeadersAndNavigateToUrl = async (
11+
url: Url,
12+
pageRequestHeaders: Headers,
13+
): Promise<void> => {
14+
const mapRequestHeaders = (): Headers => pageRequestHeaders;
15+
16+
log(
17+
`Navigate to ${url} and set page request headers`,
18+
{pageRequestHeaders, url},
19+
LogEventType.Action,
20+
);
21+
22+
await setHeadersAndNavigateToUrl(url, {mapRequestHeaders});
23+
};

autotests/bin/runDocker.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ docker run \
4545
--env E2ED_ORIGIN=$E2ED_ORIGIN \
4646
--env E2ED_DEBUG=$E2ED_DEBUG \
4747
--env __INTERNAL_E2ED_PATH_TO_PACK=$1 \
48+
--shm-size 512m \
4849
$DOCKER_IMAGE:$VERSION \
4950
& PID=$!
5051

autotests/context/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
export {clearPageCookies, getPageCookies, setPageCookies} from './pageCookies';
2+
export {
3+
clearPageRequestHeaders,
4+
getPageRequestHeaders,
5+
setPageRequestHeaders,
6+
} from './pageRequestHeaders';
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {useContext} from 'e2ed';
2+
3+
import type {Headers} from 'e2ed/types';
4+
5+
/**
6+
* Get, set and clear additional page request headers, that will be added when navigating to the page.
7+
*/
8+
export const [getPageRequestHeaders, setPageRequestHeaders, clearPageRequestHeaders] =
9+
useContext<Headers>();

autotests/hooks/navigateTo.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
import {setPageCookiesAndNavigateToUrl} from 'autotests/actions';
2-
import {clearPageCookies, getPageCookies} from 'autotests/context';
1+
import {
2+
setPageCookiesAndNavigateToUrl,
3+
setPageRequestHeadersAndNavigateToUrl,
4+
} from 'autotests/actions';
5+
import {
6+
clearPageCookies,
7+
clearPageRequestHeaders,
8+
getPageCookies,
9+
getPageRequestHeaders,
10+
} from 'autotests/context';
311
import {navigateToUrl} from 'e2ed/actions';
412

513
import type {NavigateTo} from 'autotests/types';
@@ -11,13 +19,17 @@ import type {NavigateTo} from 'autotests/types';
1119
*/
1220
export const navigateTo: NavigateTo = async (url) => {
1321
const pageCookies = getPageCookies();
22+
const pageRequestHeaders = getPageRequestHeaders();
1423

15-
if (pageCookies === undefined) {
16-
// As with all hooks, you can replace it with your own implementation.
17-
await navigateToUrl(url, {skipLogs: true});
18-
} else {
24+
if (pageCookies !== undefined) {
1925
clearPageCookies();
2026

2127
await setPageCookiesAndNavigateToUrl(url, pageCookies);
28+
} else if (pageRequestHeaders !== undefined) {
29+
clearPageRequestHeaders();
30+
31+
await setPageRequestHeadersAndNavigateToUrl(url, pageRequestHeaders);
32+
} else {
33+
await navigateToUrl(url, {skipLogs: true});
2234
}
2335
};

autotests/packs/allTests.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ import type {FilterTestsIntoPack, Pack} from 'autotests/types/packSpecific';
2323
const isLocalRun = runEnvironment === RunEnvironment.Local;
2424

2525
const browser = isLocalRun ? 'chrome:headless' : 'chromium:headless';
26-
const browserFlags = ['--disable-dev-shm-usage', '--disable-web-security'];
26+
const browserFlags = [
27+
'--disable-dev-shm-usage',
28+
'--disable-web-security',
29+
'--ignore-certificate-errors',
30+
];
2731

2832
const filterTestsIntoPack: FilterTestsIntoPack = ({options}) => options.meta.testId !== '13';
2933

autotests/pageObjects/pages/E2edReportExample.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {setPageCookies} from 'autotests/context';
1+
import {setPageCookies, setPageRequestHeaders} from 'autotests/context';
22
import {E2edReportExample as E2edReportExampleRoute} from 'autotests/routes/pageRoutes';
33
import {locatorIdSelector} from 'autotests/selectors';
44
import {Page} from 'e2ed';
55
import {setReadonlyProperty} from 'e2ed/utils';
66

7-
import type {Cookie, Selector} from 'e2ed/types';
7+
import type {Cookie, Headers, Selector} from 'e2ed/types';
88

9-
type CustomPageParams = {pageCookies?: readonly Cookie[]} | undefined;
9+
type CustomPageParams = {pageCookies?: readonly Cookie[]; pageRequestHeaders?: Headers} | undefined;
1010

1111
/**
1212
* The e2ed report example page.
@@ -17,12 +17,18 @@ export class E2edReportExample extends Page<CustomPageParams> {
1717
*/
1818
readonly pageCookies!: readonly Cookie[];
1919

20+
/**
21+
* Request headers that we add to page request.
22+
*/
23+
readonly pageRequestHeaders: Headers | undefined;
24+
2025
override readonly pageStabilizationInterval = 600;
2126

2227
override init(this: E2edReportExample): void {
23-
const {pageCookies = []} = this.pageParams ?? {};
28+
const {pageCookies = [], pageRequestHeaders} = this.pageParams ?? {};
2429

2530
setReadonlyProperty(this, 'pageCookies', pageCookies);
31+
setReadonlyProperty(this, 'pageRequestHeaders', pageRequestHeaders);
2632
}
2733

2834
getRoute(): E2edReportExampleRoute {
@@ -52,11 +58,15 @@ export class E2edReportExample extends Page<CustomPageParams> {
5258
readonly testRunButton: Selector = this.testRunsList.findByLocatorId('app-retries-retry-button');
5359

5460
/**
55-
* Set page cookies to context before navigate.
61+
* Set page cookies and page request headers to context before navigate.
5662
*/
5763
override beforeNavigateToPage(): void {
5864
if (this.pageCookies.length !== 0) {
5965
setPageCookies(this.pageCookies);
6066
}
67+
68+
if (this.pageRequestHeaders !== undefined) {
69+
setPageRequestHeaders(this.pageRequestHeaders);
70+
}
6171
}
6272
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {test} from 'autotests';
2+
import {E2edReportExample} from 'autotests/pageObjects/pages';
3+
import {navigateToPage, waitForRequest} from 'e2ed/actions';
4+
5+
const headerName = 'x-custom-header';
6+
const pageRequestHeaders = {[headerName]: 'foo'};
7+
8+
test('set page request headers correctly', {meta: {testId: '17'}}, async () => {
9+
void navigateToPage(E2edReportExample, {pageRequestHeaders});
10+
11+
await waitForRequest(
12+
({requestHeaders}) => requestHeaders[headerName] === pageRequestHeaders[headerName],
13+
);
14+
});

0 commit comments

Comments
 (0)