d5-testing-library 1.8.0-alpha.2 → 1.8.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.
@@ -92,6 +92,22 @@ interface WaitElementIsVisibleParams {
92
92
  */
93
93
  declare function waitElementIsVisible({ element, timeout, errorMessage, driver }: WaitElementIsVisibleParams): Promise<void>;
94
94
 
95
+ type WithElement = {
96
+ element: WebElement;
97
+ };
98
+ type WithBy = {
99
+ by: By;
100
+ };
101
+ type Args = {
102
+ timeout?: number;
103
+ errorMessage?: string;
104
+ driver?: WebDriver;
105
+ };
106
+ type ArgsWithElement = Args & WithElement;
107
+ type ArgsWithWithBy = Args & WithBy;
108
+ declare function waitElementIsClickable(args: ArgsWithElement): Promise<void>;
109
+ declare function waitElementIsClickable(args: ArgsWithWithBy): Promise<void>;
110
+
95
111
  interface WaiteParams {
96
112
  condition: (driver?: WebDriver) => Promise<boolean>;
97
113
  timeout?: number;
@@ -119,6 +135,7 @@ declare function signIn(driver?: WebDriver): Promise<WebDriver>;
119
135
  * @returns {Promise<void>} A promise that resolves when the click action is complete.
120
136
  */
121
137
  declare const click: (webElement: WebElement, driver?: WebDriver) => Promise<void>;
138
+ declare const contextMenu: (webElement: WebElement, driver?: WebDriver) => Promise<void>;
122
139
 
123
140
  interface Editor {
124
141
  setValue(value: any): Promise<void>;
@@ -138,7 +155,8 @@ declare enum ControlClass {
138
155
  Date = "date-control",
139
156
  SingleDateRange = "single-date-range-control",
140
157
  BooleanSelector = "buttons-group",
141
- ButtonGroup = "button-group-field"
158
+ ButtonGroup = "button-group-field",
159
+ HeaderFilterDictionary = "header-filter-dictionary"
142
160
  }
143
161
 
144
162
  interface ClearStrategy {
@@ -166,7 +184,7 @@ declare abstract class AbstractDXEditorWithInput extends AbstractElementWithPare
166
184
 
167
185
  declare class TextEditor extends AbstractDXEditorWithInput {
168
186
  constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
169
- getValue(): Promise<string>;
187
+ getValue(): Promise<string | null>;
170
188
  setValue(value: string): Promise<void>;
171
189
  }
172
190
 
@@ -241,12 +259,14 @@ declare class SubsystemsPanel extends AbstractElement {
241
259
  interface Button {
242
260
  click(): Promise<void>;
243
261
  isDisabled(): Promise<boolean>;
262
+ isDisplayed(): Promise<boolean>;
244
263
  }
245
264
  declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
246
265
  protected constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
247
266
  protected abstract buttonNotDisplayedError(): string;
248
267
  click(): Promise<void>;
249
268
  isDisabled(): Promise<boolean>;
269
+ isDisplayed(): Promise<boolean>;
250
270
  }
251
271
 
252
272
  declare abstract class DXButton extends AbstractButton {
@@ -326,6 +346,9 @@ declare class AbstractForm extends AbstractPage {
326
346
  group(name: string): FormGroup;
327
347
  }
328
348
 
349
+ interface SubFormOptions {
350
+ isDockPanel?: boolean;
351
+ }
329
352
  declare abstract class Form extends AbstractForm {
330
353
  protected popupContainerCssSelector: string;
331
354
  protected constructor(driver: WebDriver);
@@ -347,7 +370,15 @@ declare abstract class Form extends AbstractForm {
347
370
  * //...
348
371
  * expect(await form.subForm(name));
349
372
  */
350
- subForm(name: string): Promise<unknown>;
373
+ subForm(name: string, options?: SubFormOptions): Promise<unknown>;
374
+ }
375
+
376
+ declare class EditorButton extends AbstractElementWithParent {
377
+ private readonly name;
378
+ constructor(parentCssSelector: string, name: string, driver?: WebDriver);
379
+ protected buttonNotDisplayedError(): string;
380
+ click(): Promise<void>;
381
+ isDisplayed(): Promise<boolean>;
351
382
  }
352
383
 
353
384
  declare class AbstractEditor extends AbstractElementWithParent implements Editor {
@@ -387,6 +418,21 @@ declare class AbstractEditor extends AbstractElementWithParent implements Editor
387
418
  * expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
388
419
  */
389
420
  isReadonly(): Promise<boolean>;
421
+ /**
422
+ * Возвращает значение true|false в зависимости isDisplayed поле или нет
423
+ * @example
424
+ * expect(await formEdit.field('NumberFld').isDisplayed()).toBe(true);
425
+ * expect(await formEdit.field('TextFld').isDisplayed()).toBe(false);
426
+ */
427
+ isDisplayed(): Promise<boolean>;
428
+ /**
429
+ * Находит кнопку на поле по имени
430
+ * @example
431
+ * const form= new MyForm();
432
+ * //...
433
+ * await form.field('Name').button('editorButton).click()
434
+ */
435
+ button(name: string): EditorButton;
390
436
  }
391
437
 
392
438
  declare class FormField extends AbstractEditor {
@@ -394,9 +440,10 @@ declare class FormField extends AbstractEditor {
394
440
  }
395
441
 
396
442
  declare class FormEdit extends Form {
397
- saveButtonBy: By;
398
- closeButtonBy: By;
443
+ saveButtonId: string;
444
+ closeButtonId: string;
399
445
  constructor(driver: WebDriver);
446
+ private getButtonCssSelector;
400
447
  /**
401
448
  * Находит поле формы редактирования по имени
402
449
  * @example
@@ -431,13 +478,27 @@ declare class FormEdit extends Form {
431
478
  closeButtonClick(): Promise<void>;
432
479
  }
433
480
 
434
- declare class ToolbarMenu extends AbstractElementWithParent {
435
- private readonly _formName;
481
+ declare abstract class AbstractDropDownMenuList extends AbstractElementWithParent {
482
+ protected abstract getButtonNameBy(name: string): By;
483
+ protected abstract getButtonTitleBy(name: string): By;
484
+ protected buttonNotDisplayedError(name: string): string;
485
+ private clickItemBy;
486
+ private clickItemByPath;
487
+ clickButton(name: string | string[]): Promise<void>;
488
+ clickButtonByTitle(title: string | string[]): Promise<void>;
489
+ isVisible(): Promise<boolean>;
490
+ }
491
+
492
+ declare abstract class AbstractDropDownMenuButton extends AbstractElementWithParent {
493
+ private readonly _list;
494
+ protected constructor(parentCssSelector: string, elementCssSelector: string, list: AbstractDropDownMenuList, driver?: WebDriver);
495
+ protected openDropdownMenu(): Promise<void>;
496
+ clickButton(name: string | string[]): Promise<void>;
497
+ clickButtonByTitle(title: string | string[]): Promise<void>;
498
+ }
499
+
500
+ declare class ToolbarMenu extends AbstractDropDownMenuButton {
436
501
  constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
437
- private openDropdownMenu;
438
- private getCssSelectorToButton;
439
- private buttonNotDisplayedError;
440
- private goToButton;
441
502
  clickButton(name: string | string[]): Promise<void>;
442
503
  clickButtonByTitle(title: string | string[]): Promise<void>;
443
504
  }
@@ -450,6 +511,7 @@ declare class ToolbarItem extends AbstractElementWithParent implements Button {
450
511
  private init;
451
512
  click(): Promise<void>;
452
513
  isDisabled(): Promise<boolean>;
514
+ isDisplayed(): Promise<boolean>;
453
515
  get menu(): ToolbarMenu;
454
516
  }
455
517
 
@@ -460,12 +522,14 @@ declare class Cell extends AbstractElementWithParent {
460
522
  private set index(value);
461
523
  private getBooleanValue;
462
524
  private getTagsValue;
525
+ private getNumberValue;
526
+ private getDateValue;
463
527
  getElement(): Promise<WebElement>;
464
- getValue(): Promise<string | 1 | 0 | string[]>;
528
+ getValue(): Promise<string | number | 1 | 0 | string[] | Date>;
465
529
  getIndex(): number;
466
530
  }
467
531
 
468
- interface ConstructorParams {
532
+ interface ConstructorParams$1 {
469
533
  parentCssSelector: string;
470
534
  headerCssSelector?: string;
471
535
  name?: string;
@@ -478,7 +542,7 @@ declare class Column extends AbstractElementWithParent {
478
542
  private _caption;
479
543
  private _name;
480
544
  protected headerCssSelector: string | undefined;
481
- constructor({ parentCssSelector, headerCssSelector, name, caption, index, driver }: ConstructorParams);
545
+ constructor({ parentCssSelector, headerCssSelector, name, caption, index, driver }: ConstructorParams$1);
482
546
  private set index(value);
483
547
  private get index();
484
548
  getElement(): Promise<WebElement>;
@@ -490,12 +554,20 @@ declare class Column extends AbstractElementWithParent {
490
554
  }
491
555
 
492
556
  declare class Row extends AbstractElementWithParent {
493
- index: number;
557
+ private readonly index;
494
558
  protected getColumnBy: (_: {
495
559
  title?: string;
496
560
  name?: string;
497
561
  }) => Column;
498
- constructor(parentCssSelector: string, index: number, driver?: WebDriver, getColumnBy?: (_: {
562
+ protected fixedTableContentCssSelector: string;
563
+ /**
564
+ * @param parentCssSelector
565
+ * @param fixedTableContentCssSelector
566
+ * @param index починається з 0 (в getCssRowByIndexSelector додається +1)
567
+ * @param driver
568
+ * @param getColumnBy
569
+ */
570
+ constructor(parentCssSelector: string, fixedTableContentCssSelector: string, index: number, driver?: WebDriver, getColumnBy?: (_: {
499
571
  title?: string;
500
572
  name?: string;
501
573
  }) => Column);
@@ -514,15 +586,59 @@ declare class Row extends AbstractElementWithParent {
514
586
  cancel(): Promise<void>;
515
587
  }
516
588
 
589
+ declare abstract class DXContextMenuList extends AbstractDropDownMenuList {
590
+ /**
591
+ * @param parentCssSelector
592
+ * @param classNames - Список класів. Починається з крапки
593
+ * @param driver
594
+ */
595
+ protected constructor(parentCssSelector: string, classNames: string, driver?: WebDriver);
596
+ protected getButtonTitleBy(title: string): By;
597
+ isVisible(): Promise<boolean>;
598
+ }
599
+
600
+ declare class ContextMenu extends DXContextMenuList {
601
+ private readonly _formName;
602
+ private _initFn;
603
+ constructor(cssClass: string, formName: string, driver?: WebDriver);
604
+ setInit(cb: () => Promise<void>): this;
605
+ protected getButtonNameBy(name: string): By;
606
+ clickButtonByTitle(title: string | string[]): Promise<void>;
607
+ clickButton(name: string | string[]): Promise<void>;
608
+ }
609
+
610
+ interface ConstructorParams {
611
+ parentCssSelector: string;
612
+ headerCssSelector: string;
613
+ fixedTableContentCssSelector: string;
614
+ contextMenuCssSelector: string;
615
+ tableContentCssSelector: string;
616
+ formName: string;
617
+ driver?: WebDriver;
618
+ }
517
619
  declare class Table extends AbstractElementWithParent {
518
620
  protected formName: string;
519
621
  protected headerCssSelector: string;
520
- constructor(parentCssSelector: string, headerCssSelector: string, formName: string, driver?: WebDriver);
622
+ protected contextMenuCssSelector: string;
623
+ protected fixedTableContentCssSelector: string;
624
+ protected tableContentCssSelector: string;
625
+ constructor({ parentCssSelector, contextMenuCssSelector, tableContentCssSelector, headerCssSelector, fixedTableContentCssSelector, formName, driver }: ConstructorParams);
521
626
  private getColumnBy;
627
+ /**
628
+ * Отримати рядок по індексу.
629
+ * @param index починається з 0
630
+ */
522
631
  getRowByIndex(index: number): Row;
632
+ /**
633
+ * @param index починається з 0
634
+ */
523
635
  getColumnByIndex(index: number): Column;
524
636
  getColumnByTitle: (title: string) => Column;
525
637
  getColumnByName: (name: string) => Column;
638
+ /**
639
+ * Вибрати рядок по індексу.
640
+ * @param index починається з 0
641
+ */
526
642
  selectRowByIndex(index: number): Promise<void>;
527
643
  getRows(): Promise<Row[]>;
528
644
  getColumns(): Promise<Column[]>;
@@ -535,6 +651,28 @@ declare class Table extends AbstractElementWithParent {
535
651
  * expect(await form.field('Name').getValue()).toBe('test value');
536
652
  */
537
653
  field(name: string): FormField;
654
+ /**
655
+ * Возвращает список строк которые выделены
656
+ * @returns Row[]
657
+ * @example
658
+ * const form = new MyForm();
659
+ * //...
660
+ * await form.getSelectedRows();
661
+ */
662
+ getSelectedRows(): Promise<Row[]>;
663
+ /**
664
+ * Вызывает контекстное меню в области с данными.
665
+ * @param fieldName - имя поля
666
+ * @param [rowIndex] - индекс строки. Если значение не передано, то по умолчанию контекстное меню будет вызвано на первой выделенной строке.
667
+ * @throws {Error} Если нет выделенных строк, то выбросит исключение.
668
+ * @example
669
+ * const form = new MyForm();
670
+ * //...
671
+ * await form.contextMenu('FieldName').clickButton('OpenFormButton');
672
+ * // or
673
+ * await form.contextMenu('FieldName', 3).clickButton(['Group', 'ButtonInGroup']);
674
+ */
675
+ contextMenu(fieldName: string, rowIndex?: number): ContextMenu;
538
676
  }
539
677
 
540
678
  declare class FormFilterField extends AbstractEditor {
@@ -553,8 +691,9 @@ declare class FormFilterField extends AbstractEditor {
553
691
  * @example
554
692
  * await form.formFilter('NumberFld').setValue(123);
555
693
  * await form.formFilter('TextFld').setValue('TestValue');
694
+ * await form.formFilter('TextFld').setValue('TestValue', '=', true);
556
695
  */
557
- setValue(value: any): Promise<void>;
696
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
558
697
  /**
559
698
  * Очищает значение в поле
560
699
  * @example
@@ -613,8 +752,9 @@ declare class PanelFilterField extends AbstractEditor {
613
752
  * @example
614
753
  * await form.filterPanel.filterField('NumberFld').setValue(123);
615
754
  * await form.filterPanel.filterField('TextFld').setValue('TestValue');
755
+ * await form.filterPanel.filterField('TextFld').setValue('TestValue', '=', true);
616
756
  */
617
- setValue(value: any): Promise<void>;
757
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
618
758
  /**
619
759
  * Очищает значение в поле
620
760
  * @example
@@ -720,8 +860,9 @@ declare class ColumnFilter extends AbstractElement {
720
860
  * @example
721
861
  * await form.columnFilter('NumberFld').setValue(123);
722
862
  * await form.columnFilter('TextFld').setValue('TestValue');
863
+ * await form.columnFilter('TextFld').setValue('TestValue', '=', true);
723
864
  */
724
- setValue(value: any): Promise<void>;
865
+ setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
725
866
  /**
726
867
  * Очищает значение в поле
727
868
  * @example
@@ -734,15 +875,41 @@ declare class ColumnFilter extends AbstractElement {
734
875
  * await form.columnFilter('TagBox').remove('test');
735
876
  */
736
877
  remove(itemText: string): Promise<void>;
878
+ /**
879
+ * Инициализация операции фильтра
880
+ */
737
881
  initOperation(): Promise<FilterOperation>;
882
+ /**
883
+ * Устанавливает операцию для фильтра
884
+ * @example
885
+ * await form.columnFilter('TagBox').setOperation("=");
886
+ */
738
887
  setOperation(operationName: string): Promise<void>;
888
+ /**
889
+ * Возвращает операцию фильтра
890
+ * @example
891
+ * expect(await form.columnFilter('NumberFld').getOperation()).toBe("=");
892
+ */
739
893
  getOperation(): Promise<any>;
894
+ /**
895
+ * Устанавливает операцию 'isblank' для фильтра
896
+ * @example
897
+ * await form.columnFilter('TagBox').setIsBlank(true);
898
+ */
740
899
  setIsBlank(value: boolean): Promise<void>;
900
+ /**
901
+ * Возвращает true|false, если операция 'isblank' установлена для фильтра
902
+ * @example
903
+ * expect(await form.columnFilter('NumberFld').getIsBlank()).toBe(false);
904
+ */
741
905
  getIsBlank(): Promise<boolean>;
742
906
  }
743
907
 
744
908
  declare class ListForm extends Form {
745
909
  protected headerCssSelector: string;
910
+ protected fixedTableContentCssSelector: string;
911
+ protected tableContentCssSelector: string;
912
+ protected contextMenuCssSelector: string;
746
913
  constructor(driver: WebDriver);
747
914
  /**
748
915
  * Находит таблицу
@@ -812,4 +979,4 @@ declare class Dialog extends AbstractElement {
812
979
  button(text: string): DialogButton;
813
980
  }
814
981
 
815
- export { AbstractPage, ControlClass, Dialog, Editor, FilterPanel, FormEdit, FormField, FormFilterField, ListForm, LoginPage, NumberEditor, PanelFilterField, ReportForm, SubsystemsPanel, TextEditor, TreeView, byTestId, byTestIdCssSelector, click, config, createDriver, editorFactory, elementIsNotPresent, readonlyLocator, signIn, wait, waitElementIsVisible };
982
+ export { AbstractPage, ControlClass, Dialog, Editor, FilterPanel, FormEdit, FormField, FormFilterField, ListForm, LoginPage, NumberEditor, PanelFilterField, ReportForm, SubsystemsPanel, TextEditor, TreeView, byTestId, byTestIdCssSelector, click, config, contextMenu, createDriver, editorFactory, elementIsNotPresent, readonlyLocator, signIn, wait, waitElementIsClickable, waitElementIsVisible };
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-4PUDCQM6.mjs";
3
+ } from "./chunk-LMFYREYI.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-LTHDA5XH.mjs";
9
+ } from "./chunk-PMZQRKUZ.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-H3M6VBPP.mjs";
12
+ } from "./chunk-WDYVVF7O.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -24,13 +24,15 @@ import {
24
24
  byTestIdCssSelector,
25
25
  click,
26
26
  config,
27
+ contextMenu,
27
28
  createSubSystemTestId,
28
29
  editorFactory,
29
30
  fixElementStaleError,
30
31
  readonlyLocator,
31
32
  wait,
33
+ waitElementIsClickable_default,
32
34
  waitElementIsVisible
33
- } from "./chunk-ZT3B7BQ2.mjs";
35
+ } from "./chunk-MV63JF3H.mjs";
34
36
 
35
37
  // src/pageObjects/pages/LoginPage.ts
36
38
  var LOGIN_PATH = "/login";
@@ -121,10 +123,22 @@ var SubsystemItem = class {
121
123
  }
122
124
  async getTitle() {
123
125
  const el = await this.getElement();
126
+ await waitElementIsVisible(
127
+ {
128
+ element: el,
129
+ driver: this.driver
130
+ }
131
+ );
124
132
  return await el.getAttribute("data-title");
125
133
  }
126
134
  async click() {
127
135
  const el = await this.getElement();
136
+ await waitElementIsClickable_default(
137
+ {
138
+ element: el,
139
+ driver: this.driver
140
+ }
141
+ );
128
142
  await click(el, this.driver);
129
143
  }
130
144
  };
@@ -159,6 +173,7 @@ var SubsystemsPanel = class extends AbstractElement {
159
173
  */
160
174
  async search(title) {
161
175
  const searchComponent = this.getSearchComponent();
176
+ await this.searchClear();
162
177
  await searchComponent.setValue(title);
163
178
  await wait(
164
179
  async () => {
@@ -179,7 +194,7 @@ var SubsystemsPanel = class extends AbstractElement {
179
194
  */
180
195
  async searchClear() {
181
196
  const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
182
- const clearBtn = await this.driver.findElement(By3.css(clearBtnSelector));
197
+ const clearBtn = await fixElementStaleError(By3.css(clearBtnSelector), this.driver);
183
198
  if (await clearBtn.isDisplayed()) {
184
199
  await click(clearBtn, this.driver);
185
200
  }
@@ -213,7 +228,7 @@ var SubsystemsPanel = class extends AbstractElement {
213
228
  * wait subsystemsPanel.back();
214
229
  */
215
230
  async back() {
216
- const backButton = this.driver.findElement(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`));
231
+ const backButton = await fixElementStaleError(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`), this.driver);
217
232
  await waitElementIsVisible(
218
233
  {
219
234
  element: backButton,
@@ -225,12 +240,11 @@ var SubsystemsPanel = class extends AbstractElement {
225
240
  };
226
241
 
227
242
  // src/pageObjects/elements/Forms/ReportForm.ts
228
- import { By as By4 } from "selenium-webdriver";
229
243
  var ReportForm = class extends FormEdit {
230
244
  constructor(driver) {
231
245
  super(driver);
232
- this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
233
- this.saveButtonBy = By4.id("button-apply");
246
+ this.popupContainerCssSelector = `.popup.form-report-${this.formName}`;
247
+ this.saveButtonId = "#button-apply";
234
248
  }
235
249
  /**
236
250
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -245,7 +259,7 @@ var ReportForm = class extends FormEdit {
245
259
  };
246
260
 
247
261
  // src/pageObjects/elements/Dialog.ts
248
- import { By as By5 } from "selenium-webdriver";
262
+ import { By as By4 } from "selenium-webdriver";
249
263
  var DIALOG_CLASS = ".d5-dialog";
250
264
  var DIALOG_TITLE_CLASS = ".dialog__title";
251
265
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -259,7 +273,7 @@ var DialogButton = class extends AbstractButton {
259
273
  }
260
274
  async getElement() {
261
275
  const panel = await super.getElement();
262
- return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
276
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
263
277
  }
264
278
  buttonNotDisplayedError() {
265
279
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -279,11 +293,11 @@ var Dialog = class extends AbstractElement {
279
293
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
280
294
  }
281
295
  async title() {
282
- const el = await this.driver.findElement(By5.css(this.titleSelector));
296
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
283
297
  return await el.getText();
284
298
  }
285
299
  async text() {
286
- const el = await this.driver.findElement(By5.css(this.textSelector));
300
+ const el = await this.driver.findElement(By4.css(this.textSelector));
287
301
  return await el.getText();
288
302
  }
289
303
  button(text) {
@@ -310,11 +324,13 @@ export {
310
324
  byTestIdCssSelector,
311
325
  click,
312
326
  config,
327
+ contextMenu,
313
328
  createDriver,
314
329
  editorFactory,
315
330
  elementIsNotPresent,
316
331
  readonlyLocator,
317
332
  signIn,
318
333
  wait,
334
+ waitElementIsClickable_default as waitElementIsClickable,
319
335
  waitElementIsVisible
320
336
  };
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-4PUDCQM6.mjs";
3
+ } from "./chunk-LMFYREYI.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-LTHDA5XH.mjs";
9
+ } from "./chunk-PMZQRKUZ.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-H3M6VBPP.mjs";
12
+ } from "./chunk-WDYVVF7O.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
@@ -24,13 +24,15 @@ import {
24
24
  byTestIdCssSelector,
25
25
  click,
26
26
  config,
27
+ contextMenu,
27
28
  createSubSystemTestId,
28
29
  editorFactory,
29
30
  fixElementStaleError,
30
31
  readonlyLocator,
31
32
  wait,
33
+ waitElementIsClickable_default,
32
34
  waitElementIsVisible
33
- } from "./chunk-ZT3B7BQ2.mjs";
35
+ } from "./chunk-MV63JF3H.mjs";
34
36
 
35
37
  // src/pageObjects/pages/LoginPage.ts
36
38
  var LOGIN_PATH = "/login";
@@ -121,10 +123,22 @@ var SubsystemItem = class {
121
123
  }
122
124
  async getTitle() {
123
125
  const el = await this.getElement();
126
+ await waitElementIsVisible(
127
+ {
128
+ element: el,
129
+ driver: this.driver
130
+ }
131
+ );
124
132
  return await el.getAttribute("data-title");
125
133
  }
126
134
  async click() {
127
135
  const el = await this.getElement();
136
+ await waitElementIsClickable_default(
137
+ {
138
+ element: el,
139
+ driver: this.driver
140
+ }
141
+ );
128
142
  await click(el, this.driver);
129
143
  }
130
144
  };
@@ -159,6 +173,7 @@ var SubsystemsPanel = class extends AbstractElement {
159
173
  */
160
174
  async search(title) {
161
175
  const searchComponent = this.getSearchComponent();
176
+ await this.searchClear();
162
177
  await searchComponent.setValue(title);
163
178
  await wait(
164
179
  async () => {
@@ -179,7 +194,7 @@ var SubsystemsPanel = class extends AbstractElement {
179
194
  */
180
195
  async searchClear() {
181
196
  const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
182
- const clearBtn = await this.driver.findElement(By3.css(clearBtnSelector));
197
+ const clearBtn = await fixElementStaleError(By3.css(clearBtnSelector), this.driver);
183
198
  if (await clearBtn.isDisplayed()) {
184
199
  await click(clearBtn, this.driver);
185
200
  }
@@ -213,7 +228,7 @@ var SubsystemsPanel = class extends AbstractElement {
213
228
  * wait subsystemsPanel.back();
214
229
  */
215
230
  async back() {
216
- const backButton = this.driver.findElement(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`));
231
+ const backButton = await fixElementStaleError(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`), this.driver);
217
232
  await waitElementIsVisible(
218
233
  {
219
234
  element: backButton,
@@ -225,12 +240,11 @@ var SubsystemsPanel = class extends AbstractElement {
225
240
  };
226
241
 
227
242
  // src/pageObjects/elements/Forms/ReportForm.ts
228
- import { By as By4 } from "selenium-webdriver";
229
243
  var ReportForm = class extends FormEdit {
230
244
  constructor(driver) {
231
245
  super(driver);
232
- this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
233
- this.saveButtonBy = By4.id("button-apply");
246
+ this.popupContainerCssSelector = `.popup.form-report-${this.formName}`;
247
+ this.saveButtonId = "#button-apply";
234
248
  }
235
249
  /**
236
250
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -245,7 +259,7 @@ var ReportForm = class extends FormEdit {
245
259
  };
246
260
 
247
261
  // src/pageObjects/elements/Dialog.ts
248
- import { By as By5 } from "selenium-webdriver";
262
+ import { By as By4 } from "selenium-webdriver";
249
263
  var DIALOG_CLASS = ".d5-dialog";
250
264
  var DIALOG_TITLE_CLASS = ".dialog__title";
251
265
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -259,7 +273,7 @@ var DialogButton = class extends AbstractButton {
259
273
  }
260
274
  async getElement() {
261
275
  const panel = await super.getElement();
262
- return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
276
+ return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
263
277
  }
264
278
  buttonNotDisplayedError() {
265
279
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -279,11 +293,11 @@ var Dialog = class extends AbstractElement {
279
293
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
280
294
  }
281
295
  async title() {
282
- const el = await this.driver.findElement(By5.css(this.titleSelector));
296
+ const el = await this.driver.findElement(By4.css(this.titleSelector));
283
297
  return await el.getText();
284
298
  }
285
299
  async text() {
286
- const el = await this.driver.findElement(By5.css(this.textSelector));
300
+ const el = await this.driver.findElement(By4.css(this.textSelector));
287
301
  return await el.getText();
288
302
  }
289
303
  button(text) {
@@ -310,11 +324,13 @@ export {
310
324
  byTestIdCssSelector,
311
325
  click,
312
326
  config,
327
+ contextMenu,
313
328
  createDriver,
314
329
  editorFactory,
315
330
  elementIsNotPresent,
316
331
  readonlyLocator,
317
332
  signIn,
318
333
  wait,
334
+ waitElementIsClickable_default as waitElementIsClickable,
319
335
  waitElementIsVisible
320
336
  };