d5-testing-library 1.9.0-alpha.2 → 1.9.0-alpha.21

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.
@@ -250,6 +250,7 @@ interface Button {
250
250
  isDisabled(): Promise<boolean>;
251
251
  isDisplayed(): Promise<boolean>;
252
252
  getTitle(): Promise<string>;
253
+ isPressed(): Promise<boolean>;
253
254
  }
254
255
  declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
255
256
  protected constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
@@ -257,6 +258,7 @@ declare abstract class AbstractButton extends AbstractElementWithParent implemen
257
258
  click(): Promise<void>;
258
259
  isDisabled(): Promise<boolean>;
259
260
  isDisplayed(): Promise<boolean>;
261
+ isPressed(): Promise<boolean>;
260
262
  abstract getTitle(): Promise<string>;
261
263
  }
262
264
 
@@ -517,6 +519,7 @@ declare class ToolbarItem extends AbstractElementWithParent implements Button {
517
519
  click(): Promise<void>;
518
520
  isDisabled(): Promise<boolean>;
519
521
  isDisplayed(): Promise<boolean>;
522
+ isPressed(): Promise<boolean>;
520
523
  getTitle(): Promise<string>;
521
524
  get menu(): ToolbarMenu;
522
525
  }
@@ -581,7 +584,7 @@ declare class Row extends AbstractElementWithParent {
581
584
  getCellByIndex(index: number): Cell;
582
585
  getCell(name: string): Cell;
583
586
  getCellByTitle(title: string): Cell;
584
- select(): Promise<void>;
587
+ select(preserve?: boolean): Promise<void>;
585
588
  isSelected(): Promise<boolean>;
586
589
  getIndex(): number;
587
590
  getCells(): Promise<Cell[]>;
@@ -644,8 +647,15 @@ declare class Table extends AbstractElementWithParent {
644
647
  /**
645
648
  * Вибрати рядок по індексу.
646
649
  * @param index починається з 0
650
+ * @param preserve boolean який изначає, чи повинні раніше вибрані рядки залишатися вибраними
647
651
  */
648
- selectRowByIndex(index: number): Promise<void>;
652
+ selectRowByIndex(index: number, preserve?: boolean): Promise<void>;
653
+ /**
654
+ * Вибрати масив рядків по індексу.
655
+ * @param indexes починається з 0
656
+ */
657
+ selectRowsByIndexes(indexes: number[]): Promise<void>;
658
+ protected getRowElements(timeout?: number): Promise<selenium_webdriver.WebElement[]>;
649
659
  getRows(): Promise<Row[]>;
650
660
  getColumns(): Promise<Column[]>;
651
661
  element(): Promise<selenium_webdriver.WebElement>;
@@ -679,6 +689,54 @@ declare class Table extends AbstractElementWithParent {
679
689
  * await form.contextMenu('FieldName', 3).clickButton(['Group', 'ButtonInGroup']);
680
690
  */
681
691
  contextMenu(fieldName: string, rowIndex?: number): ContextMenu;
692
+ /**
693
+ * Отримує значення комірки таблиці за ім'ям комірки та індексом рядка.
694
+ *
695
+ * @param {string} cellName - Ім'я комірки (поля) в таблиці
696
+ * @param {number} rowIndex - Індекс рядка (починається з 0)
697
+ * @throws {Error} Викидає помилку, якщо rowIndex не вказано
698
+ * @returns {Promise<string>} Повертає значення комірки
699
+ *
700
+ * @example
701
+ * const table = new Table(driver);
702
+ *
703
+ * // Отримання значення комірки 'Name' в першому рядку (індекс 0)
704
+ * const cellValue = await table.getCellValueByCellName('Name', 0);
705
+ * expect(cellValue).toBe('Очікуване значення');
706
+ */
707
+ getCellValueByCellName(cellName: string, rowIndex: number): Promise<string | number | string[] | Date>;
708
+ /**
709
+ * Перевіряє, чи є таблиця порожньою (не містить жодного рядка з даними).
710
+ *
711
+ * @returns {Promise<boolean>} Повертає true, якщо таблиця порожня, false - якщо містить рядки
712
+ *
713
+ * @example
714
+ * const table = new Table(driver);
715
+ *
716
+ * // Перевірка чи порожня таблиця
717
+ * const empty = await table.isEmpty();
718
+ * expect(empty).toBe(true);
719
+ */
720
+ isEmpty(): Promise<boolean>;
721
+ /**
722
+ * Очікує, поки кількість рядків у таблиці не стане рівною заданому значенню.
723
+ * Використовується для синхронізації тестів з динамічним завантаженням даних.
724
+ *
725
+ * @param {number} count - Очікувана кількість рядків у таблиці
726
+ * @returns {Promise<void>} Повертає Promise, який виконується, коли кількість рядків відповідає очікуваній
727
+ * @throws {Error} Викидає помилку, якщо очікування перевищує тайм-аут
728
+ *
729
+ * @example
730
+ * const table = new Table(driver);
731
+ *
732
+ * // Очікування, поки таблиця не стане порожньою
733
+ * await table.waitRowsCount(0);
734
+ *
735
+ * // Очікування, поки в таблиці не з'явиться 5 рядків
736
+ * await table.waitRowsCount(5);
737
+ * console.log('Таблиця містить 5 рядків');
738
+ */
739
+ waitRowsCount(count: number): Promise<void>;
682
740
  }
683
741
 
684
742
  declare class FormFilterField extends AbstractEditor {
@@ -250,6 +250,7 @@ interface Button {
250
250
  isDisabled(): Promise<boolean>;
251
251
  isDisplayed(): Promise<boolean>;
252
252
  getTitle(): Promise<string>;
253
+ isPressed(): Promise<boolean>;
253
254
  }
254
255
  declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
255
256
  protected constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
@@ -257,6 +258,7 @@ declare abstract class AbstractButton extends AbstractElementWithParent implemen
257
258
  click(): Promise<void>;
258
259
  isDisabled(): Promise<boolean>;
259
260
  isDisplayed(): Promise<boolean>;
261
+ isPressed(): Promise<boolean>;
260
262
  abstract getTitle(): Promise<string>;
261
263
  }
262
264
 
@@ -517,6 +519,7 @@ declare class ToolbarItem extends AbstractElementWithParent implements Button {
517
519
  click(): Promise<void>;
518
520
  isDisabled(): Promise<boolean>;
519
521
  isDisplayed(): Promise<boolean>;
522
+ isPressed(): Promise<boolean>;
520
523
  getTitle(): Promise<string>;
521
524
  get menu(): ToolbarMenu;
522
525
  }
@@ -581,7 +584,7 @@ declare class Row extends AbstractElementWithParent {
581
584
  getCellByIndex(index: number): Cell;
582
585
  getCell(name: string): Cell;
583
586
  getCellByTitle(title: string): Cell;
584
- select(): Promise<void>;
587
+ select(preserve?: boolean): Promise<void>;
585
588
  isSelected(): Promise<boolean>;
586
589
  getIndex(): number;
587
590
  getCells(): Promise<Cell[]>;
@@ -644,8 +647,15 @@ declare class Table extends AbstractElementWithParent {
644
647
  /**
645
648
  * Вибрати рядок по індексу.
646
649
  * @param index починається з 0
650
+ * @param preserve boolean який изначає, чи повинні раніше вибрані рядки залишатися вибраними
647
651
  */
648
- selectRowByIndex(index: number): Promise<void>;
652
+ selectRowByIndex(index: number, preserve?: boolean): Promise<void>;
653
+ /**
654
+ * Вибрати масив рядків по індексу.
655
+ * @param indexes починається з 0
656
+ */
657
+ selectRowsByIndexes(indexes: number[]): Promise<void>;
658
+ protected getRowElements(timeout?: number): Promise<selenium_webdriver.WebElement[]>;
649
659
  getRows(): Promise<Row[]>;
650
660
  getColumns(): Promise<Column[]>;
651
661
  element(): Promise<selenium_webdriver.WebElement>;
@@ -679,6 +689,54 @@ declare class Table extends AbstractElementWithParent {
679
689
  * await form.contextMenu('FieldName', 3).clickButton(['Group', 'ButtonInGroup']);
680
690
  */
681
691
  contextMenu(fieldName: string, rowIndex?: number): ContextMenu;
692
+ /**
693
+ * Отримує значення комірки таблиці за ім'ям комірки та індексом рядка.
694
+ *
695
+ * @param {string} cellName - Ім'я комірки (поля) в таблиці
696
+ * @param {number} rowIndex - Індекс рядка (починається з 0)
697
+ * @throws {Error} Викидає помилку, якщо rowIndex не вказано
698
+ * @returns {Promise<string>} Повертає значення комірки
699
+ *
700
+ * @example
701
+ * const table = new Table(driver);
702
+ *
703
+ * // Отримання значення комірки 'Name' в першому рядку (індекс 0)
704
+ * const cellValue = await table.getCellValueByCellName('Name', 0);
705
+ * expect(cellValue).toBe('Очікуване значення');
706
+ */
707
+ getCellValueByCellName(cellName: string, rowIndex: number): Promise<string | number | string[] | Date>;
708
+ /**
709
+ * Перевіряє, чи є таблиця порожньою (не містить жодного рядка з даними).
710
+ *
711
+ * @returns {Promise<boolean>} Повертає true, якщо таблиця порожня, false - якщо містить рядки
712
+ *
713
+ * @example
714
+ * const table = new Table(driver);
715
+ *
716
+ * // Перевірка чи порожня таблиця
717
+ * const empty = await table.isEmpty();
718
+ * expect(empty).toBe(true);
719
+ */
720
+ isEmpty(): Promise<boolean>;
721
+ /**
722
+ * Очікує, поки кількість рядків у таблиці не стане рівною заданому значенню.
723
+ * Використовується для синхронізації тестів з динамічним завантаженням даних.
724
+ *
725
+ * @param {number} count - Очікувана кількість рядків у таблиці
726
+ * @returns {Promise<void>} Повертає Promise, який виконується, коли кількість рядків відповідає очікуваній
727
+ * @throws {Error} Викидає помилку, якщо очікування перевищує тайм-аут
728
+ *
729
+ * @example
730
+ * const table = new Table(driver);
731
+ *
732
+ * // Очікування, поки таблиця не стане порожньою
733
+ * await table.waitRowsCount(0);
734
+ *
735
+ * // Очікування, поки в таблиці не з'явиться 5 рядків
736
+ * await table.waitRowsCount(5);
737
+ * console.log('Таблиця містить 5 рядків');
738
+ */
739
+ waitRowsCount(count: number): Promise<void>;
682
740
  }
683
741
 
684
742
  declare class FormFilterField extends AbstractEditor {
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-75FRHQCI.mjs";
3
+ } from "./chunk-I5A2CSDF.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-S62QEWWA.mjs";
9
+ } from "./chunk-ATHAW2ZF.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-XGIXXZD6.mjs";
12
+ } from "./chunk-6TK257AJ.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -32,7 +32,7 @@ import {
32
32
  safeWait,
33
33
  waitElementIsClickable_default,
34
34
  waitElementIsVisible_default
35
- } from "./chunk-32KSAOFJ.mjs";
35
+ } from "./chunk-NO3PBR34.mjs";
36
36
 
