d5-testing-library 1.8.0-alpha.0 → 1.8.0-alpha.10

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.
@@ -138,7 +138,8 @@ declare enum ControlClass {
138
138
  Date = "date-control",
139
139
  SingleDateRange = "single-date-range-control",
140
140
  BooleanSelector = "buttons-group",
141
- ButtonGroup = "button-group-field"
141
+ ButtonGroup = "button-group-field",
142
+ HeaderFilterDictionary = "header-filter-dictionary"
142
143
  }
143
144
 
144
145
  interface ClearStrategy {
@@ -241,12 +242,14 @@ declare class SubsystemsPanel extends AbstractElement {
241
242
  interface Button {
242
243
  click(): Promise<void>;
243
244
  isDisabled(): Promise<boolean>;
245
+ isDisplayed(): Promise<boolean>;
244
246
  }
245
247
  declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
246
248
  protected constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
247
249
  protected abstract buttonNotDisplayedError(): string;
248
250
  click(): Promise<void>;
249
251
  isDisabled(): Promise<boolean>;
252
+ isDisplayed(): Promise<boolean>;
250
253
  }
251
254
 
252
255
  declare abstract class DXButton extends AbstractButton {
@@ -350,6 +353,14 @@ declare abstract class Form extends AbstractForm {
350
353
  subForm(name: string): Promise<unknown>;
351
354
  }
352
355
 
356
+ declare class EditorButton extends AbstractElementWithParent {
357
+ private readonly name;
358
+ constructor(parentCssSelector: string, name: string, driver?: WebDriver);
359
+ protected buttonNotDisplayedError(): string;
360
+ click(): Promise<void>;
361
+ isDisplayed(): Promise<boolean>;
362
+ }
363
+
353
364
  declare class AbstractEditor extends AbstractElementWithParent implements Editor {
354
365
  protected editor: Editor;
355
366
  constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
@@ -387,6 +398,14 @@ declare class AbstractEditor extends AbstractElementWithParent implements Editor
387
398
  * expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
388
399
  */
389
400
  isReadonly(): Promise<boolean>;
401
+ /**
402
+ * Находит кнопку на поле по имени
403
+ * @example
404
+ * const form= new MyForm();
405
+ * //...
406
+ * await form.field('Name').button('editorButton).click()
407
+ */
408
+ button(name: string): EditorButton;
390
409
  }
391
410
 
392
411
  declare class FormField extends AbstractEditor {
@@ -394,9 +413,10 @@ declare class FormField extends AbstractEditor {
394
413
  }
395
414
 
396
415
  declare class FormEdit extends Form {
397
- saveButtonBy: By;
398
- closeButtonBy: By;
416
+ saveButtonId: string;
417
+ closeButtonId: string;
399
418
  constructor(driver: WebDriver);
419
+ private getButtonCssSelector;
400
420
  /**
401
421
  * Находит поле формы редактирования по имени
402
422
  * @example
@@ -450,6 +470,7 @@ declare class ToolbarItem extends AbstractElementWithParent implements Button {
450
470
  private init;
451
471
  click(): Promise<void>;
452
472
  isDisabled(): Promise<boolean>;
473
+ isDisplayed(): Promise<boolean>;
453
474
  get menu(): ToolbarMenu;
454
475
  }
455
476
 
@@ -495,7 +516,8 @@ declare class Row extends AbstractElementWithParent {
495
516
  title?: string;
496
517
  name?: string;
497
518
  }) => Column;
498
- constructor(parentCssSelector: string, index: number, driver?: WebDriver, getColumnBy?: (_: {
519
+ protected fixedTableContentCssSelector: string;
520
+ constructor(parentCssSelector: string, fixedTableContentCssSelector: string, index: number, driver?: WebDriver, getColumnBy?: (_: {
499
521
  title?: string;
500
522
  name?: string;
501
523
  }) => Column);
@@ -517,7 +539,9 @@ declare class Row extends AbstractElementWithParent {
517
539
  declare class Table extends AbstractElementWithParent {
518
540
  protected formName: string;
519
541
  protected headerCssSelector: string;
520
- constructor(parentCssSelector: string, headerCssSelector: string, formName: string, driver?: WebDriver);
542
+ protected fixedTableContentCssSelector: string;
543
+ protected tableContentCssSelector: string;
544
+ constructor(parentCssSelector: string, headerCssSelector: string, tableContentCssSelector: string, fixedTableContentCssSelector: string, formName: string, driver?: WebDriver);
521
545
  private getColumnBy;
522
546
  getRowByIndex(index: number): Row;
523
547
  getColumnByIndex(index: number): Column;
@@ -538,6 +562,8 @@ declare class Table extends AbstractElementWithParent {
538
562
  }
539
563
 
540
564
  declare class FormFilterField extends AbstractEditor {
565
+ private readonly formName;
566
+ private readonly name;
541
567
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
542
568
  /**
543
569
  * Возвращает значение в поле
@@ -551,8 +577,9 @@ declare class FormFilterField extends AbstractEditor {
551
577
  * @example
552
578
  * await form.formFilter('NumberFld').setValue(123);
553
579
  * await form.formFilter('TextFld').setValue('TestValue');
580
+ * await form.formFilter('TextFld').setValue('TestValue', '=', true);
554
581
  */
555
- setValue(value: any): Promise<void>;
582
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
556
583
  /**
557
584
  * Очищает значение в поле
558
585
  * @example
@@ -565,9 +592,39 @@ declare class FormFilterField extends AbstractEditor {
565
592
  * await form.formFilter('TagBox').remove('test');
566
593
  */
567
594
  remove(itemText: string): Promise<void>;
595
+ /**
596
+ * Инициализация операции фильтра
597
+ */
598
+ private initOperation;
599
+ /**
600
+ * Устанавливает операцию для фильтра
601
+ * @example
602
+ * await form.formFilter('TagBox').setOperation("=");
603
+ */
604
+ setOperation(operationName: string): Promise<void>;
605
+ /**
606
+ * Возвращает операцию фильтра
607
+ * @example
608
+ * expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
609
+ */
610
+ getOperation(): Promise<any>;
611
+ /**
612
+ * Устанавливает операцию 'isblank' для фильтра
613
+ * @example
614
+ * await form.formFilter('TagBox').setIsBlank(true);
615
+ */
616
+ setIsBlank(value: boolean): Promise<void>;
617
+ /**
618
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
619
+ * @example
620
+ * expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
621
+ */
622
+ getIsBlank(): Promise<boolean>;
568
623
  }
569
624
 
570
625
  declare class PanelFilterField extends AbstractEditor {
626
+ private readonly formName;
627
+ private readonly name;
571
628
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
572
629
  /**
573
630
  * Возвращает значение в поле
@@ -581,8 +638,9 @@ declare class PanelFilterField extends AbstractEditor {
581
638
  * @example
582
639
  * await form.filterPanel.filterField('NumberFld').setValue(123);
583
640
  * await form.filterPanel.filterField('TextFld').setValue('TestValue');
641
+ * await form.filterPanel.filterField('TextFld').setValue('TestValue', '=', true);
584
642
  */
585
- setValue(value: any): Promise<void>;
643
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
586
644
  /**
587
645
  * Очищает значение в поле
588
646
  * @example
@@ -595,6 +653,34 @@ declare class PanelFilterField extends AbstractEditor {
595
653
  * await form.filterPanel.filterField('TagBox').remove('test');
596
654
  */
597
655
  remove(itemText: string): Promise<void>;
656
+ /**
657
+ * Инициализация операции фильтра
658
+ */
659
+ private initOperation;
660
+ /**
661
+ * Устанавливает операцию для фильтра
662
+ * @example
663
+ * await form.filterPanel.filterField('TagBox').setOperation("=");
664
+ */
665
+ setOperation(operationName: string): Promise<void>;
666
+ /**
667
+ * Возвращает операцию фильтра
668
+ * @example
669
+ * expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
670
+ */
671
+ getOperation(): Promise<any>;
672
+ /**
673
+ * Устанавливает операцию 'isblank' для фильтра
674
+ * @example
675
+ * await form.filterPanel.filterField('TagBox').setIsBlank(true);
676
+ */
677
+ setIsBlank(value: boolean): Promise<void>;
678
+ /**
679
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
680
+ * @example
681
+ * expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
682
+ */
683
+ getIsBlank(): Promise<boolean>;
598
684
  }
599
685
 
600
686
  declare class FilterPanel extends AbstractElement {
@@ -623,6 +709,21 @@ declare class HeaderFilterField extends AbstractEditor {
623
709
  remove(itemText: string): Promise<void>;
624
710
  }
625
711
 
712
+ interface IFilterOperations {
713
+ parentCssSelector: string;
714
+ filterTestID: string;
715
+ driver?: WebDriver;
716
+ }
717
+ declare class FilterOperation extends AbstractElementWithParent {
718
+ private readonly _testId;
719
+ constructor({ parentCssSelector, filterTestID, driver, }: IFilterOperations);
720
+ private initOperationWidget;
721
+ setOperation(operationName: string): Promise<void>;
722
+ getOperation(): Promise<any>;
723
+ setIsBlank(value: boolean): Promise<void>;
724
+ getIsBlank(): Promise<boolean>;
725
+ }
726
+
626
727
  declare class ColumnFilter extends AbstractElement {
627
728
  private readonly _formName;
628
729
  private readonly _name;
@@ -645,8 +746,9 @@ declare class ColumnFilter extends AbstractElement {
645
746
  * @example
646
747
  * await form.columnFilter('NumberFld').setValue(123);
647
748
  * await form.columnFilter('TextFld').setValue('TestValue');
749
+ * await form.columnFilter('TextFld').setValue('TestValue', '=', true);
648
750
  */
649
- setValue(value: any): Promise<void>;
751
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
650
752
  /**
651
753
  * Очищает значение в поле
652
754
  * @example
@@ -659,10 +761,40 @@ declare class ColumnFilter extends AbstractElement {
659
761
  * await form.columnFilter('TagBox').remove('test');
660
762
  */
661
763
  remove(itemText: string): Promise<void>;
764
+ /**
765
+ * Инициализация операции фильтра
766
+ */
767
+ initOperation(): Promise<FilterOperation>;
768
+ /**
769
+ * Устанавливает операцию для фильтра
770
+ * @example
771
+ * await form.columnFilter('TagBox').setOperation("=");
772
+ */
773
+ setOperation(operationName: string): Promise<void>;
774
+ /**
775
+ * Возвращает операцию фильтра
776
+ * @example
777
+ * expect(await form.columnFilter('NumberFld').getOperation()).toBe("=");
778
+ */
779
+ getOperation(): Promise<any>;
780
+ /**
781
+ * Устанавливает операцию 'isblank' для фильтра
782
+ * @example
783
+ * await form.columnFilter('TagBox').setIsBlank(true);
784
+ */
785
+ setIsBlank(value: boolean): Promise<void>;
786
+ /**
787
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
788
+ * @example
789
+ * expect(await form.columnFilter('NumberFld').getIsBlank()).toBe(false);
790
+ */
791
+ getIsBlank(): Promise<boolean>;
662
792
  }
663
793
 
664
794
  declare class ListForm extends Form {
665
795
  protected headerCssSelector: string;
796
+ protected fixedTableContentCssSelector: string;
797
+ protected tableContentCssSelector: string;
666
798
  constructor(driver: WebDriver);
667
799
  /**
668
800
  * Находит таблицу
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-Q67RHZDP.mjs";
3
+ } from "./chunk-6RIWBBNU.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-WUPIBFH7.mjs";
9
+ } from "./chunk-PS3VVRTQ.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-CKCSBNKD.mjs";
12
+ } from "./chunk-MZW4BBF3.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -30,7 +30,7 @@ import {
30
30
  readonlyLocator,
31
31
  wait,
32
32
  waitElementIsVisible
33
- } from "./chunk-JITTN2NY.mjs";
33
+ } from "./chunk-NXQ4TYFN.mjs";
34
34
 
35
35
  // src/pageObjects/pages/LoginPage.ts
36
36
  var LOGIN_PATH = "/login";
@@ -225,12 +225,11 @@ var SubsystemsPanel = class extends AbstractElement {
225
225
  };
226
226
 
227
227
  // src/pageObjects/elements/Forms/ReportForm.ts
228
- import { By as By4 } from "selenium-webdriver";
229
228
  var ReportForm = class extends FormEdit {
230
229
  constructor(driver) {
231
230
  super(driver);
232
- this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
233
- this.saveButtonBy = By4.id("button-apply");
231
+ this.popupContainerCssSelector = `.popup.form-report-${this.formName}`;
232
+ this.saveButtonId = "#button-apply";
234
233
  }
235
234
  /**
236
235
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -245,7 +244,7 @@ var ReportForm = class extends FormEdit {
245
244
  };
246
245
 
247
246
  // src/pageObjects/elements/Dialog.ts
248
- import { By as By5 } from "selenium-webdriver";
247
+ import { By as By4 } from "selenium-webdriver";
249
248
  var DIALOG_CLASS = ".d5-dialog";
250
249
  var DIALOG_TITLE_CLASS = ".dialog__title";
251
250
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -259,7 +258,7 @@ var DialogButton = class extends AbstractButton {
259
258
  }
260
259
  async getElement() {
261
260
  const panel = await super.getElement();
262
- return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
261
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
263
262
  }
264
263
  buttonNotDisplayedError() {
265
264
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -279,11 +278,11 @@ var Dialog = class extends AbstractElement {
279
278
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
280
279
  }
281
280
  async title() {
282
- const el = await this.driver.findElement(By5.css(this.titleSelector));
281
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
283
282
  return await el.getText();
284
283
  }
285
284
  async text() {
286
- const el = await this.driver.findElement(By5.css(this.textSelector));
285
+ const el = await this.driver.findElement(By4.css(this.textSelector));
287
286
  return await el.getText();
288
287
  }
289
288
  button(text) {
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-Q67RHZDP.mjs";
3
+ } from "./chunk-6RIWBBNU.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-WUPIBFH7.mjs";
9
+ } from "./chunk-PS3VVRTQ.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-CKCSBNKD.mjs";
12
+ } from "./chunk-MZW4BBF3.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -30,7 +30,7 @@ import {
30
30
  readonlyLocator,
31
31
  wait,
32
32
  waitElementIsVisible
33
- } from "./chunk-JITTN2NY.mjs";
33
+ } from "./chunk-NXQ4TYFN.mjs";
34
34
 
35
35
  // src/pageObjects/pages/LoginPage.ts
36
36
  var LOGIN_PATH = "/login";
@@ -225,12 +225,11 @@ var SubsystemsPanel = class extends AbstractElement {
225
225
  };
226
226
 
227
227
  // src/pageObjects/elements/Forms/ReportForm.ts
228
- import { By as By4 } from "selenium-webdriver";
229
228
  var ReportForm = class extends FormEdit {
230
229
  constructor(driver) {
231
230
  super(driver);
232
- this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
233
- this.saveButtonBy = By4.id("button-apply");
231
+ this.popupContainerCssSelector = `.popup.form-report-${this.formName}`;
232
+ this.saveButtonId = "#button-apply";
234
233
  }
235
234
  /**
236
235
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -245,7 +244,7 @@ var ReportForm = class extends FormEdit {
245
244
  };
246
245
 
247
246
  // src/pageObjects/elements/Dialog.ts
248
- import { By as By5 } from "selenium-webdriver";
247
+ import { By as By4 } from "selenium-webdriver";
249
248
  var DIALOG_CLASS = ".d5-dialog";
250
249
  var DIALOG_TITLE_CLASS = ".dialog__title";
251
250
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -259,7 +258,7 @@ var DialogButton = class extends AbstractButton {
259
258
  }
260
259
  async getElement() {
261
260
  const panel = await super.getElement();
262
- return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
261
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
263
262
  }
264
263
  buttonNotDisplayedError() {
265
264
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -279,11 +278,11 @@ var Dialog = class extends AbstractElement {
279
278
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
280
279
  }
281
280
  async title() {
282
- const el = await this.driver.findElement(By5.css(this.titleSelector));
281
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
283
282
  return await el.getText();
284
283
  }
285
284
  async text() {
286
- const el = await this.driver.findElement(By5.css(this.textSelector));
285
+ const el = await this.driver.findElement(By4.css(this.textSelector));
287
286
  return await el.getText();
288
287
  }
289
288
  button(text) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d5-testing-library",
3
- "version": "1.8.0-alpha.0",
3
+ "version": "1.8.0-alpha.10",
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",
@@ -32,19 +32,19 @@
32
32
  "author": "",
33
33
  "license": "ISC",
34
34
  "dependencies": {
35
- "selenium-webdriver": "^4.17.0",
35
+ "selenium-webdriver": "4.25.0",
36
36
  "typescript": "5.3.3"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@babel/core": "^7.23.9",
40
40
  "@types/node": "^20.11.16",
41
- "@types/selenium-webdriver": "^4.1.21",
41
+ "@types/selenium-webdriver": "4.1.26",
42
42
  "commander": "12.0.0",
43
43
  "esbuild-extra": "^0.3.1",
44
44
  "rimraf": "^5.0.5",
45
45
  "tsup": "7.0.0"
46
46
  },
47
47
  "peerDependencies": {
48
- "selenium-webdriver": "^4.17.0"
48
+ "selenium-webdriver": "4.25.0"
49
49
  }
50
50
  }
@@ -1,7 +0,0 @@
1
- import {
2
- FormEdit
3
- } from "./chunk-CKCSBNKD.mjs";
4
- import "./chunk-JITTN2NY.mjs";
5
- export {
6
- FormEdit as default
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-WUPIBFH7.mjs";
4
- import "./chunk-JITTN2NY.mjs";
5
- export {
6
- ListForm as default
7
- };
@@ -1,8 +0,0 @@
1
- import {
2
- TreeView
3
- } from "./chunk-Q67RHZDP.mjs";
4
- import "./chunk-WUPIBFH7.mjs";
5
- import "./chunk-JITTN2NY.mjs";
6
- export {
7
- TreeView as default
8
- };
@@ -1,17 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-WUPIBFH7.mjs";
4
-
5
- // src/pageObjects/elements/Forms/TreeView.ts
6
- var TREELIST_HEADER_CSS_SELECTOR = ".dx-treelist-headers .dx-treelist-content:not(.dx-datagrid-content-fixed)";
7
- var TreeView = class extends ListForm {
8
- constructor(driver) {
9
- super(driver);
10
- this.popupContainerCssSelector = `.popup .wrapper-tree-view-${this.formName}`;
11
- this.headerCssSelector = TREELIST_HEADER_CSS_SELECTOR;
12
- }
13
- };
14
-
15
- export {
16
- TreeView
17
- };