@smartbit4all/playwright-qa 0.1.11 → 0.2.0

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/README.md +47 -0
  2. package/dist/basedata/hash.d.ts +2 -0
  3. package/dist/basedata/hash.d.ts.map +1 -0
  4. package/dist/basedata/hash.js +23 -0
  5. package/dist/basedata/hash.js.map +1 -0
  6. package/dist/basedata/history.d.ts +10 -0
  7. package/dist/basedata/history.d.ts.map +1 -0
  8. package/dist/basedata/history.js +144 -0
  9. package/dist/basedata/history.js.map +1 -0
  10. package/dist/basedata/index.d.ts +6 -0
  11. package/dist/basedata/index.d.ts.map +1 -0
  12. package/dist/basedata/index.js +16 -0
  13. package/dist/basedata/index.js.map +1 -0
  14. package/dist/basedata/loader.d.ts +12 -0
  15. package/dist/basedata/loader.d.ts.map +1 -0
  16. package/dist/basedata/loader.js +230 -0
  17. package/dist/basedata/loader.js.map +1 -0
  18. package/dist/basedata/processors/basic-screen.d.ts +31 -0
  19. package/dist/basedata/processors/basic-screen.d.ts.map +1 -0
  20. package/dist/basedata/processors/basic-screen.js +128 -0
  21. package/dist/basedata/processors/basic-screen.js.map +1 -0
  22. package/dist/basedata/registry.d.ts +11 -0
  23. package/dist/basedata/registry.d.ts.map +1 -0
  24. package/dist/basedata/registry.js +50 -0
  25. package/dist/basedata/registry.js.map +1 -0
  26. package/dist/basedata/runner.d.ts +3 -0
  27. package/dist/basedata/runner.d.ts.map +1 -0
  28. package/dist/basedata/runner.js +324 -0
  29. package/dist/basedata/runner.js.map +1 -0
  30. package/dist/basedata/types.d.ts +161 -0
  31. package/dist/basedata/types.d.ts.map +1 -0
  32. package/dist/basedata/types.js +3 -0
  33. package/dist/basedata/types.js.map +1 -0
  34. package/dist/steps/actions.d.ts +23 -0
  35. package/dist/steps/actions.d.ts.map +1 -0
  36. package/dist/steps/actions.js +106 -0
  37. package/dist/steps/actions.js.map +1 -0
  38. package/dist/steps/forms.d.ts +6 -0
  39. package/dist/steps/forms.d.ts.map +1 -1
  40. package/dist/steps/forms.js +13 -0
  41. package/dist/steps/forms.js.map +1 -1
  42. package/dist/steps/grid.steps.d.ts +2 -2
  43. package/dist/steps/grid.steps.d.ts.map +1 -1
  44. package/dist/steps/grid.steps.js +14 -4
  45. package/dist/steps/grid.steps.js.map +1 -1
  46. package/dist/steps/index.d.ts +2 -1
  47. package/dist/steps/index.d.ts.map +1 -1
  48. package/dist/steps/index.js +6 -1
  49. package/dist/steps/index.js.map +1 -1
  50. package/dist/steps/locators.d.ts +19 -4
  51. package/dist/steps/locators.d.ts.map +1 -1
  52. package/dist/steps/locators.js +24 -6
  53. package/dist/steps/locators.js.map +1 -1
  54. package/dist/steps/navigation.steps.d.ts +1 -1
  55. package/dist/steps/navigation.steps.d.ts.map +1 -1
  56. package/dist/steps/navigation.steps.js +13 -8
  57. package/dist/steps/navigation.steps.js.map +1 -1
  58. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA;AAE3B,2CASsB;AARpB,2GAAA,aAAa,OAAA;AACb,0GAAA,YAAY,OAAA;AACZ,iHAAA,mBAAmB,OAAA;AACnB,8GAAA,gBAAgB,OAAA;AAChB,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AAIlB,uDAG4B;AAF1B,kHAAA,cAAc,OAAA;AACd,kHAAA,cAAc,OAAA;AAGhB,+CAGwB;AAFtB,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AAGf,uCAIoB;AAHlB,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AAGd,iCAiBiB;AAhBf,kGAAA,SAAS,OAAA;AACT,iGAAA,QAAQ,OAAA;AACR,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AACd,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AAIX,iCAIiB;AAHf,gGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAAnC,0GAAA,kBAAkB,OAAA;AAE3B,2CASsB;AARpB,2GAAA,aAAa,OAAA;AACb,0GAAA,YAAY,OAAA;AACZ,iHAAA,mBAAmB,OAAA;AACnB,8GAAA,gBAAgB,OAAA;AAChB,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AAIlB,uDAG4B;AAF1B,kHAAA,cAAc,OAAA;AACd,kHAAA,cAAc,OAAA;AAGhB,+CAGwB;AAFtB,yGAAA,SAAS,OAAA;AACT,6GAAA,aAAa,OAAA;AAGf,uCAMoB;AALlB,sGAAA,UAAU,OAAA;AACV,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,gHAAA,oBAAoB,OAAA;AACpB,iHAAA,qBAAqB,OAAA;AAGvB,qCAGmB;AAFjB,sGAAA,WAAW,OAAA;AACX,yGAAA,cAAc,OAAA;AAGhB,iCAiBiB;AAhBf,kGAAA,SAAS,OAAA;AACT,iGAAA,QAAQ,OAAA;AACR,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AACd,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,kGAAA,SAAS,OAAA;AACT,gGAAA,OAAO,OAAA;AACP,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,mGAAA,UAAU,OAAA;AACV,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AAIX,iCAIiB;AAHf,gGAAA,OAAO,OAAA"}
