Skip to content

Commit 349220e

Browse files
authored
Merge pull request #3164 from IntersectMBO/fix/locator-visibility-on-filter
Check locator visibility before validate
2 parents fc99d80 + 4aed3db commit 349220e

File tree

9 files changed

+92
-52
lines changed

9 files changed

+92
-52
lines changed

tests/govtool-frontend/playwright/lib/helpers/transaction.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export async function waitForTxConfirmation(
7777
.getByTestId("alert-warning")
7878
.getByText("Transaction in progress", { exact: false })
7979
).toBeVisible({
80-
timeout: 16_000,
80+
timeout: 60_000,
8181
});
8282
const url = (await transactionStatusPromise).url();
8383
const regex = /\/transaction\/status\/([^\/]+)$/;
@@ -90,7 +90,7 @@ export async function waitForTxConfirmation(
9090
await pollTransaction(transactionHash);
9191
await expect(
9292
page.getByText("In Progress", { exact: true }).first() //FIXME: Only one element needs to be displayed
93-
).not.toBeVisible({ timeout: 20_000 });
93+
).not.toBeVisible({ timeout: 60_000 });
9494
}
9595
} catch (error) {
9696
Logger.fail(error.message);

tests/govtool-frontend/playwright/lib/pages/dRepDetailsPage.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Page } from "@playwright/test";
1+
import { expect, Page } from "@playwright/test";
22

33
export default class DRepDetailsPage {
44
readonly copyIdBtn = this.page.getByTestId("copy-drep-id-button");
@@ -12,7 +12,22 @@ export default class DRepDetailsPage {
1212
}
1313

1414
async shareLink() {
15-
await this.shareBtn.click();
16-
await this.page.getByTestId("copy-link-from-share-button").click();
15+
const isShareButtonVisible = await this.page
16+
.waitForSelector(`[data-testid="share-button"]`, { timeout: 60_000 })
17+
.then(() => true)
18+
.catch(() => false);
19+
20+
if (isShareButtonVisible) {
21+
await this.shareBtn.click();
22+
} else {
23+
expect(false, "Share button not found").toBeTruthy();
24+
}
25+
26+
await this.page
27+
.getByTestId("copy-link-from-share-button")
28+
.click()
29+
.catch(() => {
30+
expect(false, "Copy link button not found").toBeTruthy();
31+
});
1732
}
1833
}

tests/govtool-frontend/playwright/lib/pages/dRepDirectoryPage.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,20 @@ export default class DRepDirectoryPage {
9696
}
9797

9898
for (const dRep of dRepList) {
99-
const hasFilter = await this._validateTypeFiltersInDRep(dRep, filters);
100-
const actualFilter = await dRep
101-
.locator('[data-testid$="-pill"]')
102-
.textContent();
103-
if (!hasFilter) {
104-
const errorMessage = `${actualFilter} pill does not match with any of the ${filters}`;
105-
throw new Error(errorMessage);
99+
if (await dRep.isVisible()) {
100+
const hasFilter = await this._validateTypeFiltersInDRep(
101+
dRep,
102+
filters
103+
);
104+
const actualFilter = await dRep
105+
.locator('[data-testid$="-pill"]')
106+
.textContent();
107+
if (!hasFilter) {
108+
const errorMessage = `${actualFilter} pill does not match with any of the ${filters}`;
109+
throw new Error(errorMessage);
110+
}
111+
expect(hasFilter).toBe(true);
106112
}
107-
expect(hasFilter).toBe(true);
108113
}
109114
});
110115
}

tests/govtool-frontend/playwright/lib/pages/governanceActionsPage.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,17 @@ export default class GovernanceActionsPage {
110110
const proposalCards = await this.getAllProposals();
111111

112112
for (const proposalCard of proposalCards) {
113-
const hasFilter = await this._validateFiltersInProposalCard(
114-
proposalCard,
115-
filters
116-
);
117-
expect(
118-
hasFilter,
119-
`A proposal card does not contain any of the ${filters}`
120-
).toBe(true);
113+
if (await proposalCard.isVisible()) {
114+
const hasFilter = await this._validateFiltersInProposalCard(
115+
proposalCard,
116+
filters
117+
);
118+
expect(
119+
hasFilter,
120+
hasFilter == false &&
121+
`A proposal card does not contain any of the ${filters}`
122+
).toBe(true);
123+
}
121124
}
122125
});
123126
}