37
37
  // src/pageObjects/pages/LoginPage.ts
38
38
  import { By } from "selenium-webdriver";
@@ -78,13 +78,24 @@ var LoginPage = class extends AbstractPage {
78
78
 
79
79
  // src/utils/createDriver.ts
80
80
  import { Builder } from "selenium-webdriver";
81
+ import path from "node:path";
82
+ import fs from "node:fs";
83
+ import os from "node:os";
81
84
  import Chrome from "selenium-webdriver/chrome";
82
85
  import Firefox from "selenium-webdriver/firefox";
83
86
  function chromeOptions(builder, options) {
84
87
  const ChromeOptions = new Chrome.Options();
85
88
  if (options.headless) {
86
89
  ChromeOptions.addArguments(`--headless=new`);
90
+ ChromeOptions.addArguments(`--disable-gpu`);
91
+ ChromeOptions.addArguments(`--disable-dev-shm-usage`);
92
+ ChromeOptions.addArguments(`--window-size=1920,1080`);
87
93
  }
94
+ const userDataDir = path.join(os.tmpdir(), ".chrome-cache");
95
+ if (!fs.existsSync(userDataDir)) {
96
+ fs.mkdirSync(userDataDir, { recursive: true });
97
+ }
98
+ ChromeOptions.addArguments(`--user-data-dir=${userDataDir}`);
88
99
  return builder.setChromeOptions(ChromeOptions);
89
100
  }
90
101
  function firefoxOptions(builder, options) {
@@ -112,7 +123,9 @@ var createDriver = async (browser) => {
112
123
  const driver = await builder.build();
113
124
  const manage = driver.manage();
114
125
  await manage.setTimeouts({ implicit: config().timeout });
115
- await manage.window().maximize();
126
+ if (!headless) {
127
+ await manage.window().maximize();
128
+ }
116
129
  return driver;
117
130
  };
118
131
 
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-75FRHQCI.mjs";
3
+ } from "./chunk-I5A2CSDF.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-S62QEWWA.mjs";
9
+ } from "./chunk-ATHAW2ZF.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-XGIXXZD6.mjs";
12
+ } from "./chunk-6TK257AJ.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -32,7 +32,7 @@ import {
32
32
  safeWait,
