@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.
Files changed (58) hide show
  1. package/dist/src/coin98/coin98.page.d.ts +1 -0
  2. package/dist/src/coin98/coin98.page.d.ts.map +1 -1
  3. package/dist/src/coin98/coin98.page.js +13 -5
  4. package/dist/src/coin98/coin98.page.js.map +1 -1
  5. package/dist/src/metamask/metamask.page.d.ts +12 -13
  6. package/dist/src/metamask/metamask.page.d.ts.map +1 -1
  7. package/dist/src/metamask/metamask.page.js +103 -204
  8. package/dist/src/metamask/metamask.page.js.map +1 -1
  9. package/dist/src/metamask/pages/elements/accountMenu.element.d.ts +12 -0
  10. package/dist/src/metamask/pages/elements/accountMenu.element.d.ts.map +1 -0
  11. package/dist/src/metamask/pages/elements/accountMenu.element.js +20 -0
  12. package/dist/src/metamask/pages/elements/accountMenu.element.js.map +1 -0
  13. package/dist/src/metamask/pages/elements/header.element.d.ts +11 -0
  14. package/dist/src/metamask/pages/elements/header.element.d.ts.map +1 -0
  15. package/dist/src/metamask/pages/elements/header.element.js +17 -0
  16. package/dist/src/metamask/pages/elements/header.element.js.map +1 -0
  17. package/dist/src/metamask/pages/elements/index.d.ts +8 -0
  18. package/dist/src/metamask/pages/elements/index.d.ts.map +1 -0
  19. package/dist/src/metamask/pages/elements/index.js +24 -0
  20. package/dist/src/metamask/pages/elements/index.js.map +1 -0
  21. package/dist/src/metamask/pages/elements/networkList.element.d.ts +13 -0
  22. package/dist/src/metamask/pages/elements/networkList.element.d.ts.map +1 -0
  23. package/dist/src/metamask/pages/elements/networkList.element.js +29 -0
  24. package/dist/src/metamask/pages/elements/networkList.element.js.map +1 -0
  25. package/dist/src/metamask/pages/elements/onboarding.element.d.ts +21 -0
  26. package/dist/src/metamask/pages/elements/onboarding.element.d.ts.map +1 -0
  27. package/dist/src/metamask/pages/elements/onboarding.element.js +40 -0
  28. package/dist/src/metamask/pages/elements/onboarding.element.js.map +1 -0
  29. package/dist/src/metamask/pages/elements/operationActions.element.d.ts +23 -0
  30. package/dist/src/metamask/pages/elements/operationActions.element.d.ts.map +1 -0
  31. package/dist/src/metamask/pages/elements/operationActions.element.js +76 -0
  32. package/dist/src/metamask/pages/elements/operationActions.element.js.map +1 -0
  33. package/dist/src/metamask/pages/elements/optionsMenu.element.d.ts +9 -0
  34. package/dist/src/metamask/pages/elements/optionsMenu.element.d.ts.map +1 -0
  35. package/dist/src/metamask/pages/elements/optionsMenu.element.js +13 -0
  36. package/dist/src/metamask/pages/elements/optionsMenu.element.js.map +1 -0
  37. package/dist/src/metamask/pages/elements/popover.element.d.ts +14 -0
  38. package/dist/src/metamask/pages/elements/popover.element.d.ts.map +1 -0
  39. package/dist/src/metamask/pages/elements/popover.element.js +29 -0
  40. package/dist/src/metamask/pages/elements/popover.element.js.map +1 -0
  41. package/dist/src/metamask/pages/index.d.ts +4 -0
  42. package/dist/src/metamask/pages/index.d.ts.map +1 -0
  43. package/dist/src/metamask/pages/index.js +20 -0
  44. package/dist/src/metamask/pages/index.js.map +1 -0
  45. package/dist/src/metamask/pages/login.page.d.ts +11 -0
  46. package/dist/src/metamask/pages/login.page.d.ts.map +1 -0
  47. package/dist/src/metamask/pages/login.page.js +25 -0
  48. package/dist/src/metamask/pages/login.page.js.map +1 -0
  49. package/dist/src/metamask/pages/main.page.d.ts +20 -0
  50. package/dist/src/metamask/pages/main.page.d.ts.map +1 -0
  51. package/dist/src/metamask/pages/main.page.js +39 -0
  52. package/dist/src/metamask/pages/main.page.js.map +1 -0
  53. package/dist/src/metamask/pages/settings.page.d.ts +24 -0
  54. package/dist/src/metamask/pages/settings.page.d.ts.map +1 -0
  55. package/dist/src/metamask/pages/settings.page.js +50 -0
  56. package/dist/src/metamask/pages/settings.page.js.map +1 -0
  57. package/dist/tsconfig.tsbuildinfo +1 -1
  58. 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;IAYR,KAAK,CAAC,OAAO,EAAE,MAAM;IASrB,cAAc,CAAC,OAAO,EAAE,MAAM;IAyB9B,SAAS,CAAC,GAAG,EAAE,MAAM;IAcrB,aAAa,CAAC,IAAI,EAAE,IAAI;IAaxB,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;CAC/F"}
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":"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"}
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, Locator } from '@playwright/test';
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
- networkDisplay: Locator;
10
- networkDisplayDialog: Locator;
11
- networkDisplayCloseBtn: Locator;
12
- networkItemBtn: Locator;
13
- networkItemText: Locator;
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;AAEvE,qBAAa,YAAa,YAAW,UAAU;IAS3C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACb,MAAM,EAAE,YAAY;IAV7B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;gBAGf,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,MAAM,EACrB,MAAM,EAAE,YAAY;IAGvB,YAAY;IAYZ,QAAQ;IAkBR,YAAY;IAIZ,KAAK;IAWL,MAAM;IAYN,YAAY,CAAC,KAAK,EAAE,MAAM;IAU1B,gBAAgB;IAUhB,YAAY;IA4BZ,kBAAkB;IAmBlB,cAAc;IAoCd,aAAa,CAAC,WAAW,EAAE,MAAM;IAgBjC,aAAa,CAAC,WAAW,SAAkB;IAQ3C,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAsB7C,kBAAkB;IASlB,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,aAAa,SAAK;IAkCd,SAAS,CAAC,GAAG,EAAE,MAAM;IAiBrB,aAAa,CAAC,IAAI,EAAE,IAAI;IAQxB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM;IAQjD,uBAAuB,CAAC,WAAW,EAAE,IAAI;IAKzC,qBAAqB,CAAC,OAAO,SAAI;IAYjC,eAAe,CAAC,SAAS,EAAE,MAAM;IAuBjC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,OAAO;IAWhD,MAAM,CAAC,IAAI,EAAE,IAAI;IAOjB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAMnB,cAAc,CAAC,IAAI,EAAE,IAAI;IASzB,mBAAmB,CAAC,IAAI,EAAE,IAAI;IAS9B,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM;IAgBxD,gBAAgB;IAWhB,mBAAmB,CAAC,WAAW,EAAE,MAAM;CAW9C"}
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.networkDisplay = this.page.getByTestId('network-display');
14
- this.networkDisplayDialog = this.page.locator('[role = "dialog"]');
15
- this.networkDisplayCloseBtn = this.networkDisplayDialog
16
- .locator('[aria-label="Close"]')
17
- .first();
18
- this.networkItemBtn =
19
- this.networkDisplayDialog.locator('div[role="button"]');
20
- this.networkItemText = this.networkItemBtn.locator('p');
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.page.goto(this.extensionUrl + this.config.COMMON.EXTENSION_START_PATH, { waitUntil: 'load' });
27
- await this.page
28
- .locator('button[data-testid="app-header-logo"]')
29
- .waitFor({ state: 'visible' });
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.page)
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.page.getByTestId('popover-close').click();
88
- }
89
- if (await this.page
90
- .locator('button:has-text("Manage in settings")')
91
- .isVisible()) {
92
- await this.page
93
- .locator('button:has-text("Manage in settings")')
94
- .click();
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
- if (!this.page)
126
- throw "Page isn't ready";
127
- const checkbox = this.page.getByTestId('onboarding-terms-checkbox');
128
- while (!(await this.page.locator('.check-box__checked').isVisible())) {
129
- console.log('Checkbox is not checked');
130
- await checkbox.click();
131
- }
132
- await this.page.click('data-testid=onboarding-import-wallet');
133
- await this.page.click('data-testid=metametrics-i-agree');
134
- const inputs = this.page.locator('.import-srp__srp-word >> input[type=password]');
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.page.click('data-testid=network-display');
157
- await this.page.locator('section').getByText(networkName).click();
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.page.getByTestId('network-display').click();
168
- await this.page.getByText(networkName).click();
169
- await this.page.getByText('Got it').click();
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 networkDisplayText = await this.networkDisplay.textContent();
174
- if (!networkDisplayText.includes(standConfig.chainName)) {
175
- await this.networkDisplay.click();
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.networkItemBtn.getByText(standConfig.chainName).click();
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.page.click('data-testid=account-options-menu-button');
195
- await this.page.click('text=Settings');
196
- await this.page.click("text='Networks'");
197
- await this.page.click('text=Add a network');
198
- await this.page.click("a :has-text('Add a network manually')");
199
- await this.page.fill(".form-field :has-text('Network Name') >> input", networkName);
200
- await this.page.fill(".form-field :has-text('New RPC URL') >> input", networkUrl);
201
- await this.page.fill(".form-field :has-text('Chain ID') >> input", String(chainId));
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.page.fill(".form-field :has-text('Block explorer URL') >> input", blockExplorer);
205
- await this.page.click('text=Save');
206
- await this.page.click('text=Switch to ');
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.page.getByTestId('account-menu-icon').isVisible()));
219
- await this.page.click('data-testid=account-menu-icon');
220
- await this.page.click('text=Add account or hardware wallet');
221
- await this.page.click('text=Import account');
222
- await this.page.fill('id=private-key-box', key);
223
- await this.page.click("text='Import'");
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 page.click('data-testid=page-container-footer-next');
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
- await confirmPage.locator('button:has-text("Add token")').click();
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.goToActivity();
248
- await this.page.getByTestId('activity-list-item').nth(txIndex).click();
249
- const [, etherscanPage] = await Promise.all([
250
- await this.page.locator('text=View on block explorer').click(),
251
- await this.page.context().waitForEvent('page', { timeout: 120000 }),
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
- const tokenTab = await this.page
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 elements = await this.page.$$('data-testid=multichain-token-list-item-value');
182
+ const tokensValue = await this.mainPage.tokensListItemValues.all();
263
183
  let tokenBalance = NaN;
264
- for (const element of elements) {
265
- await element.waitForElementState('visible');
266
- const textContent = await element.textContent();
267
- const letterTextContent = textContent.match(/[a-zA-Z]+/g);
268
- if (letterTextContent.toString().trim() === tokenName) {
269
- tokenBalance = parseFloat(await element.textContent());
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
- if (setAggressiveGas) {
278
- await page.click('button[data-testid="edit-gas-fee-icon"]');
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
- await page.getByTestId('signature-request-scroll-button').click();
288
- await page.getByTestId('page-container-footer-next').click();
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
- await page.getByTestId('page-container-footer-cancel').click();
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
- await this.useDefaultToApprove(page);
299
- await page.click('text=Next');
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 recipient = page.locator('.sender-to-recipient__party--recipient-with-address');
316
- while (!(await recipient.isEnabled())) {
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.page.getByTestId('account-options-menu-button').click();
330
- await this.page.getByTestId('account-list-menu-details').click();
331
- const address = await this.page
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.page.click('data-testid=account-menu-icon');
340
- await this.page.click(`section:has-text("${addressName}")`);
341
- const accountNumber = this.page.locator(`button[data-testid="account-menu-icon"]:has-text("${addressName}")`);
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();