@@ -5,15 +5,30 @@ import type { Locator, Page } from '@playwright/test';
5
5
  */
6
6
  export declare function findButton(container: Locator | Page, text: string): Locator;
7
7
  /**
8
- * Finds the currently visible popup menu panel (Angular Material or PrimeNG).
8
+ * Finds the currently visible popup menu panel.
9
+ *
10
+ * Supports three menu implementations:
11
+ * - the smartbit4all custom menu (`.sb4-menu-panel`, a CDK overlay `ui-tiered-menu`) — used by
12
+ * grid/table action menus since ng-client 4.5.45 / 6.0.11 (issue #29411);
13
+ * - legacy Angular Material menus (`.mat-mdc-menu-panel`) — still used by tree, navbar, filter, etc.;
14
+ * - legacy PrimeNG menus (`.p-menu`, `.p-tieredmenu`, `.p-contextmenu`).
9
15
  */
16
+ /** Selector matching any open popup menu panel (Custom, Material or PrimeNG). */
17
+ export declare const POPUP_PANEL_SELECTOR = ".sb4-menu-panel, .mat-mdc-menu-panel, .p-menu-overlay, .p-tieredmenu-overlay, .p-contextmenu, .p-menu.p-component";
18
+ /** Selector matching a Custom menu panel — the only implementation that renders submenus. */
19
+ export declare const CUSTOM_PANEL_SELECTOR = ".sb4-menu-panel";
10
20
  export declare function findPopupMenu(page: Page): Locator;
11
21
  /**
12
22
  * Finds a menu item by data-testid / data-automationid first, falling back to visible text.
13
- * Supports Angular Material (.mat-mdc-menu-panel) and PrimeNG (.p-menu, .p-tieredmenu, .p-contextmenu) menus.
14
23
  *
15
- * PrimeNG MenuItem does not expose data-testid — only `menuItem.automationId`, which renders as
16
- * the `data-automationid` DOM attribute. Material menu items keep using data-testid.
24
+ * Supports three menu implementations:
25
+ * - smartbit4all custom menu (`.sb4-menu-panel`): every item is a `ui-action-button` rendered as
26
+ * `<button data-testid="{action code}">`, in both the Material and PrimeNG component libraries
27
+ * (only the button's own attributes differ). The `text` matches the action code (data-testid) or
28
+ * the visible title. Used by grid/table action menus since #29411.
29
+ * - Angular Material (`.mat-mdc-menu-panel`): `<button mat-menu-item data-testid>`.
30
+ * - PrimeNG (`.p-menu`, `.p-tieredmenu`, `.p-contextmenu`): items expose `menuItem.automationId`
31
+ * as the `data-automationid` DOM attribute (no data-testid).
17
32
  */