33
33
  waitElementIsClickable_default,
34
34
  waitElementIsVisible_default
35
- } from "./chunk-32KSAOFJ.mjs";
35
+ } from "./chunk-NO3PBR34.mjs";
36
36
 
37
37
  // src/pageObjects/pages/LoginPage.ts
38
38
  import { By } from "selenium-webdriver";
@@ -78,13 +78,24 @@ var LoginPage = class extends AbstractPage {
78
78
 
79
79
  // src/utils/createDriver.ts
80
80
  import { Builder } from "selenium-webdriver";
81
+ import path from "node:path";
82
+ import fs from "node:fs";
83
+ import os from "node:os";
81
84
  import Chrome from "selenium-webdriver/chrome";
82
85
  import Firefox from "selenium-webdriver/firefox";
83
86
  function chromeOptions(builder, options) {
84
87
  const ChromeOptions = new Chrome.Options();
85
88
  if (options.headless) {
86
89
  ChromeOptions.addArguments(`--headless=new`);
90
+ ChromeOptions.addArguments(`--disable-gpu`);
91
+ ChromeOptions.addArguments(`--disable-dev-shm-usage`);
92
+ ChromeOptions.addArguments(`--window-size=1920,1080`);
87
93
  }
94
+ const userDataDir = path.join(os.tmpdir(), ".chrome-cache");
95
+ if (!fs.existsSync(userDataDir)) {
96
+ fs.mkdirSync(userDataDir, { recursive: true });
97
+ }
98
+ ChromeOptions.addArguments(`--user-data-dir=${userDataDir}`);
88
99
  return builder.setChromeOptions(ChromeOptions);
89
100
  }
90
101
  function firefoxOptions(builder, options) {
@@ -112,7 +123,9 @@ var createDriver = async (browser) => {
112
123
  const driver = await builder.build();
113
124
  const manage = driver.manage();
114
125
  await manage.setTimeouts({ implicit: config().timeout });
115
- await manage.window().maximize();
126
+ if (!headless) {
127
+ await manage.window().maximize();
128
+ }
116
129
  return driver;
117
130
  };
118
131
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d5-testing-library",
3
- "version": "1.9.0-alpha.2",
3
+ "version": "1.9.0-alpha.21",
4
4
  "description": "e2e testing D5 projects",
5
5
  "main": "dist/cjs/d5-testing-library.cjs",
6
6
  "module": "dist/d5-testing-library.legacy-esm.js",
@@ -38,23 +38,23 @@
38
38
  "author": "",
39
39
  "license": "ISC",
40
40
  "dependencies": {
41
- "selenium-webdriver": "4.29.0",
41
+ "selenium-webdriver": "4.34.0",
42
42
  "typescript": "5.8.2"
43
43
  },
44
44
  "devDependencies": {
45
- "@babel/core": "7.26.9",
45
+ "@babel/core": "7.27.4",
46
46
  "@types/node": "20.11.16",
47
- "@types/jest": "29.5.14",
47
+ "@types/jest": "30.0.0",
48
48
  "@types/selenium-webdriver": "4.1.28",
49
49
  "commander": "12.1.0",
50
50
  "esbuild-extra": "0.4.0",
51
51
  "rimraf": "5.0.10",
52
- "jest": "29.7.0",
53
- "ts-jest": "29.2.6",
52
+ "jest": "30.0.5",
53
+ "ts-jest": "29.4.0",
54
54
  "tsup": "8.4.0"
55
55
  },
56
56
  "peerDependencies": {
57
- "selenium-webdriver": "4.29.0"
57
+ "selenium-webdriver": "4.34.0"
58
58
  },
59
59
  "jest": {
60
60
  "preset": "ts-jest",
@@ -1,7 +0,0 @@
1
- import {
2
- FormEdit
3
- } from "./chunk-XGIXXZD6.mjs";
4
- import "./chunk-32KSAOFJ.mjs";
5
- export {
6
- FormEdit as default
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-S62QEWWA.mjs";
4
- import "./chunk-32KSAOFJ.mjs";
5
- export {
6
- ListForm as default
7
- };
@@ -1,8 +0,0 @@
1
- import {
2
- TreeView
3
- } from "./chunk-75FRHQCI.mjs";
4
- import "./chunk-S62QEWWA.mjs";
5
- import "./chunk-32KSAOFJ.mjs";
6
- export {
7
- TreeView as default
8
- };