Skip to content

Commit 6601379

Browse files
authored
fix: Playwright tests fixes (#590)
1 parent cc09253 commit 6601379

36 files changed

+560
-953
lines changed

tests/common.js

Lines changed: 80 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
1+
const { expect } = require('@playwright/test');
12
const { config } = require('./config');
23

3-
const login = async (username, password, page) => {
4-
await page.locator('input[id="txtUserID"]').fill(username);
5-
await page.locator('input[id="txtPassword"]').fill(password);
6-
await page.locator('#submit_row .loginButton').click();
4+
const createCase = async (caseTypeName, page) => {
5+
const createCaseBtn = page.locator('mat-list-item[id="create-case-button"]');
6+
await createCaseBtn.click();
7+
const caseType = page.locator(`mat-list-item[id="case-list-item"] > span:has-text("${caseTypeName}")`);
8+
await caseType.click();
79
};
810

911
const launchPortal = async ({ page }) => {
1012
await page.setViewportSize({ width: 1720, height: 1080 });
1113
await page.goto(`${config.baseUrl}`, { waitUntil: 'networkidle' });
1214
};
1315

16+
const launchEmbedded = async ({ page }) => {
17+
await page.setViewportSize({ width: 1720, height: 1080 });
18+
await page.goto(`${config.baseEmbedUrl}`, { waitUntil: 'networkidle' });
19+
};
20+
21+
const launchSelfServicePortal = async ({ page }) => {
22+
await page.setViewportSize({ width: 1720, height: 1080 });
23+
await page.goto(`${config.baseUrl}?portal=DigV2SelfService`, {
24+
waitUntil: 'networkidle'
25+
});
26+
};
27+
28+
const login = async (username, password, page) => {
29+
await page.locator('input[id="txtUserID"]').fill(username);
30+
await page.locator('input[id="txtPassword"]').fill(password);
31+
await page.locator('#submit_row .loginButton').click();
32+
};
33+
1434
const getAttributes = async element => {
15-
// eslint-disable-next-line no-return-await
1635
return await element.evaluate(async ele => ele.getAttributeNames());
1736
};
1837

@@ -33,10 +52,65 @@ const getFutureDate = () => {
3352
return getFormattedDate(futureDate);
3453
};
3554

55+
const selectDateFromPicker = async (page, day, month, year) => {
56+
/** Open the datepicker popup */
57+
await page.locator('button[aria-label="Open calendar"]').click();
58+
/** Switch to multi-year view */
59+
await page.locator('.mat-calendar-period-button').click();
60+
/** Navigate back until the desired year is visible */
61+
while (!(await page.locator(`.mat-calendar-body-cell:has-text("${year}")`).isVisible())) {
62+
await page.locator('.mat-calendar-previous-button').click();
63+
}
64+
/** Select the year */
65+
await page.locator(`.mat-calendar-body-cell:has-text("${year}")`).click();
66+
/** Select the month (Angular Material uses short month names like JAN, FEB, JUN) */
67+
const shortMonth = month.substring(0, 3).toUpperCase();
68+
await page.locator(`.mat-calendar-body-cell:has-text("${shortMonth}")`).click();
69+
/** Select the day using aria-label for uniqueness */
70+
const ariaLabel = `${month} ${day}, ${year}`;
71+
await page.locator(`[aria-label="${ariaLabel}"]`).click();
72+
};
73+
74+
const selectCategory = async (category, page, exact = false) => {
75+
const selectedCategory = page.locator('mat-select[data-test-id="76729937a5eb6b0fd88c42581161facd"]');
76+
await selectedCategory.click();
77+
await page.getByRole('option', { name: category, exact }).click();
78+
};
79+
80+
const selectSubCategory = async (subCategory, page, exact = false) => {
81+
const selectedSubCategory = page.locator('mat-select[data-test-id="9463d5f18a8924b3200b56efaad63bda"]');
82+
await selectedSubCategory.click();
83+
await page.getByRole('option', { name: subCategory, exact }).click();
84+
};
85+
86+
const verifyHomePage = async page => {
87+
/** Testing announcement banner presence */
88+
const announcementBanner = page.locator('h2:has-text("Announcements")');
89+
await expect(announcementBanner).toBeVisible();
90+
91+
/** Testing worklist presence */
92+
const worklist = page.locator('div[id="worklist"]:has-text("My Worklist")');
93+
await expect(worklist).toBeVisible();
94+
};
95+
96+
const fillTextInput = async (page, testID, text) => {
97+
const input = page.locator(`input[data-test-id="${testID}"]`);
98+
await input.click();
99+
await input.fill(text);
100+
};
101+
36102
module.exports = {
103+
createCase,
104+
launchPortal,
105+
launchEmbedded,
106+
launchSelfServicePortal,
37107
login,
38108
getAttributes,
39109
getFutureDate,
40110
getFormattedDate,
41-
launchPortal
111+
selectCategory,
112+
selectSubCategory,
113+
verifyHomePage,
114+
selectDateFromPicker,
115+
fillTextInput
42116
};

tests/e2e/DigV2/ComplexFields/CaseReference.spec.js

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,10 @@ test.describe('E2E test', () => {
1111
test('should login, create case and run different test cases for Case Reference', async ({ page }) => {
1212
await common.login(config.config.apps.digv2.user.username, config.config.apps.digv2.user.password, page);
1313

14-
/** Testing announcement banner presence */
15-
const announcementBanner = page.locator('h2:has-text("Announcements")');
16-
await expect(announcementBanner).toBeVisible();
17-
18-
/** Testing worklist presence */
19-
const worklist = page.locator('div[id="worklist"]:has-text("My Worklist")');
20-
await expect(worklist).toBeVisible();
21-
22-
/** Hovering over navbar */
23-
const navbar = page.locator('app-navbar');
24-
await navbar.locator('div[class="psdk-appshell-nav"]').hover();
14+
await common.verifyHomePage(page);
2515

2616
// /** Creating a Query case-type which will be referred by Complex Fields case type */
27-
let createCase = page.locator('mat-list-item[id="create-case-button"]');
28-
await createCase.click();
29-
30-
let queryCase = await page.locator('mat-list-item[id="case-list-item"] > span:has-text("Query")');
31-
await queryCase.click();
17+
await common.createCase('Query', page);
3218

3319
let modal = page.locator('div[id="dialog"]');
3420
await modal.waitFor({ state: 'visible' });
@@ -46,12 +32,7 @@ test.describe('E2E test', () => {
4632
caseID.push(await page.locator('div[id="caseId"]').textContent());
4733

4834
/** Creating another Query case-type which will be used for ListOfRecords mode */
49-
await navbar.locator('div[class="psdk-appshell-nav"]').hover();
50-
createCase = page.locator('mat-list-item[id="create-case-button"]');
51-
await createCase.click();
52-
53-
queryCase = await page.locator('mat-list-item[id="case-list-item"] > span:has-text("Query")');
54-
await queryCase.click();
35+
await common.createCase('Query', page);
5536

5637
modal = page.locator('div[id="dialog"]');
5738
await modal.waitFor({ state: 'visible' });
@@ -64,18 +45,10 @@ test.describe('E2E test', () => {
6445

6546
/** Creating a Complex Fields case-type */
6647
/** opening all case types */
67-
await navbar.locator('div[class="psdk-appshell-nav"]').hover();
68-
createCase = page.locator('mat-list-item[id="create-case-button"]');
69-
await createCase.click();
70-
71-
/** Creating a Complex Fields case-type */
72-
const complexFieldsCaseBtn = await page.locator('mat-list-item[id="case-list-item"] > span:has-text("Complex Fields")');
73-
await complexFieldsCaseBtn.click();
48+
await common.createCase('Complex Fields', page);
7449

7550
/** Selecting CaseReference from the Category dropdown */
76-
const selectedCategory = page.locator('mat-select[data-test-id="76729937a5eb6b0fd88c42581161facd"]');
77-
await selectedCategory.click();
78-
await page.locator('mat-option > span:has-text("CaseReference")').click();
51+
await common.selectCategory('CaseReference', page);
7952

8053
await page.locator('button:has-text("submit")').click();
8154

@@ -150,12 +123,12 @@ test.describe('E2E test', () => {
150123
await page.locator('mat-option > span:has-text("ListOfRecords")').click();
151124
table = page.locator('table[id="list-view"]');
152125
await expect(table.getByText(' Case ID ')).toBeVisible();
153-
await page.locator('input[id="search"]').pressSequentially(caseID[0]);
126+
await page.locator('input[id="search"]').pressSequentially(caseID[0], { delay: 100 });
154127
const selectedRow1 = await page.locator(`tr:has-text("${caseID[0]}")`);
155128
await selectedRow1.locator('mat-checkbox').click();
156129

157130
await page.locator('input[id="search"]').clear();
158-
await page.locator('input[id="search"]').pressSequentially(caseID[1]);
131+
await page.locator('input[id="search"]').pressSequentially(caseID[1], { delay: 100 });
159132
const selectedRow2 = await page.locator(`tr:has-text("${caseID[1]}")`);
160133
await selectedRow2.locator('mat-checkbox').click();
161134

tests/e2e/DigV2/ComplexFields/CaseView.spec.js

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,9 @@ test.describe('E2E test', () => {
1717
test('should login, create case and run different test cases for Case View', async ({ page }) => {
1818
await common.login(config.config.apps.digv2.user.username, config.config.apps.digv2.user.password, page);
1919

20-
/** Testing announcement banner presence */
21-
const announcementBanner = page.locator('h2:has-text("Announcements")');
22-
await expect(announcementBanner).toBeVisible();
23-
24-
/** Testing worklist presence */
25-
const worklist = page.locator('div[id="worklist"]:has-text("My Worklist")');
26-
await expect(worklist).toBeVisible();
27-
28-
/** Click on the Create Case button */
29-
const createCase = page.locator('mat-list-item[id="create-case-button"]');
30-
await createCase.click();
20+
await common.verifyHomePage(page);
3121

32-
/** Creating a Complex Fields case-type */
33-
const complexFieldsCase = page.locator('mat-list-item[id="case-list-item"] > span:has-text("Complex Fields")');
34-
await complexFieldsCase.click();
22+
await common.createCase('Complex Fields', page);
3523

3624
/** Wait until newly created case loads */
3725
await expect(page.locator('div[id="case-view"]')).toBeVisible();
@@ -57,20 +45,10 @@ test.describe('E2E test', () => {
5745
await common.login(config.config.apps.digv2.user.username, config.config.apps.digv2.user.password, page);
5846

5947
/** Testing announcement banner presence */
60-
const announcementBanner = page.locator('h2:has-text("Announcements")');
61-
await expect(announcementBanner).toBeVisible();
62-
63-
/** Testing worklist presence */
64-
const worklist = page.locator('div[id="worklist"]:has-text("My Worklist")');
65-
await expect(worklist).toBeVisible();
48+
await common.verifyHomePage(page);
6649

6750
/** Click on the Create Case button */
68-
const createCase = page.locator('mat-list-item[id="create-case-button"]');
69-
await createCase.click();
70-
71-
/** Creating a Complex Fields case-type */
72-
const complexFieldsCase = page.locator('mat-list-item[id="case-list-item"] > span:has-text("Complex Fields")');
73-
await complexFieldsCase.click();
51+
await common.createCase('Complex Fields', page);
7452

7553
/** Wait until newly created case loads */
7654
await expect(page.locator('mat-select[data-test-id="76729937a5eb6b0fd88c42581161facd"]')).toBeVisible();

0 commit comments

Comments
 (0)