tests/govtool-frontend/playwright/lib/pages/outcomesPage.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,18 @@ export default class OutComesPage {
105105
async () => {
106106
const proposalCards = await this.getAllOutcomes();
107107
for (const proposalCard of proposalCards) {
108-
const type = await proposalCard
109-
.locator('[data-testid$="-type"]')
110-
.textContent();
111-
const outcomeType = type.replace(/^.*Type/, "");
112-
const hasFilter = await validateFunction(proposalCard, filters);
113-
if (!hasFilter) {
114-
const errorMessage = `A outcomne type ${outcomeType} does not contain on ${filters}`;
115-
throw errorMessage;
108+
if (await proposalCard.isVisible()) {
109+
const type = await proposalCard
110+
.locator('[data-testid$="-type"]')
111+
.textContent();
112+
const outcomeType = type.replace(/^.*Type/, "");
113+
const hasFilter = await validateFunction(proposalCard, filters);
114+
if (!hasFilter) {
115+
const errorMessage = `An outcome type ${outcomeType} does not contain on ${filters}`;
116+
throw errorMessage;
117+
}
118+
expect(hasFilter).toBe(true);
116119
}
117-
expect(hasFilter).toBe(true);
118120
}
119121
},
120122
{

tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.dRep.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,29 @@ test.describe("Logged in DReps", () => {
3030
await page.goto("/");
3131

3232
await expect(page.getByTestId("voting-power-chips")).toBeVisible({
33-
timeout: 20_000,
33+
timeout: 60_000,
3434
});
3535

3636
await expect(
3737
page.getByTestId("dRep-id-display-card-dashboard")
38-
).toContainText(dRep01Wallet.dRepId, { timeout: 20_000 });
38+
).toContainText(dRep01Wallet.dRepId, { timeout: 60_000 });
3939

4040
const governanceActionsPage = new GovernanceActionsPage(page);
4141

4242
await governanceActionsPage.goto();
4343

44-
await expect(page.getByText(/info action/i).first()).toBeVisible();
44+
await expect(page.getByText(/info action/i).first()).toBeVisible({
45+
timeout: 60_000,
46+
});
4547

4648
const governanceActionDetailsPage =
4749
await governanceActionsPage.viewFirstProposalByGovernanceAction(
4850
GovernanceActionType.InfoAction
4951
);
5052

51-
await expect(governanceActionDetailsPage.voteBtn).toBeVisible();
53+
await expect(governanceActionDetailsPage.voteBtn).toBeVisible({
54+
timeout: 60_000,
55+
});
5256
});
5357

5458
test("3H. Should Update DRep data", async ({ page }, testInfo) => {

tests/govtool-frontend/playwright/tests/5-proposal-functionality/proposalFunctionality.dRep.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ test.describe("Bootstrap phase", () => {
319319
if (governanceActionDetailsPage) {
320320
await expect(
321321
dRepPage.getByTestId("governance-action-details-card-header")
322-
).toBeVisible();
322+
).toBeVisible({ timeout: 60_000 });
323323
await expect(
324324
governanceActionDetailsPage.yesVoteRadio
325325
).not.toBeVisible();

tests/govtool-frontend/playwright/tests/8-proposal-discussion/proposalDiscussion.spec.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,30 @@ test("8D. Should show the view-all categorized proposed governance actions.", as
139139

140140
const proposalDiscussionPage = new ProposalDiscussionPage(page);
141141
await proposalDiscussionPage.goto();
142-
143-
await page
144-
.getByTestId(
145-
proposalType.toLowerCase().replace(/ /g, "-") + "-show-all-button"
142+
const isShowAllButtonVisible = await page
143+
.waitForSelector(
144+
`[data-testid="${proposalType.toLowerCase().replace(/ /g, "-")}-show-all-button"]`,
145+
{ timeout: 60_000 }
146146
)
147-
.click();
148-
149-
const proposalCards = await proposalDiscussionPage.getAllProposals();
150-
151-
for (const proposalCard of proposalCards) {
152-
await expect(
153-
proposalCard.getByTestId("governance-action-type")
154-
).toHaveText(proposalType, { timeout: 60_000 });
147+
.then(() => true)
148+
.catch(() => false);
149+
150+
if (isShowAllButtonVisible) {
151+
await page
152+
.getByTestId(
153+
proposalType.toLowerCase().replace(/ /g, "-") + "-show-all-button"
154+
)
155+
.click();
156+
157+
const proposalCards = await proposalDiscussionPage.getAllProposals();
158+
159+
for (const proposalCard of proposalCards) {
160+
await expect(
161+
proposalCard.getByTestId("governance-action-type")
162+
).toHaveText(proposalType, { timeout: 60_000 });
163+
}
164+
} else {
165+
expect(true, `No ${proposalType} found`).toBeTruthy();
155166
}
156167
})
157168
);

tests/govtool-frontend/playwright/tests/9-outcomes/outcomes.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,18 +208,18 @@ test("9C_2. Should sort Governance Action Type on outcomes page", async ({
208208
test.slow();
209209

210210
const outcomePage = new OutComesPage(page);
211-
await outcomePage.goto();
211+
await outcomePage.goto({ sort: "oldestFirst" });
212212

213213
await outcomePage.sortBtn.click();
214214

215215
await outcomePage.sortAndValidate(
216-
SortOption.OldestFirst,
217-
(p1, p2) => p1.expiry_date <= p2.expiry_date
216+
SortOption.NewestFirst,
217+
(p1, p2) => p1.expiry_date >= p2.time
218218
);
219219

220220
await outcomePage.sortAndValidate(
221-
SortOption.NewestFirst,
222-
(p1, p2) => p1.expiry_date >= p2.time
221+
SortOption.OldestFirst,
222+
(p1, p2) => p1.expiry_date <= p2.expiry_date
223223
);
224224

225225
await outcomePage.sortAndValidate(

0 commit comments

Comments
 (0)