@lidofinance/wallets-testing-wallets 1.11.2 → 1.12.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/coin98/coin98.page.d.ts +1 -0
- package/dist/src/coin98/coin98.page.d.ts.map +1 -1
- package/dist/src/coin98/coin98.page.js +13 -5
- package/dist/src/coin98/coin98.page.js.map +1 -1
- package/dist/src/metamask/metamask.page.d.ts +12 -13
- package/dist/src/metamask/metamask.page.d.ts.map +1 -1
- package/dist/src/metamask/metamask.page.js +103 -204
- package/dist/src/metamask/metamask.page.js.map +1 -1
- package/dist/src/metamask/pages/elements/accountMenu.element.d.ts +12 -0
- package/dist/src/metamask/pages/elements/accountMenu.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/accountMenu.element.js +20 -0
- package/dist/src/metamask/pages/elements/accountMenu.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/header.element.d.ts +11 -0
- package/dist/src/metamask/pages/elements/header.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/header.element.js +17 -0
- package/dist/src/metamask/pages/elements/header.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/index.d.ts +8 -0
- package/dist/src/metamask/pages/elements/index.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/index.js +24 -0
- package/dist/src/metamask/pages/elements/index.js.map +1 -0
- package/dist/src/metamask/pages/elements/networkList.element.d.ts +13 -0
- package/dist/src/metamask/pages/elements/networkList.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/networkList.element.js +29 -0
- package/dist/src/metamask/pages/elements/networkList.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/onboarding.element.d.ts +21 -0
- package/dist/src/metamask/pages/elements/onboarding.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/onboarding.element.js +40 -0
- package/dist/src/metamask/pages/elements/onboarding.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/operationActions.element.d.ts +23 -0
- package/dist/src/metamask/pages/elements/operationActions.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/operationActions.element.js +76 -0
- package/dist/src/metamask/pages/elements/operationActions.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/optionsMenu.element.d.ts +9 -0
- package/dist/src/metamask/pages/elements/optionsMenu.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/optionsMenu.element.js +13 -0
- package/dist/src/metamask/pages/elements/optionsMenu.element.js.map +1 -0
- package/dist/src/metamask/pages/elements/popover.element.d.ts +14 -0
- package/dist/src/metamask/pages/elements/popover.element.d.ts.map +1 -0
- package/dist/src/metamask/pages/elements/popover.element.js +29 -0
- package/dist/src/metamask/pages/elements/popover.element.js.map +1 -0
- package/dist/src/metamask/pages/index.d.ts +4 -0
- package/dist/src/metamask/pages/index.d.ts.map +1 -0
- package/dist/src/metamask/pages/index.js +20 -0
- package/dist/src/metamask/pages/index.js.map +1 -0
- package/dist/src/metamask/pages/login.page.d.ts +11 -0
- package/dist/src/metamask/pages/login.page.d.ts.map +1 -0
- package/dist/src/metamask/pages/login.page.js +25 -0
- package/dist/src/metamask/pages/login.page.js.map +1 -0
- package/dist/src/metamask/pages/main.page.d.ts +20 -0
- package/dist/src/metamask/pages/main.page.d.ts.map +1 -0
- package/dist/src/metamask/pages/main.page.js +39 -0
- package/dist/src/metamask/pages/main.page.js.map +1 -0
- package/dist/src/metamask/pages/settings.page.d.ts +24 -0
- package/dist/src/metamask/pages/settings.page.d.ts.map +1 -0
- package/dist/src/metamask/pages/settings.page.js +50 -0
- package/dist/src/metamask/pages/settings.page.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -19,5 +19,6 @@ export declare class Coin98 implements WalletPage {
|
|
|
19
19
|
signTx(page: Page): Promise<void>;
|
|
20
20
|
assertReceiptAddress(page: Page, expectedAmount: string): Promise<void>;
|
|
21
21
|
addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string): Promise<void>;
|
|
22
|
+
waitForAutomaticallyOpenedWalletPageAfterInstallation(): Promise<void>;
|
|
22
23
|
}
|
|
23
24
|
//# sourceMappingURL=coin98.page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coin98.page.d.ts","sourceRoot":"","sources":["../../../src/coin98/coin98.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,MAAO,YAAW,UAAU;IAIrC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;
|
|
1
|
+
{"version":3,"file":"coin98.page.d.ts","sourceRoot":"","sources":["../../../src/coin98/coin98.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9D,qBAAa,MAAO,YAAW,UAAU;IAIrC,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAL7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;gBAGb,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,QAAQ;IAUR,KAAK,CAAC,OAAO,EAAE,MAAM;IASrB,cAAc,CAAC,OAAO,EAAE,MAAM;IAyB9B,SAAS,CAAC,GAAG,EAAE,MAAM;IAcrB,aAAa,CAAC,IAAI,EAAE,IAAI;IAcxB,YAAY,CAAC,SAAS,EAAE,IAAI;IAW5B,MAAM,CAAC,IAAI,EAAE,IAAI;IAYjB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAEjD,SAAS,CAAC,IAAI,EAAE,IAAI;IAOpB,MAAM,CAAC,IAAI,EAAE,IAAI;IAGjB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAGvD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKxF,qDAAqD;CAM5D"}
|
|
@@ -10,18 +10,15 @@ class Coin98 {
|
|
|
10
10
|
}
|
|
11
11
|
async navigate() {
|
|
12
12
|
await test_1.test.step('Navigate to Coin98', async () => {
|
|
13
|
-
this.page = await this.browserContext.newPage();
|
|
14
13
|
await this.page.goto(this.extensionUrl + this.config.COMMON.EXTENSION_START_PATH);
|
|
15
14
|
await this.page.reload();
|
|
16
|
-
await this.page.waitForTimeout(1000);
|
|
17
15
|
await this.closePopover(this.page);
|
|
18
16
|
});
|
|
19
17
|
}
|
|
20
18
|
async setup(network) {
|
|
21
19
|
await test_1.test.step('Setup', async () => {
|
|
20
|
+
await this.waitForAutomaticallyOpenedWalletPageAfterInstallation();
|
|
22
21
|
await this.navigate();
|
|
23
|
-
if (!this.page)
|
|
24
|
-
throw "Page isn't ready";
|
|
25
22
|
const firstTime = await this.page.waitForSelector('text=Get Started');
|
|
26
23
|
if (firstTime)
|
|
27
24
|
await this.firstTimeSetup(network);
|
|
@@ -66,10 +63,12 @@ class Coin98 {
|
|
|
66
63
|
async connectWallet(page) {
|
|
67
64
|
await test_1.test.step('Connect wallet', async () => {
|
|
68
65
|
await this.unlock(page);
|
|
69
|
-
const selectAllBtn = page.getByText('Select all');
|
|
66
|
+
const selectAllBtn = page.getByText('Select all', { exact: true });
|
|
70
67
|
// for polygon network there is no account selection preview
|
|
71
68
|
if (await selectAllBtn.isVisible()) {
|
|
72
69
|
await selectAllBtn.click();
|
|
70
|
+
}
|
|
71
|
+
if (await page.locator('button:has-text("Confirm")').isVisible()) {
|
|
73
72
|
await page.click('button:has-text("Confirm")');
|
|
74
73
|
}
|
|
75
74
|
await page.click('button:has-text("Connect")');
|
|
@@ -109,6 +108,15 @@ class Coin98 {
|
|
|
109
108
|
async assertReceiptAddress(page, expectedAmount) { }
|
|
110
109
|
// eslint-disable-next-line
|
|
111
110
|
async addNetwork(networkName, networkUrl, chainId, tokenSymbol) { }
|
|
111
|
+
// We need this function cause Coin98 wallet open the extension page after installation
|
|
112
|
+
// and close other opened wallet pages (include page with we work so here was test crash)
|
|
113
|
+
// We wait for that action and after it we continue testing
|
|
114
|
+
async waitForAutomaticallyOpenedWalletPageAfterInstallation() {
|
|
115
|
+
if ((await this.browserContext.pages().length) === 1) {
|
|
116
|
+
await this.browserContext.waitForEvent('page');
|
|
117
|
+
}
|
|
118
|
+
this.page = await this.browserContext.pages()[1];
|
|
119
|
+
}
|
|
112
120
|
}
|
|
113
121
|
exports.Coin98 = Coin98;
|
|
114
122
|
//# sourceMappingURL=coin98.page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coin98.page.js","sourceRoot":"","sources":["../../../src/coin98/coin98.page.ts"],"names":[],"mappings":";;;AAEA,2CAA8D;AAE9D,MAAa,MAAM;IAGjB,YACU,cAA8B,EAC9B,YAAoB,EACrB,MAAoB;QAFnB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAQ;QACrB,WAAM,GAAN,MAAM,CAAc;IAC1B,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,MAAM,WAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC/C,
|
|
1
|
+
{"version":3,"file":"coin98.page.js","sourceRoot":"","sources":["../../../src/coin98/coin98.page.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { WalletConfig } from '../wallets.constants';
|
|
2
2
|
import { WalletPage } from '../wallet.page';
|
|
3
|
-
import { BrowserContext, Page
|
|
3
|
+
import { BrowserContext, Page } from '@playwright/test';
|
|
4
|
+
import { MainPage, LoginPage, SettingsPage } from './pages';
|
|
5
|
+
import { OperationActions, Header, NetworkList, OptionsMenu, PopoverElements, AccountMenu } from './pages/elements';
|
|
4
6
|
export declare class MetamaskPage implements WalletPage {
|
|
5
7
|
private browserContext;
|
|
6
8
|
private extensionUrl;
|
|
7
9
|
config: WalletConfig;
|
|
8
10
|
page: Page | undefined;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
header: Header;
|
|
12
|
+
mainPage: MainPage;
|
|
13
|
+
settingsPage: SettingsPage;
|
|
14
|
+
loginPage: LoginPage;
|
|
15
|
+
networkList: NetworkList;
|
|
16
|
+
optionsMenu: OptionsMenu;
|
|
17
|
+
operationActions: OperationActions;
|
|
18
|
+
popoverElements: PopoverElements;
|
|
19
|
+
accountMenu: AccountMenu;
|
|
14
20
|
constructor(browserContext: BrowserContext, extensionUrl: string, config: WalletConfig);
|
|
15
21
|
initLocators(): Promise<void>;
|
|
16
22
|
navigate(): Promise<void>;
|
|
17
|
-
goToActivity(): Promise<void>;
|
|
18
23
|
setup(): Promise<void>;
|
|
19
|
-
unlock(): Promise<void>;
|
|
20
|
-
importTokens(token: string): Promise<void>;
|
|
21
|
-
isPopoverVisible(): Promise<boolean>;
|
|
22
24
|
closePopover(): Promise<void>;
|
|
23
|
-
rejectAllTxInQueue(): Promise<void>;
|
|
24
25
|
firstTimeSetup(): Promise<void>;
|
|
25
26
|
changeNetwork(networkName: string): Promise<void>;
|
|
26
27
|
switchNetwork(networkName?: string): Promise<void>;
|
|
27
28
|
setupNetwork(standConfig: Record<string, any>): Promise<void>;
|
|
28
|
-
getNetworkListText(): Promise<string[]>;
|
|
29
29
|
addNetwork(networkName: string, networkUrl: string, chainId: number, tokenSymbol: string, blockExplorer?: string): Promise<void>;
|
|
30
30
|
importKey(key: string): Promise<void>;
|
|
31
31
|
connectWallet(page: Page): Promise<void>;
|
|
@@ -37,7 +37,6 @@ export declare class MetamaskPage implements WalletPage {
|
|
|
37
37
|
signTx(page: Page): Promise<void>;
|
|
38
38
|
rejectTx(page: Page): Promise<void>;
|
|
39
39
|
approveTokenTx(page: Page): Promise<void>;
|
|
40
|
-
useDefaultToApprove(page: Page): Promise<void>;
|
|
41
40
|
assertReceiptAddress(page: Page, expectedAddress: string): Promise<void>;
|
|
42
41
|
getWalletAddress(): Promise<string>;
|
|
43
42
|
changeWalletAddress(addressName: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metamask.page.d.ts","sourceRoot":"","sources":["../../../src/metamask/metamask.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"metamask.page.d.ts","sourceRoot":"","sources":["../../../src/metamask/metamask.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAEL,gBAAgB,EAChB,MAAM,EACN,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,YAAa,YAAW,UAAU;IAc3C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAf7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;gBAGf,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,YAAY;IAiBZ,QAAQ;IAYR,KAAK;IAWL,YAAY;IAwBZ,cAAc;IAiBd,aAAa,CAAC,WAAW,EAAE,MAAM;IAajC,aAAa,CAAC,WAAW,SAAkB;IAQ3C,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqB7C,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,aAAa,SAAK;IAkBd,SAAS,CAAC,GAAG,EAAE,MAAM;IAiBrB,aAAa,CAAC,IAAI,EAAE,IAAI;IASxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAQjD,uBAAuB,CAAC,WAAW,EAAE,IAAI;IAOzC,qBAAqB,CAAC,OAAO,SAAI;IAYjC,eAAe,CAAC,SAAS,EAAE,MAAM;IAoBjC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO;IAOhD,MAAM,CAAC,IAAI,EAAE,IAAI;IAOjB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAOnB,cAAc,CAAC,IAAI,EAAE,IAAI;IAOzB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM;IAQxD,gBAAgB;IAUhB,mBAAmB,CAAC,WAAW,EAAE,MAAM;CAS9C"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MetamaskPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const test_2 = require("@playwright/test");
|
|
6
|
+
const pages_1 = require("./pages");
|
|
7
|
+
const elements_1 = require("./pages/elements");
|
|
6
8
|
class MetamaskPage {
|
|
7
9
|
constructor(browserContext, extensionUrl, config) {
|
|
8
10
|
this.browserContext = browserContext;
|
|
@@ -10,151 +12,77 @@ class MetamaskPage {
|
|
|
10
12
|
this.config = config;
|
|
11
13
|
}
|
|
12
14
|
async initLocators() {
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
|
|
20
|
-
this.
|
|
15
|
+
this.page = await this.browserContext.newPage();
|
|
16
|
+
this.header = new elements_1.Header(this.page);
|
|
17
|
+
this.mainPage = new pages_1.MainPage(this.page, this.extensionUrl, this.config);
|
|
18
|
+
this.settingsPage = new pages_1.SettingsPage(this.page, this.extensionUrl, this.config);
|
|
19
|
+
this.loginPage = new pages_1.LoginPage(this.page, this.config);
|
|
20
|
+
this.networkList = new elements_1.NetworkList(this.page);
|
|
21
|
+
this.optionsMenu = new elements_1.OptionsMenu(this.page);
|
|
22
|
+
this.operationActions = new elements_1.OperationActions(this.page);
|
|
23
|
+
this.popoverElements = new elements_1.PopoverElements(this.page);
|
|
24
|
+
this.accountMenu = new elements_1.AccountMenu(this.page);
|
|
21
25
|
}
|
|
22
26
|
async navigate() {
|
|
23
27
|
await test_2.test.step('Navigate to metamask', async () => {
|
|
24
|
-
this.page = await this.browserContext.newPage();
|
|
25
28
|
await this.initLocators();
|
|
26
|
-
await this.
|
|
27
|
-
await this.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
await this.unlock();
|
|
31
|
-
if (await this.networkDisplay.isVisible()) {
|
|
29
|
+
await this.mainPage.openWidgetPage();
|
|
30
|
+
await this.header.appHeaderLogo.waitFor({ state: 'visible' });
|
|
31
|
+
await this.loginPage.unlock();
|
|
32
|
+
if (await this.header.networkListButton.isVisible()) {
|
|
32
33
|
await this.closePopover();
|
|
33
34
|
}
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
|
-
async goToActivity() {
|
|
37
|
-
await this.page.locator('button:has-text("Activity")').click();
|
|
38
|
-
}
|
|
39
37
|
async setup() {
|
|
40
38
|
await test_2.test.step('Setup', async () => {
|
|
41
39
|
// added explicit route to #onboarding due to unexpected first time route from /home.html to /onboarding -> page is close
|
|
42
40
|
await this.navigate();
|
|
43
|
-
if (!this.
|
|
44
|
-
throw "Page isn't ready";
|
|
45
|
-
if (!(await this.networkDisplay.isVisible())) {
|
|
41
|
+
if (!(await this.header.networkListButton.isVisible())) {
|
|
46
42
|
await this.firstTimeSetup();
|
|
43
|
+
await this.settingsPage.setupNetworkChangingSetting();
|
|
47
44
|
}
|
|
48
45
|
});
|
|
49
46
|
}
|
|
50
|
-
async unlock() {
|
|
51
|
-
await test_2.test.step('Unlock', async () => {
|
|
52
|
-
if (!this.page)
|
|
53
|
-
throw "Page isn't ready";
|
|
54
|
-
if ((await this.page.locator('id=password').count()) > 0) {
|
|
55
|
-
await this.page.fill('id=password', this.config.PASSWORD);
|
|
56
|
-
await this.page.click('text=Unlock');
|
|
57
|
-
await this.page.waitForURL('**/home.html#');
|
|
58
|
-
await this.closePopover();
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
async importTokens(token) {
|
|
63
|
-
await test_2.test.step('Import token', async () => {
|
|
64
|
-
await this.navigate();
|
|
65
|
-
if (!this.page)
|
|
66
|
-
throw "Page isn't ready";
|
|
67
|
-
await this.page.click("text='import tokens'");
|
|
68
|
-
await this.page.click('text=Custom token');
|
|
69
|
-
await this.page.type('id=custom-address', token);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
async isPopoverVisible() {
|
|
73
|
-
try {
|
|
74
|
-
const popoverContent = this.page.getByTestId('popover-close');
|
|
75
|
-
await popoverContent.waitFor({ state: 'visible', timeout: 1000 });
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
47
|
async closePopover() {
|
|
83
48
|
await test_2.test.step('Close popover if it exists', async () => {
|
|
84
49
|
if (!this.page)
|
|
85
50
|
throw "Page isn't ready";
|
|
86
|
-
if (await this.isPopoverVisible())
|
|
87
|
-
await this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (await this.page.getByText('Not right now').isVisible())
|
|
97
|
-
await this.page.click('text=Not right now');
|
|
98
|
-
const gotItBtn = this.page.getByText('Got it');
|
|
99
|
-
if (await gotItBtn.first().isVisible())
|
|
100
|
-
await gotItBtn.first().click();
|
|
51
|
+
if (await this.popoverElements.isPopoverVisible())
|
|
52
|
+
await this.popoverElements.popoverCloseButton.click();
|
|
53
|
+
if (await this.popoverElements.manageInSettingButton.isVisible())
|
|
54
|
+
await this.popoverElements.manageInSettingButton.click();
|
|
55
|
+
if (await this.popoverElements.notRightNowButton.isVisible())
|
|
56
|
+
await this.popoverElements.notRightNowButton.click();
|
|
57
|
+
if (await this.popoverElements.gotItButton.first().isVisible())
|
|
58
|
+
await this.popoverElements.gotItButton.first().click();
|
|
59
|
+
if (await this.popoverElements.noThanksButton.isVisible())
|
|
60
|
+
await this.popoverElements.noThanksButton.click();
|
|
101
61
|
// reject all tx in queue if exist
|
|
102
|
-
await this.rejectAllTxInQueue();
|
|
62
|
+
await this.operationActions.rejectAllTxInQueue();
|
|
103
63
|
});
|
|
104
64
|
}
|
|
105
|
-
async rejectAllTxInQueue() {
|
|
106
|
-
//Is there is any tx in queue.
|
|
107
|
-
try {
|
|
108
|
-
const rejectTxBtn = this.page.getByTestId('page-container-footer-cancel');
|
|
109
|
-
await rejectTxBtn.waitFor({ state: 'visible', timeout: 1000 });
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
//No tx in queue
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const rejectTxsBtn = this.page.locator('div[class="page-container__footer-secondary"]');
|
|
116
|
-
if (await rejectTxsBtn.isVisible()) {
|
|
117
|
-
await rejectTxsBtn.click();
|
|
118
|
-
await this.page.locator('button:has-text("Reject all")').click();
|
|
119
|
-
}
|
|
120
|
-
else
|
|
121
|
-
await this.rejectTx(this.page);
|
|
122
|
-
}
|
|
123
65
|
async firstTimeSetup() {
|
|
124
66
|
await test_2.test.step('First time setup', async () => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
await
|
|
133
|
-
await
|
|
134
|
-
|
|
135
|
-
const seedWords = this.config.SECRET_PHRASE.split(' ');
|
|
136
|
-
for (let i = 0; i < seedWords.length; i++) {
|
|
137
|
-
await inputs.nth(i).fill(seedWords[i]);
|
|
138
|
-
}
|
|
139
|
-
await this.page.click('data-testid=import-srp-confirm');
|
|
140
|
-
await this.page.fill('data-testid=create-password-new', this.config.PASSWORD);
|
|
141
|
-
await this.page.fill('data-testid=create-password-confirm', this.config.PASSWORD);
|
|
142
|
-
await this.page.click('data-testid=create-password-terms');
|
|
143
|
-
await this.page.click('data-testid=create-password-import');
|
|
144
|
-
await this.page.getByTestId('onboarding-complete-done').click();
|
|
145
|
-
await this.page.getByTestId('pin-extension-next').click();
|
|
146
|
-
await this.page.getByTestId('pin-extension-done').click();
|
|
67
|
+
const onboardingPage = new elements_1.OnboardingElement(this.page);
|
|
68
|
+
await onboardingPage.confirmTermsOfOnboarding();
|
|
69
|
+
await onboardingPage.importWalletButton.click();
|
|
70
|
+
await onboardingPage.metricAgreeButton.click();
|
|
71
|
+
await onboardingPage.fillSecretPhrase(this.config.SECRET_PHRASE);
|
|
72
|
+
await onboardingPage.secretPhraseImportButton.click();
|
|
73
|
+
await onboardingPage.createPassword(this.config.PASSWORD);
|
|
74
|
+
await onboardingPage.completeButton.click();
|
|
75
|
+
await onboardingPage.pinExtensionNextButton.click();
|
|
76
|
+
await onboardingPage.pinExtensionDoneButton.click();
|
|
147
77
|
await this.page.waitForURL('**/home.html#');
|
|
148
78
|
await this.closePopover();
|
|
149
79
|
});
|
|
150
80
|
}
|
|
151
81
|
async changeNetwork(networkName) {
|
|
152
82
|
await test_2.test.step(`Change Metamask network to ${networkName}`, async () => {
|
|
153
|
-
if (!this.page)
|
|
154
|
-
throw "Page isn't ready";
|
|
155
83
|
await this.navigate();
|
|
156
|
-
await this.
|
|
157
|
-
await this.
|
|
84
|
+
await this.header.networkListButton.click();
|
|
85
|
+
await this.networkList.clickToNetwork(networkName);
|
|
158
86
|
//Linea network require additional confirmation
|
|
159
87
|
if (networkName === 'Linea Mainnet') {
|
|
160
88
|
await this.closePopover();
|
|
@@ -164,46 +92,39 @@ class MetamaskPage {
|
|
|
164
92
|
}
|
|
165
93
|
async switchNetwork(networkName = 'Linea Mainnet') {
|
|
166
94
|
await this.navigate();
|
|
167
|
-
await this.
|
|
168
|
-
await this.
|
|
169
|
-
await this.
|
|
95
|
+
await this.header.networkListButton.click();
|
|
96
|
+
await this.networkList.clickToNetwork(networkName);
|
|
97
|
+
await this.popoverElements.gotItButton.click();
|
|
170
98
|
await this.page.close();
|
|
171
99
|
}
|
|
172
100
|
async setupNetwork(standConfig) {
|
|
173
|
-
const
|
|
174
|
-
if (!
|
|
175
|
-
await this.
|
|
176
|
-
const networkListText = await this.getNetworkListText();
|
|
101
|
+
const currentNetwork = await this.header.getCurrentNetworkName();
|
|
102
|
+
if (!currentNetwork.includes(standConfig.chainName)) {
|
|
103
|
+
await this.header.networkListButton.click();
|
|
104
|
+
const networkListText = await this.networkList.getNetworkListText();
|
|
177
105
|
if (networkListText.includes(standConfig.chainName)) {
|
|
178
|
-
await this.
|
|
106
|
+
await this.networkList.clickToNetworkItemButton(standConfig.chainName);
|
|
179
107
|
}
|
|
180
108
|
else {
|
|
181
|
-
await this.networkDisplayCloseBtn.click();
|
|
109
|
+
await this.networkList.networkDisplayCloseBtn.click();
|
|
182
110
|
await this.addNetwork(standConfig.chainName, standConfig.rpcUrl, standConfig.chainId, standConfig.tokenSymbol, standConfig.scan);
|
|
183
111
|
}
|
|
184
112
|
}
|
|
185
113
|
}
|
|
186
|
-
async getNetworkListText() {
|
|
187
|
-
const networkList = await this.networkItemText.all();
|
|
188
|
-
return Promise.all(networkList.map(async (networkType) => {
|
|
189
|
-
return await networkType.textContent();
|
|
190
|
-
}));
|
|
191
|
-
}
|
|
192
114
|
async addNetwork(networkName, networkUrl, chainId, tokenSymbol, blockExplorer = '') {
|
|
193
115
|
await test_2.test.step('Add network', async () => {
|
|
194
|
-
await this.
|
|
195
|
-
await this.
|
|
196
|
-
await this.
|
|
197
|
-
await this.
|
|
198
|
-
await this.
|
|
199
|
-
await this.
|
|
200
|
-
await this.
|
|
201
|
-
await this.
|
|
202
|
-
await this.page.fill('[data-testid="network-form-ticker-input"]', tokenSymbol);
|
|
116
|
+
await this.settingsPage.openSettings();
|
|
117
|
+
await this.settingsPage.networksTabButton.click();
|
|
118
|
+
await this.settingsPage.addNetworkButton.click();
|
|
119
|
+
await this.settingsPage.addNetworkManuallyButton.click();
|
|
120
|
+
await this.settingsPage.networkNameInput.fill(networkName);
|
|
121
|
+
await this.settingsPage.networkRpcUrlInput.fill(networkUrl);
|
|
122
|
+
await this.settingsPage.networkChainIdInput.fill(String(chainId));
|
|
123
|
+
await this.settingsPage.networkTickerInput.fill(tokenSymbol);
|
|
203
124
|
if (blockExplorer != '')
|
|
204
|
-
await this.
|
|
205
|
-
await this.
|
|
206
|
-
await this.
|
|
125
|
+
await this.settingsPage.networkExplorerUrlInput.fill(blockExplorer);
|
|
126
|
+
await this.settingsPage.saveNewTokenButton.click();
|
|
127
|
+
await this.popoverElements.switchToButton.click();
|
|
207
128
|
});
|
|
208
129
|
}
|
|
209
130
|
async importKey(key) {
|
|
@@ -215,19 +136,20 @@ class MetamaskPage {
|
|
|
215
136
|
do {
|
|
216
137
|
await this.page.reload();
|
|
217
138
|
await this.closePopover();
|
|
218
|
-
} while (!(await this.
|
|
219
|
-
await this.
|
|
220
|
-
await this.
|
|
221
|
-
await this.
|
|
222
|
-
await this.
|
|
223
|
-
await this.
|
|
139
|
+
} while (!(await this.header.accountMenuButton.isVisible()));
|
|
140
|
+
await this.header.accountMenuButton.click();
|
|
141
|
+
await this.accountMenu.addAccountOrHardwareWalletButton.click();
|
|
142
|
+
await this.accountMenu.importAccountButton.click();
|
|
143
|
+
await this.accountMenu.privateKeyInput.fill(key);
|
|
144
|
+
await this.accountMenu.importAccountConfirmButton.click();
|
|
224
145
|
});
|
|
225
146
|
}
|
|
226
147
|
async connectWallet(page) {
|
|
227
148
|
await test_2.test.step('Connect wallet', async () => {
|
|
149
|
+
const operationPage = new elements_1.OperationActions(page);
|
|
228
150
|
await page.click('text=Next');
|
|
229
|
-
await
|
|
230
|
-
await page.close();
|
|
151
|
+
await operationPage.nextButton.click();
|
|
152
|
+
await operationPage.page.close();
|
|
231
153
|
});
|
|
232
154
|
}
|
|
233
155
|
async assertTxAmount(page, expectedAmount) {
|
|
@@ -237,36 +159,36 @@ class MetamaskPage {
|
|
|
237
159
|
}
|
|
238
160
|
async confirmAddTokenToWallet(confirmPage) {
|
|
239
161
|
await test_2.test.step('Confirm add token to wallet', async () => {
|
|
240
|
-
|
|
162
|
+
const operationPage = new elements_1.OperationActions(confirmPage);
|
|
163
|
+
await operationPage.addTokenButton.click();
|
|
241
164
|
});
|
|
242
165
|
}
|
|
243
166
|
async openLastTxInEthplorer(txIndex = 0) {
|
|
244
167
|
if (!this.page)
|
|
245
168
|
throw "Page isn't ready";
|
|
246
169
|
await this.navigate();
|
|
247
|
-
await this.
|
|
248
|
-
await this.
|
|
249
|
-
const [
|
|
250
|
-
|
|
251
|
-
|
|
170
|
+
await this.mainPage.openActivityTab();
|
|
171
|
+
await this.mainPage.activityList.nth(txIndex).click();
|
|
172
|
+
const [etherscanPage] = await Promise.all([
|
|
173
|
+
this.page.context().waitForEvent('page', { timeout: 10000 }),
|
|
174
|
+
this.mainPage.transactionExplorerButton.click(),
|
|
252
175
|
]);
|
|
253
176
|
return etherscanPage;
|
|
254
177
|
}
|
|
255
178
|
async getTokenBalance(tokenName) {
|
|
256
179
|
await this.navigate();
|
|
257
|
-
|
|
258
|
-
.getByTestId('home__asset-tab')
|
|
259
|
-
.locator('text=Tokens');
|
|
260
|
-
await tokenTab.click();
|
|
180
|
+
await this.mainPage.openTokensTab();
|
|
261
181
|
//Cannot find locator by exact text since need to find row by text "stETH"/"ETH" but "stETH" contains "ETH"
|
|
262
|
-
const
|
|
182
|
+
const tokensValue = await this.mainPage.tokensListItemValues.all();
|
|
263
183
|
let tokenBalance = NaN;
|
|
264
|
-
for (const
|
|
265
|
-
await
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
184
|
+
for (const value of tokensValue) {
|
|
185
|
+
await value.waitFor({ state: 'visible' });
|
|
186
|
+
const tokenNameFromValue = (await value.textContent())
|
|
187
|
+
.match(/[a-zA-Z]+/g)
|
|
188
|
+
.toString()
|
|
189
|
+
.trim();
|
|
190
|
+
if (tokenNameFromValue === tokenName) {
|
|
191
|
+
tokenBalance = parseFloat(await value.textContent());
|
|
270
192
|
break;
|
|
271
193
|
}
|
|
272
194
|
}
|
|
@@ -274,71 +196,48 @@ class MetamaskPage {
|
|
|
274
196
|
}
|
|
275
197
|
async confirmTx(page, setAggressiveGas) {
|
|
276
198
|
await test_2.test.step('Confirm TX', async () => {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
await page.mouse.move(1, 1);
|
|
280
|
-
await page.click('button[data-testid="edit-gas-fee-item-high"]');
|
|
281
|
-
}
|
|
282
|
-
await page.getByTestId('page-container-footer-next').click();
|
|
199
|
+
const operationPage = new elements_1.OperationActions(page);
|
|
200
|
+
await operationPage.confirmTransaction(setAggressiveGas);
|
|
283
201
|
});
|
|
284
202
|
}
|
|
285
203
|
async signTx(page) {
|
|
286
204
|
await test_2.test.step('Sign TX', async () => {
|
|
287
|
-
|
|
288
|
-
await
|
|
205
|
+
const operationPage = new elements_1.OperationActions(page);
|
|
206
|
+
await operationPage.signTransaction();
|
|
289
207
|
});
|
|
290
208
|
}
|
|
291
209
|
async rejectTx(page) {
|
|
292
210
|
await test_2.test.step('Reject TX', async () => {
|
|
293
|
-
|
|
211
|
+
const operationPage = new elements_1.OperationActions(page);
|
|
212
|
+
await operationPage.cancelTransaction();
|
|
294
213
|
});
|
|
295
214
|
}
|
|
296
215
|
async approveTokenTx(page) {
|
|
297
216
|
await test_2.test.step('Approve token tx', async () => {
|
|
298
|
-
|
|
299
|
-
await
|
|
300
|
-
await page.waitForTimeout(2000);
|
|
301
|
-
await page.click('text=Approve');
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
async useDefaultToApprove(page) {
|
|
305
|
-
await test_2.test.step('Click "Use default" button in case if it exist', async () => {
|
|
306
|
-
if (!page)
|
|
307
|
-
throw "Page isn't ready";
|
|
308
|
-
const useDefaultButton = (await page.locator('text=Use default').count()) > 0;
|
|
309
|
-
if (useDefaultButton)
|
|
310
|
-
await page.click('text=Use default');
|
|
217
|
+
const operationPage = new elements_1.OperationActions(page);
|
|
218
|
+
await operationPage.confirmTransactionOfTokenApproval();
|
|
311
219
|
});
|
|
312
220
|
}
|
|
313
221
|
async assertReceiptAddress(page, expectedAddress) {
|
|
314
222
|
await test_2.test.step('Assert receiptAddress/Contract', async () => {
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
await this.page.waitForTimeout(500);
|
|
318
|
-
}
|
|
319
|
-
await recipient.click();
|
|
320
|
-
const recipientAddress = await page
|
|
321
|
-
.locator('input[id="address"]')
|
|
322
|
-
.getAttribute('value');
|
|
323
|
-
await page.click('button[aria-label="Close"]');
|
|
223
|
+
const operationAction = new elements_1.OperationActions(page);
|
|
224
|
+
const recipientAddress = await operationAction.assertReceiptAddress();
|
|
324
225
|
(0, test_1.expect)(recipientAddress).toBe(expectedAddress);
|
|
325
226
|
});
|
|
326
227
|
}
|
|
327
228
|
async getWalletAddress() {
|
|
328
229
|
await this.navigate();
|
|
329
|
-
await this.
|
|
330
|
-
await this.
|
|
331
|
-
const address = await this.
|
|
332
|
-
.locator("button[data-testid='address-copy-button-text']")
|
|
333
|
-
.textContent();
|
|
230
|
+
await this.header.optionsMenuButton.click();
|
|
231
|
+
await this.optionsMenu.menuAccountDetailsButton.click();
|
|
232
|
+
const address = await this.popoverElements.accountDetailCopyAddressButton.textContent();
|
|
334
233
|
await this.page.close();
|
|
335
234
|
return address;
|
|
336
235
|
}
|
|
337
236
|
async changeWalletAddress(addressName) {
|
|
338
237
|
await this.navigate();
|
|
339
|
-
await this.
|
|
340
|
-
await this.
|
|
341
|
-
const accountNumber = this.
|
|
238
|
+
await this.header.accountMenuButton.click();
|
|
239
|
+
await this.accountMenu.clickToAddress(addressName);
|
|
240
|
+
const accountNumber = this.header.accountMenuButton.getByText(addressName);
|
|
342
241
|
await accountNumber.waitFor({ state: 'visible', timeout: 2000 });
|
|
343
242
|
await this.page.waitForTimeout(2000);
|
|
344
243
|
await this.page.close();
|