18
33
  export declare function findMenuItem(page: Page, text: string): Locator;
19
34
  //# sourceMappingURL=locators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locators.d.ts","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO9D"}
1
+ {"version":3,"file":"locators.d.ts","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;;;;;GAQG;AACH,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,sHACoF,CAAC;AAEtH,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAS9D"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CUSTOM_PANEL_SELECTOR = exports.POPUP_PANEL_SELECTOR = void 0;
3
4
  exports.findButton = findButton;
4
5
  exports.findPopupMenu = findPopupMenu;
5
6
  exports.findMenuItem = findMenuItem;
@@ -11,24 +12,41 @@ function findButton(container, text) {
11
12
  return container.locator(`button[data-testid="${text}"], button:has-text("${text}")`).first();
12
13
  }
13
14
  /**
14
- * Finds the currently visible popup menu panel (Angular Material or PrimeNG).
15
+ * Finds the currently visible popup menu panel.
16
+ *
17
+ * Supports three menu implementations:
18
+ * - the smartbit4all custom menu (`.sb4-menu-panel`, a CDK overlay `ui-tiered-menu`) — used by
19
+ * grid/table action menus since ng-client 4.5.45 / 6.0.11 (issue #29411);
20
+ * - legacy Angular Material menus (`.mat-mdc-menu-panel`) — still used by tree, navbar, filter, etc.;
21
+ * - legacy PrimeNG menus (`.p-menu`, `.p-tieredmenu`, `.p-contextmenu`).
15
22
  */
23
+ /** Selector matching any open popup menu panel (Custom, Material or PrimeNG). */
24
+ exports.POPUP_PANEL_SELECTOR = '.sb4-menu-panel, .mat-mdc-menu-panel, .p-menu-overlay, .p-tieredmenu-overlay, .p-contextmenu, .p-menu.p-component';
25
+ /** Selector matching a Custom menu panel — the only implementation that renders submenus. */
26
+ exports.CUSTOM_PANEL_SELECTOR = '.sb4-menu-panel';
16
27
  function findPopupMenu(page) {
17
- return page.locator('.mat-mdc-menu-panel, .p-menu-overlay, .p-tieredmenu-overlay, .p-contextmenu, .p-menu.p-component').last();
28
+ return page.locator(exports.POPUP_PANEL_SELECTOR).last();
18
29
  }
19
30
  /**
20
31
  * Finds a menu item by data-testid / data-automationid first, falling back to visible text.
21
- * Supports Angular Material (.mat-mdc-menu-panel) and PrimeNG (.p-menu, .p-tieredmenu, .p-contextmenu) menus.
22
32
  *
23
- * PrimeNG MenuItem does not expose data-testid — only `menuItem.automationId`, which renders as
24
- * the `data-automationid` DOM attribute. Material menu items keep using data-testid.
33
+ * Supports three menu implementations:
34
+ * - smartbit4all custom menu (`.sb4-menu-panel`): every item is a `ui-action-button` rendered as
35
+ * `<button data-testid="{action code}">`, in both the Material and PrimeNG component libraries
36
+ * (only the button's own attributes differ). The `text` matches the action code (data-testid) or
37
+ * the visible title. Used by grid/table action menus since #29411.
38
+ * - Angular Material (`.mat-mdc-menu-panel`): `<button mat-menu-item data-testid>`.
39
+ * - PrimeNG (`.p-menu`, `.p-tieredmenu`, `.p-contextmenu`): items expose `menuItem.automationId`
40
+ * as the `data-automationid` DOM attribute (no data-testid).
25
41
  */
26
42
  function findMenuItem(page, text) {
43
+ const sb4ByTestId = `.sb4-menu-panel button[data-testid="${text}"]`;
44
+ const sb4ByText = `.sb4-menu-panel button:has-text("${text}")`;
27
45
  const matByTestId = `.mat-mdc-menu-panel button.mat-mdc-menu-item[data-testid="${text}"]`;
28
46
  const matByText = `.mat-mdc-menu-panel button.mat-mdc-menu-item:has-text("${text}")`;
29
47
  const primeByTestId = `.p-menu-list [data-testid="${text}"], .p-menuitem [data-testid="${text}"]`;
30
48
  const primeByAutomationId = `.p-menu-list [data-automationid="${text}"], .p-menuitem [data-automationid="${text}"]`;
31
49
  const primeByText = `.p-menu-list .p-menuitem-link:has-text("${text}"), .p-menuitem-content:has-text("${text}")`;
32
- return page.locator(`${matByTestId}, ${matByText}, ${primeByTestId}, ${primeByAutomationId}, ${primeByText}`).first();
50
+ return page.locator(`${sb4ByTestId}, ${sb4ByText}, ${matByTestId}, ${matByText}, ${primeByTestId}, ${primeByAutomationId}, ${primeByText}`).first();
33
51
  }
34
52
  //# sourceMappingURL=locators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locators.js","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":";;AAMA,gCAEC;AAKD,sCAEC;AASD,oCAOC;AA7BD;;;GAGG;AACH,SAAgB,UAAU,CAAC,SAAyB,EAAE,IAAY;IAChE,OAAO,SAAS,CAAC,OAAO,CAAC,uBAAuB,IAAI,wBAAwB,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAChG,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAU;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,kGAAkG,CAAC,CAAC,IAAI,EAAE,CAAC;AACjI,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,IAAU,EAAE,IAAY;IACnD,MAAM,WAAW,GAAG,6DAA6D,IAAI,IAAI,CAAC;IAC1F,MAAM,SAAS,GAAG,0DAA0D,IAAI,IAAI,CAAC;IACrF,MAAM,aAAa,GAAG,8BAA8B,IAAI,iCAAiC,IAAI,IAAI,CAAC;IAClG,MAAM,mBAAmB,GAAG,oCAAoC,IAAI,uCAAuC,IAAI,IAAI,CAAC;IACpH,MAAM,WAAW,GAAG,2CAA2C,IAAI,qCAAqC,IAAI,IAAI,CAAC;IACjH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,KAAK,SAAS,KAAK,aAAa,KAAK,mBAAmB,KAAK,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACxH,CAAC"}
1
+ {"version":3,"file":"locators.js","sourceRoot":"","sources":["../../src/steps/locators.ts"],"names":[],"mappings":";;;AAMA,gCAEC;AAkBD,sCAEC;AAcD,oCASC;AAjDD;;;GAGG;AACH,SAAgB,UAAU,CAAC,SAAyB,EAAE,IAAY;IAChE,OAAO,SAAS,CAAC,OAAO,CAAC,uBAAuB,IAAI,wBAAwB,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAChG,CAAC;AAED;;;;;;;;GAQG;AACH,iFAAiF;AACpE,QAAA,oBAAoB,GAC/B,mHAAmH,CAAC;AAEtH,6FAA6F;AAChF,QAAA,qBAAqB,GAAG,iBAAiB,CAAC;AAEvD,SAAgB,aAAa,CAAC,IAAU;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,4BAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,IAAU,EAAE,IAAY;IACnD,MAAM,WAAW,GAAG,uCAAuC,IAAI,IAAI,CAAC;IACpE,MAAM,SAAS,GAAG,oCAAoC,IAAI,IAAI,CAAC;IAC/D,MAAM,WAAW,GAAG,6DAA6D,IAAI,IAAI,CAAC;IAC1F,MAAM,SAAS,GAAG,0DAA0D,IAAI,IAAI,CAAC;IACrF,MAAM,aAAa,GAAG,8BAA8B,IAAI,iCAAiC,IAAI,IAAI,CAAC;IAClG,MAAM,mBAAmB,GAAG,oCAAoC,IAAI,uCAAuC,IAAI,IAAI,CAAC;IACpH,MAAM,WAAW,GAAG,2CAA2C,IAAI,qCAAqC,IAAI,IAAI,CAAC;IACjH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,KAAK,SAAS,KAAK,WAAW,KAAK,SAAS,KAAK,aAAa,KAAK,mBAAmB,KAAK,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACtJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { Page } from '@playwright/test';
2
2
  export declare function navigateToMain(page: Page): Promise<void>;
3
- export declare function navigateInTree(page: Page, path: string[], action?: string | true): Promise<void>;
3
+ export declare function navigateInTree(page: Page, path: string[], action?: string | string[] | true): Promise<void>;
4
4
  //# sourceMappingURL=navigation.steps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.steps.d.ts","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI7C,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BtG"}
1
+ {"version":3,"file":"navigation.steps.d.ts","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAI7C,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjH"}
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.navigateToMain = navigateToMain;
4
4
  exports.navigateInTree = navigateInTree;
5
5
  const wait_1 = require("./wait");
6
- const locators_1 = require("./locators");
6
+ const actions_1 = require("./actions");
7
7
  async function navigateToMain(page) {
8
8
  await page.locator('div.logo').click();
9
- await page.waitForURL('**/main/**');
9
+ // Routing was removed from the app, so there is no '**/main/**' URL to wait for — the logo click
10
+ // swaps the active view in place. Settle on network idle instead.
10
11
  await (0, wait_1.waitForAngularIdle)(page);
11
12
  }
12
13
  async function navigateInTree(page, path, action) {
@@ -45,13 +46,15 @@ async function navigatePrimeTreeNode(page, label, select, action) {
45
46
  }
46
47
  else if (action) {
47
48
  await node.locator('.p-treenode-content button').click();
48
- await (0, locators_1.findMenuItem)(page, action).click();
49
- await (0, wait_1.waitForAngularIdle)(page);
49
+ await (0, actions_1.traverseOpenMenu)(page, Array.isArray(action) ? action : [action], true);
50
50
  }
51
51
  else if (select) {
52
+ // Best-effort route sync: apps with routing resolve fast on the URL change; route-less apps
53
+ // fall through after the short timeout (the `.catch` keeps it from hanging). Either way, network
54
+ // idle is the final completion signal.
52
55
  const urlBefore = page.url();
53
56
  await node.locator('.p-treenode-content').click();
54
- await page.waitForURL(url => url.toString() !== urlBefore, { timeout: 5000 }).catch(() => { });
57
+ await page.waitForURL(u => u.toString() !== urlBefore, { timeout: 1500 }).catch(() => { });
55
58
  await (0, wait_1.waitForAngularIdle)(page);
56
59
  }
57
60
  else {
@@ -75,13 +78,15 @@ async function navigateMatTreeNode(page, label, select, action) {
75
78
  }
76
79
  else if (action) {
77
80
  await node.locator('button').last().click();
78
- await (0, locators_1.findMenuItem)(page, action).click();
79
- await (0, wait_1.waitForAngularIdle)(page);
81
+ await (0, actions_1.traverseOpenMenu)(page, Array.isArray(action) ? action : [action], true);
80
82
  }
81
83
  else if (select) {
84
+ // Best-effort route sync: apps with routing resolve fast on the URL change; route-less apps
85
+ // fall through after the short timeout (the `.catch` keeps it from hanging). Either way, network
86
+ // idle is the final completion signal.
82
87
  const urlBefore = page.url();
83
88
  await node.locator('.sm-tree-row-caption').click();
84
- await page.waitForURL(url => url.toString() !== urlBefore, { timeout: 5000 }).catch(() => { });
89
+ await page.waitForURL(u => u.toString() !== urlBefore, { timeout: 1500 }).catch(() => { });
85
90
  await (0, wait_1.waitForAngularIdle)(page);
86
91
  }
87
92
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.steps.js","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.steps.js","sourceRoot":"","sources":["../../src/steps/navigation.steps.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartbit4all/playwright-qa",
3
- "version": "0.1.11",
3
+ "version": "0.2.0",
4
4
  "description": "Playwright-based testing and documentation framework for smartbit4all projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",