Skip to content

Commit 768716d

Browse files
test: fix flaky native send and transaction decoding test (#29362)
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The test dapp page loads and the element is visible but not enabled yet and this causes sometimes for the test to click on the button too soon and to fail. Added a new wait condition in the waitForSelector method to wait until the element is enabled and then click on it. [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/29362?quickstart=1) ## **Related issues** Fixes: #28485 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.
1 parent c91b4ee commit 768716d

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

test/e2e/page-objects/pages/test-dapp.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,16 @@ class TestDapp {
238238
}
239239

240240
async clickSimpleSendButton() {
241+
await this.driver.waitForSelector(this.simpleSendButton, {
242+
state: 'enabled',
243+
});
241244
await this.driver.clickElement(this.simpleSendButton);
242245
}
243246

244247
async clickERC721MintButton() {
248+
await this.driver.waitForSelector(this.erc721MintButton, {
249+
state: 'enabled',
250+
});
245251
await this.driver.clickElement(this.erc721MintButton);
246252
}
247253

test/e2e/webdriver/driver.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ class Driver {
355355
// bucket that can include the state attribute to wait for elements that
356356
// match the selector to be removed from the DOM.
357357
let element;
358-
if (!['visible', 'detached'].includes(state)) {
358+
if (!['visible', 'detached', 'enabled'].includes(state)) {
359359
throw new Error(`Provided state selector ${state} is not supported`);
360360
}
361361
if (state === 'visible') {
@@ -368,7 +368,13 @@ class Driver {
368368
until.stalenessOf(await this.findElement(rawLocator)),
369369
timeout,
370370
);
371+
} else if (state === 'enabled') {
372+
element = await this.driver.wait(
373+
until.elementIsEnabled(await this.findElement(rawLocator)),
374+
timeout,
375+
);
371376
}
377+
372378
return wrapElementWithAPI(element, this);
373379
}
374380

0 commit comments

Comments
 (0)