d5-testing-library 1.1.0 → 1.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.
@@ -77,8 +77,11 @@ var AbstractPage = class extends AbstractElement {
77
77
 
78
78
  // src/utils/locators.ts
79
79
  import { By } from "selenium-webdriver";
80
+ var byTestIdCssSelector = (testId, element = "div") => {
81
+ return `${element}[data-testid="${testId}"]`;
82
+ };
80
83
  var byTestId = (testId, element = "div") => {
81
- return By.css(`${element}[data-testid="${testId}"]`);
84
+ return By.css(byTestIdCssSelector(testId, element));
82
85
  };
83
86
 
84
87
  // src/utils/createDriver.ts
@@ -102,36 +105,55 @@ var elementIsNotPresent = function elementIsNotPresent2(locator) {
102
105
 
103
106
  // src/utils/waitElementIsVisible.ts
104
107
  import { until } from "selenium-webdriver";
105
- async function waitElementIsVisible({ element, timeout, errorMessage, driver }) {
108
+
109
+ // src/utils/wait.ts
110
+ async function wait(condition, driver, errorMessage, timeout) {
111
+ driver = driver ?? config().driver;
112
+ await driver.wait(condition, timeout ?? config().timeout, errorMessage);
113
+ }
114
+
115
+ // src/utils/waitElementIsVisible.ts
116
+ async function waitElementIsVisible({
117
+ element,
118
+ timeout,
119
+ errorMessage,
120
+ driver
121
+ }) {
106
122
  driver = driver ?? config().driver;
107
123
  const condition = until.elementIsVisible(element);
108
- await driver.wait(condition.fn, timeout ?? 1e4, errorMessage ?? condition.description());
124
+ await wait(condition.fn, driver, errorMessage ?? condition.description(), timeout ?? config().timeout);
109
125
  }
110
126
 
111
127
  // src/pageObjects/AbstractElementWithParent.ts
128
+ import { By as By3 } from "selenium-webdriver";
112
129
  var AbstractElementWithParent = class extends AbstractElement {
113
- getParentElement;
114
- elementBy;
115
- constructor(getParentElement, driver) {
130
+ elementCssSelector;
131
+ parentCssSelector;
132
+ constructor(parentCssSelector, elementCssSelector, driver) {
116
133
  super(driver);
117
- this.getParentElement = getParentElement;
134
+ this.parentCssSelector = parentCssSelector;
135
+ this.elementCssSelector = elementCssSelector;
136
+ }
137
+ getFullCssSelector() {
138
+ if (!this.elementCssSelector) {
139
+ return this.parentCssSelector;
140
+ }
141
+ if (!this.parentCssSelector) {
142
+ return this.elementCssSelector;
143
+ }
144
+ return `${this.parentCssSelector} ${this.elementCssSelector}`;
118
145
  }
119
146
  async getElement() {
120
- const parentEl = await this.getParentElement();
121
- await waitElementIsVisible({
122
- element: parentEl,
123
- driver: this.driver
124
- });
125
- const el = await parentEl.findElement(this.elementBy);
126
- await waitElementIsVisible({
127
- element: el,
128
- driver: this.driver
129
- });
130
- return el;
147
+ return this.driver.findElement(By3.css(this.getFullCssSelector()));
131
148
  }
132
149
  async getAttribute(attr) {
133
- const el = await this.getElement();
134
- return await el.getAttribute(attr);
150
+ const element = await this.getElement();
151
+ await waitElementIsVisible({
152
+ element,
153
+ driver: this.driver,
154
+ errorMessage: `Element not found: ${this.getFullCssSelector()}`
155
+ });
156
+ return await element.getAttribute(attr);
135
157
  }
136
158
  async getClasses() {
137
159
  return await this.getAttribute("class");
@@ -139,39 +161,36 @@ var AbstractElementWithParent = class extends AbstractElement {
139
161
  };
140
162
 
141
163
  // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanelHeader.ts
164
+ import { By as By4 } from "selenium-webdriver";
142
165
  var SubsystemsPanelHeader = class extends AbstractElementWithParent {
143
- titleBy = byTestId("subsystems-panel-title", "span");
144
166
  async title() {
145
- const panel = await this.getParentElement();
146
- return panel.findElement(this.titleBy);
167
+ return this.driver.findElement(By4.css(this.getFullCssSelector()));
147
168
  }
148
169
  };
149
170
 
150
171
  // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
151
- import { By as By3 } from "selenium-webdriver";
152
172
  var SubsystemsPanel = class extends AbstractElement {
153
- panelBy = By3.id("aside");
154
173
  header;
155
174
  constructor(driver) {
156
175
  super(driver);
157
- this.header = new SubsystemsPanelHeader(this.panelElement, this.driver);
176
+ this.header = new SubsystemsPanelHeader("#aside", byTestIdCssSelector("subsystems-panel-title", "span"), this.driver);
158
177
  }
159
- panelElement = () => {
160
- return this.driver.findElement(this.panelBy);
161
- };
162
178
  headerTitle() {
163
179
  return this.header.title().then((el) => el.getText());
164
180
  }
165
181
  };
166
182
 
167
183
  // src/pageObjects/elements/Forms/AbstractForm.ts
168
- import { By as By4 } from "selenium-webdriver";
184
+ import { By as By5 } from "selenium-webdriver";
169
185
  var AbstractForm = class extends AbstractPage {
186
+ containerCssSelector = "";
170
187
  containerBy;
171
- popupContainerBy;
188
+ popupContainerCssSelector;
172
189
  constructor(driver) {
173
190
  super(driver);
174
- this.containerBy = byTestId(`form-content-wrapper-${this.formName}`);
191
+ const testId = `form-content-wrapper-${this.formName}`;
192
+ this.containerBy = byTestId(testId);
193
+ this.containerCssSelector = byTestIdCssSelector(testId);
175
194
  }
176
195
  async isModal() {
177
196
  const el = await this.getContainerElement();
@@ -194,7 +213,7 @@ var AbstractForm = class extends AbstractPage {
194
213
  */
195
214
  async exists() {
196
215
  try {
197
- await this.driver.wait(elementIsNotPresent(this.containerBy), 1e3);
216
+ await wait(elementIsNotPresent(this.containerBy), this.driver);
198
217
  return false;
199
218
  } catch {
200
219
  return true;
@@ -209,29 +228,19 @@ var AbstractForm = class extends AbstractPage {
209
228
  */
210
229
  async getTitleText() {
211
230
  if (await this.isModal()) {
212
- const popupEl = await this.driver.findElement(this.popupContainerBy);
213
- const titleEl2 = await popupEl.findElement(By4.className("popup-title"));
231
+ const titleEl2 = await this.driver.findElement(By5.css(`${this.popupContainerCssSelector} .popup-title`));
214
232
  return titleEl2.getText();
215
233
  }
216
- let container = await this.getContainerElement();
217
- let titleEl = await container.findElement(By4.className("form-toolbar-name-container"));
234
+ let titleEl = await this.driver.findElement(By5.css(`${this.containerCssSelector} .form-toolbar-name-container`));
218
235
  return titleEl.getText();
219
236
  }
220
237
  };
221
238
 
222
239
  // src/pageObjects/elements/Forms/FormEdit.ts
223
- import { By as By11 } from "selenium-webdriver";
240
+ import { By as By12 } from "selenium-webdriver";
224
241
 
225
242
  // src/pageObjects/elements/Editors/AbstractEditor.ts
226
- import { By as By5, Key } from "selenium-webdriver";
227
-
228
- // src/pageObjects/AbstractFormElement.ts
229
- var AbstractFormElement = class extends AbstractElementWithParent {
230
- constructor(getParentElement, elementBy, driver) {
231
- super(getParentElement, driver);
232
- this.elementBy = elementBy;
233
- }
234
- };
243
+ import { By as By6, Key } from "selenium-webdriver";
235
244
 
236
245
  // src/pageObjects/elements/Editors/ClearStrategy/InputClearStrategy.ts
237
246
  var InputClearStrategy = class {
@@ -242,14 +251,16 @@ var InputClearStrategy = class {
242
251
  };
243
252
 
244
253
  // src/pageObjects/elements/Editors/AbstractEditor.ts
245
- var AbstractDXEditorWithInput = class extends AbstractFormElement {
254
+ var AbstractDXEditorWithInput = class extends AbstractElementWithParent {
246
255
  clearStrategy = new InputClearStrategy();
247
256
  setClearStrategy(strategy) {
248
257
  this.clearStrategy = strategy;
249
258
  }
259
+ getInputCssSelector() {
260
+ return `${this.getFullCssSelector()} .dx-texteditor-input`;
261
+ }
250
262
  async getInputElement() {
251
- const controlEl = await this.getElement();
252
- return controlEl.findElement(By5.className("dx-texteditor-input"));
263
+ return this.driver.findElement(By6.css(this.getInputCssSelector()));
253
264
  }
254
265
  async getInputValue() {
255
266
  const inputEl = await this.getInputElement();
@@ -267,8 +278,8 @@ var AbstractDXEditorWithInput = class extends AbstractFormElement {
267
278
 
268
279
  // src/pageObjects/elements/Editors/TextEditor.ts
269
280
  var TextEditor = class extends AbstractDXEditorWithInput {
270
- constructor(getParentElement, elementBy, driver) {
271
- super(getParentElement, elementBy, driver);
281
+ constructor(parentCssSelector, elementCssSelector, driver) {
282
+ super(parentCssSelector, elementCssSelector, driver);
272
283
  this.setClearStrategy(new InputClearStrategy());
273
284
  }
274
285
  getValue() {
@@ -281,8 +292,8 @@ var TextEditor = class extends AbstractDXEditorWithInput {
281
292
 
282
293
  // src/pageObjects/elements/Editors/NumberEditor.ts
283
294
  var NumberEditor = class extends AbstractDXEditorWithInput {
284
- constructor(getParentElement, elementBy, driver) {
285
- super(getParentElement, elementBy, driver);
295
+ constructor(parentCssSelector, elementCssSelector, driver) {
296
+ super(parentCssSelector, elementCssSelector, driver);
286
297
  this.setClearStrategy(new InputClearStrategy());
287
298
  }
288
299
  async getValue() {
@@ -294,11 +305,17 @@ var NumberEditor = class extends AbstractDXEditorWithInput {
294
305
  }
295
306
  };
296
307
 
308
+ // src/pageObjects/AbstractFormElement.ts
309
+ var AbstractFormElement = class extends AbstractElementWithParent {
310
+ constructor(parentCssSelector, elementCssSelector, driver) {
311
+ super(parentCssSelector, elementCssSelector, driver);
312
+ }
313
+ };
314
+
297
315
  // src/pageObjects/elements/Editors/CheckBox.ts
298
- var CheckBox = class extends AbstractFormElement {
316
+ var CheckBox = class extends AbstractElementWithParent {
299
317
  async getValue() {
300
- const inputEl = await this.getElement();
301
- const result = await inputEl.getAttribute("aria-checked");
318
+ const result = await this.getAttribute("aria-checked");
302
319
  if (result === "true")
303
320
  return 1;
304
321
  if (result === "false")
@@ -315,7 +332,7 @@ var CheckBox = class extends AbstractFormElement {
315
332
  };
316
333
 
317
334
  // src/pageObjects/elements/Editors/SelectBoxEditor.ts
318
- import { By as By7, Key as Key2 } from "selenium-webdriver";
335
+ import { By as By8, Key as Key2 } from "selenium-webdriver";
319
336
 
320
337
  // src/utils/xpathHelper.ts
321
338
  var XPathHelper = class {
@@ -328,28 +345,28 @@ var XPathHelper = class {
328
345
  };
329
346
 
330
347
  // src/pageObjects/elements/Editors/ClearStrategy/ClearButtonStrategy.ts
331
- import { By as By6 } from "selenium-webdriver";
348
+ import { By as By7 } from "selenium-webdriver";
332
349
  var DX_TEXTEDITOR_EMPTY = "dx-texteditor-empty";
333
350
  var DX_CLEAR_BUTTON_AREA = "dx-clear-button-area";
334
351
  var ClearButtonStrategy = class {
335
352
  editorContainerClass;
336
- constructor(editorContainerClass) {
353
+ _driver;
354
+ constructor(editorContainerClass, driver) {
337
355
  this.editorContainerClass = editorContainerClass;
356
+ this._driver = driver;
338
357
  }
339
- async isEmptyEditorField(editor) {
340
- const parentEl = await editor.getParentElement();
341
- const editorContainer = await parentEl.findElement(By6.className(this.editorContainerClass));
358
+ async isEmptyEditorField() {
359
+ const editorContainer = await this._driver.findElement(By7.css(this.editorContainerClass));
342
360
  const classAttribute = await editorContainer.getAttribute("class");
343
361
  return classAttribute.includes(DX_TEXTEDITOR_EMPTY);
344
362
  }
345
- async clear(editor) {
346
- if (await this.isEmptyEditorField(editor)) {
363
+ async clear() {
364
+ if (await this.isEmptyEditorField()) {
347
365
  throw new Error("This field is already empty");
348
366
  }
349
- const clearBtnSelector = `.${this.editorContainerClass} .${DX_CLEAR_BUTTON_AREA}`;
350
- const parentEl = await editor.getParentElement();
351
- const clearBtn = await parentEl.findElement(By6.css(clearBtnSelector));
352
- await click(clearBtn, editor.driver);
367
+ const clearBtnSelector = `${this.editorContainerClass} .${DX_CLEAR_BUTTON_AREA}`;
368
+ const clearBtn = await this._driver.findElement(By7.css(clearBtnSelector));
369
+ await click(clearBtn, this._driver);
353
370
  }
354
371
  };
355
372
 
@@ -360,25 +377,17 @@ var combinedValueXpath = (value) => `${XPathHelper.getRoleXpath(SELECT_BOX_ELEME
360
377
  SELECT_BOX_OPTION_TEXT_CONTAINER_CLASS,
361
378
  value
362
379
  )}`;
363
- var DX_SELECTBOX = "dx-selectbox";
364
380
  var SelectBoxEditor = class extends AbstractDXEditorWithInput {
365
- constructor(getParentElement, elementBy, driver) {
366
- super(getParentElement, elementBy, driver);
367
- this.setClearStrategy(new ClearButtonStrategy(DX_SELECTBOX));
381
+ constructor(parentCssSelector, elementCssSelector, driver) {
382
+ super(parentCssSelector, elementCssSelector, driver);
383
+ this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
368
384
  }
369
385
  async setSelectInputValue(value) {
370
386
  const inputEl = await this.getInputElement();
371
387
  await click(inputEl, this.driver);
372
388
  await inputEl.sendKeys(value, Key2.ENTER);
373
- await this.driver.wait(async () => {
374
- try {
375
- const optElement = await inputEl.findElement(By7.xpath(combinedValueXpath(value)));
376
- await click(optElement, this.driver);
377
- return true;
378
- } catch (e) {
379
- return false;
380
- }
381
- }, 2e3);
389
+ const optElement = await inputEl.findElement(By8.xpath(combinedValueXpath(value)));
390
+ await click(optElement, this.driver);
382
391
  }
383
392
  async getValue() {
384
393
  const value = await super.getInputValue();
@@ -390,10 +399,9 @@ var SelectBoxEditor = class extends AbstractDXEditorWithInput {
390
399
  };
391
400
 
392
401
  // src/pageObjects/elements/Editors/SwitchEditor.ts
393
- var SwitchEditor = class extends AbstractFormElement {
402
+ var SwitchEditor = class extends AbstractElementWithParent {
394
403
  async getValue() {
395
- const inputEl = await this.getElement();
396
- const result = await inputEl.getAttribute("aria-label");
404
+ const result = await this.getAttribute("aria-label");
397
405
  if (result === "ON")
398
406
  return 1;
399
407
  if (result === "OFF")
@@ -406,27 +414,27 @@ var SwitchEditor = class extends AbstractFormElement {
406
414
  }
407
415
  const inputEl = await this.getElement();
408
416
  const currentValue = await this.getValue();
409
- if (currentValue !== value) {
410
- await click(inputEl, this.driver);
411
- await this.driver.wait(async () => {
412
- const updatedValue = await this.getValue();
413
- return updatedValue !== currentValue;
414
- });
417
+ if (currentValue === value) {
418
+ return;
415
419
  }
420
+ await click(inputEl, this.driver);
421
+ await wait(async () => {
422
+ const updatedValue = await this.getValue();
423
+ return updatedValue !== currentValue;
424
+ }, this.driver);
416
425
  }
417
426
  };
418
427
 
419
428
  // src/pageObjects/elements/Editors/TagBox.ts
420
- import { By as By8 } from "selenium-webdriver";
429
+ import { By as By9 } from "selenium-webdriver";
421
430
  var TAGS_SELECTOR = ".dx-tag .tag-text";
422
431
  var DX_TAG_CONTAINER = "dx-tag-container";
423
- var DX_TAGBOX = "dx-tagbox";
424
432
  var DX_TEXTEDITOR_EMPTY2 = "dx-texteditor-empty";
425
433
  var BTN_OK_SELECTOR = ".dx-tagbox-popup-wrapper .dx-popup-bottom .dx-button.dx-popup-done";
426
434
  var TagBox = class extends AbstractDXEditorWithInput {
427
- constructor(getParentElement, elementBy, driver) {
428
- super(getParentElement, elementBy, driver);
429
- this.setClearStrategy(new ClearButtonStrategy(DX_TAGBOX));
435
+ constructor(parentCssSelector, elementCssSelector, driver) {
436
+ super(parentCssSelector, elementCssSelector, driver);
437
+ this.setClearStrategy(new ClearButtonStrategy(this.getFullCssSelector(), this.driver));
430
438
  }
431
439
  async setTagBoxInputValue(values) {
432
440
  const lastElement = values[values.length - 1];
@@ -439,35 +447,26 @@ var TagBox = class extends AbstractDXEditorWithInput {
439
447
  }
440
448
  async selectOption(inputEl, value, lastElement) {
441
449
  await inputEl.sendKeys(value);
442
- await this.driver.wait(async () => {
443
- try {
444
- const optElement = await inputEl.findElement(By8.xpath(combinedValueXpath(value)));
445
- await click(optElement, this.driver);
446
- return true;
447
- } catch (e) {
448
- return false;
449
- }
450
- });
450
+ const optElement = await inputEl.findElement(By9.xpath(combinedValueXpath(value)));
451
+ await click(optElement, this.driver);
451
452
  if (value !== lastElement) {
452
453
  await inputEl.clear();
453
454
  }
454
455
  }
455
456
  async confirmSelection() {
456
457
  const inputEl = await this.getInputElement();
457
- const option = await inputEl.findElement(By8.xpath(XPathHelper.getRoleXpath(SELECT_BOX_ELEMENT_ROLE)));
458
- const btnOk = await this.driver.findElement(By8.css(BTN_OK_SELECTOR));
459
- await this.driver.wait(async () => {
458
+ const option = await inputEl.findElement(By9.xpath(XPathHelper.getRoleXpath(SELECT_BOX_ELEMENT_ROLE)));
459
+ const btnOk = await this.driver.findElement(By9.css(BTN_OK_SELECTOR));
460
+ await wait(async () => {
460
461
  return await option.getAttribute("aria-selected") === "true";
461
- });
462
+ }, this.driver);
462
463
  await click(btnOk, this.driver);
463
464
  }
464
465
  async getTagBoxInputValue() {
465
466
  if (await this.isTagBoxEmpty()) {
466
467
  return [];
467
468
  }
468
- const parentEl = await this.getParentElement();
469
- const inputEl = await parentEl.findElement(By8.className(DX_TAG_CONTAINER));
470
- const tags = await inputEl.findElements(By8.css(TAGS_SELECTOR));
469
+ const tags = await this.driver.findElements(By9.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${TAGS_SELECTOR}`));
471
470
  const values = [];
472
471
  for (const tag of tags) {
473
472
  const text = await tag.getText();
@@ -476,9 +475,7 @@ var TagBox = class extends AbstractDXEditorWithInput {
476
475
  return values;
477
476
  }
478
477
  async isTagBoxEmpty() {
479
- const parentEl = await this.getParentElement();
480
- const tagboxContainer = await parentEl.findElement(By8.className(DX_TAGBOX));
481
- const classAttribute = await tagboxContainer.getAttribute("class");
478
+ const classAttribute = await this.getClasses();
482
479
  return classAttribute.includes(DX_TEXTEDITOR_EMPTY2);
483
480
  }
484
481
  async getValue() {
@@ -497,28 +494,25 @@ var TagBox = class extends AbstractDXEditorWithInput {
497
494
  if (!tagExists) {
498
495
  throw new Error(`The tag with the text: ${itemText} was not found`);
499
496
  }
500
- const parentEl = await this.getParentElement();
501
- const inputEl = await parentEl.findElement(By8.className(DX_TAG_CONTAINER));
502
- const clearBtnTestId = byTestId(`clear-button-${itemText}`);
503
- const clearBtn = await inputEl.findElement(clearBtnTestId);
497
+ const clearBtnTestId = byTestIdCssSelector(`clear-button-${itemText}`);
498
+ const clearBtn = await this.driver.findElement(By9.css(`${this.getFullCssSelector()} .${DX_TAG_CONTAINER} ${clearBtnTestId}`));
504
499
  await click(clearBtn, this.driver);
505
500
  }
506
501
  };
507
502
 
508
503
  // src/pageObjects/elements/Editors/ButtonGroup.ts
509
- import { By as By9 } from "selenium-webdriver";
504
+ import { By as By10 } from "selenium-webdriver";
510
505
  var ITEM_CLASS = "dx-buttongroup-item";
511
506
  var SELECTED_CLASS = "dx-state-selected";
512
- var ButtonGroup = class extends AbstractFormElement {
513
- async getItems() {
514
- return (await this.getElement()).findElements(By9.className(ITEM_CLASS));
507
+ var ButtonGroup = class extends AbstractElementWithParent {
508
+ getItems() {
509
+ return this.driver.findElements(By10.css(`${this.getFullCssSelector()} .${ITEM_CLASS}`));
515
510
  }
516
511
  getDataValue(el) {
517
512
  return el.getAttribute("data-value");
518
513
  }
519
514
  async getValue() {
520
- const inputEl = await this.getElement();
521
- const selectedEl = await inputEl.findElement(By9.className(`${ITEM_CLASS} ${SELECTED_CLASS}`));
515
+ const selectedEl = await this.driver.findElement(By10.css(`${this.getFullCssSelector()} .${ITEM_CLASS}.${SELECTED_CLASS}`));
522
516
  return this.getDataValue(selectedEl);
523
517
  }
524
518
  async setValue(value) {
@@ -552,19 +546,14 @@ var BooleanSelector = class extends ButtonGroup {
552
546
  };
553
547
 
554
548
  // src/pageObjects/elements/Editors/DateEditor.ts
555
- import { By as By10, Key as Key3 } from "selenium-webdriver";
549
+ import { By as By11, Key as Key3 } from "selenium-webdriver";
556
550
  var DateEditor = class extends AbstractDXEditorWithInput {
557
- constructor(getParentElement, elementBy, driver) {
558
- super(getParentElement, elementBy, driver);
551
+ constructor(parentCssSelector, elementCssSelector, driver) {
552
+ super(parentCssSelector, elementCssSelector, driver);
559
553
  this.setClearStrategy(new InputClearStrategy());
560
554
  }
561
- async getControlElement() {
562
- const controlEl = await this.getElement();
563
- return controlEl.findElement(By10.className("dx-dropdowneditor-input-wrapper"));
564
- }
565
555
  async getDateElement() {
566
- const controlEl = await this.getControlElement();
567
- return controlEl.findElement(By10.css("input[type=hidden]"));
556
+ return this.driver.findElement(By11.css(this.getFullCssSelector() + " .dx-dropdowneditor-input-wrapper input[type=hidden]"));
568
557
  }
569
558
  async setDateValue(value) {
570
559
  const dateEl = await this.getInputElement();
@@ -594,27 +583,27 @@ var DateEditor = class extends AbstractDXEditorWithInput {
594
583
  };
595
584
 
596
585
  // src/pageObjects/elements/Editors/editorFactory.ts
597
- var editorFactory = async (getParentElement, elementBy, driver) => {
598
- const elementInstance = new AbstractFormElement(getParentElement, elementBy, driver);
586
+ var editorFactory = async (parentCssSelector, elementCssSelector, driver) => {
587
+ const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
599
588
  const classSting = await elementInstance.getClasses();
600
589
  if (classSting.includes("text-control"))
601
- return new TextEditor(getParentElement, elementBy, driver);
590
+ return new TextEditor(parentCssSelector, elementCssSelector, driver);
602
591
  if (classSting.includes("number-control"))
603
- return new NumberEditor(getParentElement, elementBy, driver);
592
+ return new NumberEditor(parentCssSelector, elementCssSelector, driver);
604
593
  if (classSting.includes("check-box"))
605
- return new CheckBox(getParentElement, elementBy, driver);
594
+ return new CheckBox(parentCssSelector, elementCssSelector, driver);
606
595
  if (classSting.includes("multi-select-control"))
607
- return new TagBox(getParentElement, elementBy, driver);
596
+ return new TagBox(parentCssSelector, elementCssSelector, driver);
608
597
  if (classSting.includes("select-control"))
609
- return new SelectBoxEditor(getParentElement, elementBy, driver);
598
+ return new SelectBoxEditor(parentCssSelector, elementCssSelector, driver);
610
599
  if (classSting.includes("switch-control"))
611
- return new SwitchEditor(getParentElement, elementBy, driver);
600
+ return new SwitchEditor(parentCssSelector, elementCssSelector, driver);
612
601
  if (classSting.includes("date-control"))
613
- return new DateEditor(getParentElement, elementBy, driver);
602
+ return new DateEditor(parentCssSelector, elementCssSelector, driver);
614
603
  if (classSting.includes("buttons-group"))
615
- return new BooleanSelector(getParentElement, elementBy, driver);
604
+ return new BooleanSelector(parentCssSelector, elementCssSelector, driver);
616
605
  if (classSting.includes("button-group-field"))
617
- return new ButtonGroup(getParentElement, elementBy, driver);
606
+ return new ButtonGroup(parentCssSelector, elementCssSelector, driver);
618
607
  throw new Error("Unknown type of editor. Please write ticket to the support");
619
608
  };
620
609
 
@@ -635,13 +624,12 @@ function createTableId(formName) {
635
624
  // src/pageObjects/elements/FormField.ts
636
625
  var FormField = class extends AbstractElementWithParent {
637
626
  editor;
638
- constructor(getParentElement, formName, name, driver) {
639
- super(getParentElement, driver);
640
- this.elementBy = byTestId(createFieldTestId(formName, name));
627
+ constructor(parentCssSelector, formName, name, driver) {
628
+ super(parentCssSelector, byTestIdCssSelector(createFieldTestId(formName, name)), driver);
641
629
  }
642
630
  async initEditor() {
643
631
  if (!this.editor) {
644
- this.editor = await editorFactory(this.getParentElement, this.elementBy, this.driver);
632
+ this.editor = await editorFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
645
633
  }
646
634
  }
647
635
  /**
@@ -691,36 +679,35 @@ var FormField = class extends AbstractElementWithParent {
691
679
  };
692
680
 
693
681
  // src/pageObjects/elements/Groups/AbstractGroup.ts
694
- var AbstractDXGroup = class extends AbstractFormElement {
695
- };
696
-
697
- // src/pageObjects/elements/Groups/Panel.ts
698
- var Panel = class extends AbstractDXGroup {
682
+ var AbstractGroup = class extends AbstractElementWithParent {
699
683
  async isDisplayed() {
700
684
  const groupElement = await this.getElement();
701
685
  return await groupElement.isDisplayed();
702
686
  }
703
687
  };
704
688
 
689
+ // src/pageObjects/elements/Groups/Panel.ts
690
+ var Panel = class extends AbstractGroup {
691
+ };
692
+
705
693
  // src/pageObjects/elements/Groups/groupFactory.ts
706
- var groupFactory = async (getParentElement, elementBy, driver) => {
707
- const elementInstance = new AbstractFormElement(getParentElement, elementBy, driver);
694
+ var groupFactory = async (parentCssSelector, elementCssSelector, driver) => {
695
+ const elementInstance = new AbstractFormElement(parentCssSelector, elementCssSelector, driver);
708
696
  const classSting = await elementInstance.getClasses();
709
697
  if (classSting.includes("panel-group"))
710
- return new Panel(getParentElement, elementBy, driver);
698
+ return new Panel(parentCssSelector, elementCssSelector, driver);
711
699
  throw new Error("Unknown type of group. Please write ticket to the support");
712
700
  };
713
701
 
714
702
  // src/pageObjects/elements/FormGroup.ts
715
703
  var FormGroup = class extends AbstractElementWithParent {
716
704
  editor;
717
- constructor(getParentElement, formName, name, driver) {
718
- super(getParentElement, driver);
719
- this.elementBy = byTestId(createGroupTestId(formName, name));
705
+ constructor(parentCssSelector, formName, name, driver) {
706
+ super(parentCssSelector, byTestIdCssSelector(createGroupTestId(formName, name)), driver);
720
707
  }
721
708
  async initEditor() {
722
709
  if (!this.editor) {
723
- this.editor = await groupFactory(this.getParentElement, this.elementBy, this.driver);
710
+ this.editor = await groupFactory(this.parentCssSelector, this.elementCssSelector, this.driver);
724
711
  }
725
712
  }
726
713
  /**
@@ -729,17 +716,21 @@ var FormGroup = class extends AbstractElementWithParent {
729
716
  * expect(await tableList.group('MainSuperPanel').isDisplayed();
730
717
  */
731
718
  async isDisplayed() {
732
- await this.initEditor();
733
- return this.editor.isDisplayed();
719
+ try {
720
+ await this.initEditor();
721
+ return this.editor.isDisplayed();
722
+ } catch {
723
+ return false;
724
+ }
734
725
  }
735
726
  };
736
727
 
737
728
  // src/pageObjects/elements/Forms/FormEdit.ts
738
729
  var FormEdit = class extends AbstractForm {
739
- saveButtonBy = By11.id("button-save");
730
+ saveButtonBy = By12.id("button-save");
740
731
  constructor(driver) {
741
732
  super(driver);
742
- this.popupContainerBy = By11.className(`popup form-edit-${this.formName}`);
733
+ this.popupContainerCssSelector = `.popup .form-edit-${this.formName}`;
743
734
  }
744
735
  /**
745
736
  * Находит поле формы редактирования по имени
@@ -749,7 +740,7 @@ var FormEdit = class extends AbstractForm {
749
740
  * expect(await formEdit.field('Name').getValue()).toBe('test value');
750
741
  */
751
742
  field(name) {
752
- return new FormField(this.getContainerElement, this.formName, name, this.driver);
743
+ return new FormField(this.containerCssSelector, this.formName, name, this.driver);
753
744
  }
754
745
  /**
755
746
  * Проверяет не отключена ли кнопка Сохранить
@@ -771,7 +762,7 @@ var FormEdit = class extends AbstractForm {
771
762
  * expect(await formEdit.group('Name');
772
763
  */
773
764
  group(name) {
774
- return new FormGroup(this.getContainerElement, this.formName, name, this.driver);
765
+ return new FormGroup(this.containerCssSelector, this.formName, name, this.driver);
775
766
  }
776
767
  /**
777
768
  * Нажатие на кнопку Сохранить
@@ -782,50 +773,55 @@ var FormEdit = class extends AbstractForm {
782
773
  */
783
774
  async saveButtonClick() {
784
775
  const saveButton = await this.driver.findElement(this.saveButtonBy);
785
- await this.driver.wait(async () => !await this.isSaveButtonDisabled(), void 0, "Button is disabled");
776
+ await wait(async () => !await this.isSaveButtonDisabled(), this.driver, "Button is disabled");
786
777
  await click(saveButton, this.driver);
787
778
  }
788
779
  };
789
780
 
790
- // src/pageObjects/elements/Forms/ListForm.ts
791
- import { By as By17 } from "selenium-webdriver";
792
-
793
781
  // src/pageObjects/elements/Table/Table.ts
782
+ import { By as By16 } from "selenium-webdriver";
783
+
784
+ // src/pageObjects/elements/Table/elements/Row.ts
794
785
  import { By as By14 } from "selenium-webdriver";
795
786
 
796
787
  // src/pageObjects/elements/Table/utils.ts
797
- import { By as By12 } from "selenium-webdriver";
798
- var getRowPathByIndex = (index) => {
799
- return By12.css(`tr[aria-rowindex="${transformInputIndex(index)}"]`);
800
- };
788
+ import { By as By13 } from "selenium-webdriver";
789
+ function getCssRowByIndexSelector(index) {
790
+ return `tr[aria-rowindex="${transformInputIndex(index)}"]`;
791
+ }
801
792
  var getColumnByIndexCssSelector = (columnIndex) => `td[aria-colindex="${transformInputIndex(columnIndex)}"]`;
802
- var getColumnPathByIndex = (index) => {
803
- return By12.css(getColumnByIndexCssSelector(index));
804
- };
805
793
  var getColumnByCaptionCssSelector = (caption) => `td[role="columnheader"][aria-label="Column ${caption}"]`;
806
- var getCellPathByIndex = (index) => {
807
- return By12.css(`td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`);
808
- };
794
+ function getCssCellByIndexSelector(index) {
795
+ return `td[role="gridcell"][aria-colindex="${transformInputIndex(index)}"]`;
796
+ }
809
797
  var transformInputIndex = (index) => index + 1;
810
798
  var transformOutputIndex = (index) => +index - 1;
811
799
 
812
- // src/pageObjects/elements/Table/elements/Row.ts
813
- import { By as By13 } from "selenium-webdriver";
814
-
815
800
  // src/pageObjects/elements/Table/elements/Cell.ts
816
801
  var Cell = class extends AbstractElementWithParent {
817
- index;
818
- constructor(rowEl, index, driver) {
819
- super(() => Promise.resolve(rowEl), driver);
820
- this.index = index;
821
- this.elementBy = getCellPathByIndex(index);
802
+ _index;
803
+ getCellIndex;
804
+ constructor(parentCssSelector, getCellIndex, index, driver) {
805
+ super(parentCssSelector, getCssCellByIndexSelector(index), driver);
806
+ this.getCellIndex = getCellIndex;
807
+ this._index = index;
808
+ }
809
+ set index(index) {
810
+ this._index = index;
811
+ this.elementCssSelector = getCssCellByIndexSelector(index);
812
+ }
813
+ async getElement() {
814
+ if (this._index == null) {
815
+ this.index = await this.getCellIndex();
816
+ }
817
+ return super.getElement();
822
818
  }
823
819
  async getValue() {
824
820
  const cellEl = await this.getElement();
825
821
  return cellEl.getText();
826
822
  }
827
823
  getIndex() {
828
- return this.index;
824
+ return this._index;
829
825
  }
830
826
  };
831
827
 
@@ -836,50 +832,42 @@ var DX_DATA_ROW_CLASS = "dx-data-row";
836
832
  var Row = class extends AbstractElementWithParent {
837
833
  index;
838
834
  getColumnByCaption;
839
- constructor(getParentElement, index, driver, getColumnByCaption) {
840
- super(getParentElement, driver);
835
+ constructor(parentCssSelector, index, driver, getColumnByCaption) {
836
+ super(parentCssSelector, getCssRowByIndexSelector(index), driver);
841
837
  this.index = index;
842
- this.elementBy = getRowPathByIndex(index);
843
838
  this.getColumnByCaption = getColumnByCaption;
844
839
  }
845
- async getCellByIndex(index) {
846
- const rowEl = await this.getElement();
847
- const cell = rowEl.findElement(getCellPathByIndex(index));
848
- if (cell) {
849
- return new Cell(rowEl, index, this.driver);
850
- }
851
- throw new Error(`Cannot find cell by index: ${index}`);
840
+ _getCell(index, caption) {
841
+ return new Cell(this.getFullCssSelector(), () => {
842
+ return this.getColumnByCaption(caption).getIndex();
843
+ }, index, this.driver);
852
844
  }
853
- async getCell(caption) {
854
- const column = await this.getColumnByCaption(caption);
855
- if (column) {
856
- const index = column.getIndex();
857
- return this.getCellByIndex(index);
858
- }
859
- throw new Error("Unknown caption of cell");
845
+ getCellByIndex(index) {
846
+ return this._getCell(index);
847
+ }
848
+ getCell(caption) {
849
+ return this._getCell(void 0, caption);
860
850
  }
861
851
  async select() {
862
852
  const rowEl = await this.getElement();
863
853
  await click(rowEl, this.driver);
864
- await this.driver.wait(async () => {
865
- const classes = await rowEl.getAttribute("class");
854
+ await wait(async () => {
855
+ const classes = await this.getClasses();
866
856
  return classes.includes(DX_SELECTION_CLASS);
867
- }, 500, "Cannot select row");
857
+ }, this.driver, "Cannot select row");
868
858
  }
869
859
  async isSelected() {
870
- const rowEl = await this.getElement();
871
- const result = await rowEl.getAttribute("aria-selected");
860
+ const result = await this.getAttribute("aria-selected");
872
861
  return result === "true";
873
862
  }
874
863
  getIndex() {
875
864
  return this.index;
876
865
  }
877
866
  async getCells() {
878
- const rowEl = await this.getElement();
879
- const cells = await rowEl.findElements(By13.css(`td[role="gridcell"]`));
867
+ const cells = await this.driver.findElements(By14.css(`${this.getFullCssSelector()} td[role="gridcell"]`));
880
868
  const result = [];
881
869
  cells.forEach((_, index) => {
882
- const newCell = new Cell(rowEl, index, this.driver);
870
+ const newCell = this.getCellByIndex(index);
883
871
  result.push(newCell);
884
872
  });
885
873
  return result;
@@ -887,15 +875,13 @@ var Row = class extends AbstractElementWithParent {
887
875
  async clickInlineButton(buttonClass) {
888
876
  const FIXED_TABLE_CSS_SELECTOR = ".dx-fixed-columns .dx-datagrid-content.dx-datagrid-content-fixed";
889
877
  const buttonCssSelector = `.${DX_DATA_ROW_CLASS}[aria-rowindex="${transformInputIndex(this.index)}"] .${buttonClass}`;
890
- const button = (await this.getParentElement()).findElement(
891
- By13.css(`${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`)
892
- );
878
+ const button = await this.driver.findElement(By14.css(`${this.parentCssSelector} ${FIXED_TABLE_CSS_SELECTOR} ${buttonCssSelector}`));
893
879
  return click(button, this.driver);
894
880
  }
895
881
  async checkEditingMode(isEditing, msg) {
896
- await this.driver.wait(async () => {
882
+ await wait(async () => {
897
883
  return (await this.getClasses()).includes(DX_ROW_EDIT_CLASS) === isEditing;
898
- }, 2e3, msg);
884
+ }, this.driver, msg);
899
885
  }
900
886
  async edit() {
901
887
  await this.clickInlineButton("edit");
@@ -912,18 +898,41 @@ var Row = class extends AbstractElementWithParent {
912
898
  };
913
899
 
914
900
  // src/pageObjects/elements/Table/elements/Column.ts
901
+ import { By as By15 } from "selenium-webdriver";
902
+ var getHeaderCssSelector = () => {
903
+ return ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
904
+ };
915
905
  var Column = class extends AbstractElementWithParent {
916
- index;
917
- constructor(getParentElement, index, driver) {
918
- super(getParentElement, driver);
906
+ _index;
907
+ _caption;
908
+ constructor(parentCssSelector, caption, index, driver) {
909
+ super(parentCssSelector, "", driver);
919
910
  this.index = index;
920
- this.elementBy = getColumnPathByIndex(index);
911
+ this._caption = caption;
912
+ }
913
+ set index(index) {
914
+ this._index = index;
915
+ this.elementCssSelector = getColumnByIndexCssSelector(index);
916
+ }
917
+ get index() {
918
+ return this._index;
919
+ }
920
+ async getElement() {
921
+ await this.getIndex();
922
+ return super.getElement();
923
+ }
924
+ async getIndexByCaption() {
925
+ const column = await this.driver.findElement(By15.css(`${this.parentCssSelector} ${getHeaderCssSelector()} ${getColumnByCaptionCssSelector(this._caption)}`));
926
+ return transformOutputIndex(await column.getAttribute("aria-colindex"));
921
927
  }
922
928
  async caption() {
923
929
  const el = await this.getElement();
924
930
  return el.getText();
925
931
  }
926
- getIndex() {
932
+ async getIndex() {
933
+ if (this.index == null) {
934
+ this.index = await this.getIndexByCaption();
935
+ }
927
936
  return this.index;
928
937
  }
929
938
  };
@@ -931,67 +940,36 @@ var Column = class extends AbstractElementWithParent {
931
940
  // src/pageObjects/elements/Table/Table.ts
932
941
  var Table = class extends AbstractElementWithParent {
933
942
  formName;
934
- constructor(getParentElement, formName, driver) {
935
- super(getParentElement, driver);
936
- this.elementBy = By14.id(createTableId(formName));
943
+ constructor(parentCssSelector, formName, driver) {
944
+ super(parentCssSelector, `#${createTableId(formName)}`, driver);
937
945
  this.formName = formName;
938
946
  }
939
- getHeaderCssSelector() {
940
- return ".dx-datagrid-headers .dx-datagrid-content:not(.dx-datagrid-content-fixed)";
947
+ getRowByIndex(index) {
948
+ return new Row(this.getFullCssSelector(), index, this.driver, this.getColumnByCaption.bind(this));
941
949
  }
942
- async getDataGrid() {
943
- const parentEl = await this.getElement();
944
- return parentEl.findElement(By14.css(`div[role="grid"]`));
950
+ getColumnByIndex(index) {
951
+ return new Column(this.getFullCssSelector(), void 0, index, this.driver);
945
952
  }
946
- getTableElement = () => {
947
- return this.getElement();
953
+ getColumnByCaption = (caption) => {
954
+ return new Column(this.getFullCssSelector(), caption, void 0, this.driver);
948
955
  };
949
- async getRowByIndex(index) {
950
- const gridContainer = await this.getDataGrid();
951
- const row = await gridContainer.findElement(getRowPathByIndex(index));
952
- if (row) {
953
- return new Row(this.getTableElement, index, this.driver, this.getColumnByCaption.bind(this));
954
- }
955
- throw new Error(`Cannot find row by index: ${index}`);
956
- }
957
- async getColumnByIndex(index) {
958
- const column = await (await this.getElement()).findElement(By14.css(`${this.getHeaderCssSelector()} ${getColumnByIndexCssSelector(index)}`));
959
- if (column) {
960
- return new Column(this.getTableElement, index, this.driver);
961
- }
962
- throw new Error(`Cannot find column by index: ${index}`);
963
- }
964
- async getColumnByCaption(caption) {
965
- const column = await (await this.getElement()).findElement(By14.css(`${this.getHeaderCssSelector()} ${getColumnByCaptionCssSelector(caption)}`));
966
- if (column) {
967
- const index = await column.getAttribute("aria-colindex");
968
- return new Column(this.getTableElement, transformOutputIndex(index), this.driver);
969
- }
970
- throw new Error(`Cannot find column by caption: ${caption}`);
971
- }
972
- async selectRowByIndex(index) {
973
- const row = await this.getRowByIndex(index);
974
- if (row) {
975
- await row.select();
976
- } else {
977
- throw new Error(`Cannot find row by index: ${index}`);
978
- }
956
+ selectRowByIndex(index) {
957
+ return this.getRowByIndex(index).select();
979
958
  }
980
959
  async getRows() {
981
- const gridContainer = await this.getDataGrid();
982
- const rows = await gridContainer.findElements(By14.className("dx-row dx-data-row"));
960
+ const rows = await this.driver.findElements(By16.css(`${this.getFullCssSelector()} .dx-row.dx-data-row`));
983
961
  const result = [];
984
962
  rows.forEach((_, index) => {
985
- const newRow = new Row(this.getTableElement, index, this.driver, this.getColumnByCaption.bind(this));
963
+ const newRow = new Row(this.getFullCssSelector(), index, this.driver, this.getColumnByCaption);
986
964
  result.push(newRow);
987
965
  });
988
966
  return result;
989
967
  }
990
968
  async getColumns() {
991
- const columns = await (await this.getElement()).findElements(By14.css(`${this.getHeaderCssSelector()} td[role="columnheader"]`));
969
+ const columns = await this.driver.findElements(By16.css(`${this.getFullCssSelector()} ${getHeaderCssSelector()} td[role="columnheader"]`));
992
970
  const result = [];
993
971
  columns.forEach((_, index) => {
994
- const newCol = new Column(this.getTableElement, index, this.driver);
972
+ const newCol = new Column(this.getFullCssSelector(), void 0, index, this.driver);
995
973
  result.push(newCol);
996
974
  });
997
975
  return result;
@@ -1007,54 +985,39 @@ var Table = class extends AbstractElementWithParent {
1007
985
  * expect(await form.field('Name').getValue()).toBe('test value');
1008
986
  */
1009
987
  field(name) {
1010
- return new FormField(this.getTableElement, this.formName, name, this.driver);
988
+ return new FormField(this.getFullCssSelector(), this.formName, name, this.driver);
1011
989
  }
1012
990
  };
1013
991
 
1014
- // src/pageObjects/elements/TableToolbar/TableToolbar.ts
1015
- import { By as By16 } from "selenium-webdriver";
1016
-
1017
992
  // src/pageObjects/elements/TableToolbar/TableToolbarButton.ts
1018
- import { By as By15 } from "selenium-webdriver";
1019
993
  var TOOLBAR_BUTTON_CLASS = "toolbar-button";
1020
994
  var TableToolbarButton = class extends AbstractElementWithParent {
1021
995
  name;
1022
- constructor(getParentElement, name, driver) {
1023
- super(getParentElement, driver);
996
+ constructor(parentCssSelector, name, driver) {
997
+ super(parentCssSelector, `#${TOOLBAR_BUTTON_CLASS}-${name}`, driver);
1024
998
  this.name = name;
1025
- this.elementBy = By15.id(`${TOOLBAR_BUTTON_CLASS}-${name}`);
1026
999
  }
1027
1000
  async click() {
1028
1001
  const button = await this.getElement();
1029
- await this.driver.wait(async () => {
1002
+ await wait(async () => {
1030
1003
  return await button.isDisplayed() && !await this.isDisabled();
1031
- }, 1e3, `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`);
1032
- return click(button, this.driver);
1004
+ }, this.driver, `Button ${this.name} cannot be clicked. It is not displayed or it is disabled`);
1005
+ await click(button, this.driver);
1033
1006
  }
1034
1007
  async isDisabled() {
1035
1008
  const button = await this.getElement();
1036
- const result = await button.getAttribute("aria-disabled");
1037
- return result === "true";
1009
+ return await button.getCssValue("pointer-events") === "none";
1038
1010
  }
1039
1011
  };
1040
1012
 
1041
1013
  // src/pageObjects/elements/TableToolbar/TableToolbar.ts
1042
1014
  var TABLE_TOOLBAR_CLASS = "d5-table-toolbar";
1043
1015
  var TableToolbar = class extends AbstractElementWithParent {
1044
- constructor(getParentElement, formName, driver) {
1045
- super(getParentElement, driver);
1046
- this.elementBy = By16.id(`${TABLE_TOOLBAR_CLASS}-${formName}`);
1016
+ constructor(parentCssSelector, formName, driver) {
1017
+ super(parentCssSelector, `#${TABLE_TOOLBAR_CLASS}-${formName}`, driver);
1047
1018
  }
1048
- getTableToolbarElement = () => {
1049
- return this.driver.findElement(this.elementBy);
1050
- };
1051
- async button(name) {
1052
- const toolbar = await this.getTableToolbarElement();
1053
- const button = await toolbar.findElement(By16.id(`${TOOLBAR_BUTTON_CLASS}-${name}`));
1054
- if (button) {
1055
- return new TableToolbarButton(this.getTableToolbarElement, name, this.driver);
1056
- }
1057
- throw new Error(`Cannot find button by name: ${name}`);
1019
+ button(name) {
1020
+ return new TableToolbarButton(this.getFullCssSelector(), name, this.driver);
1058
1021
  }
1059
1022
  };
1060
1023
 
@@ -1062,7 +1025,7 @@ var TableToolbar = class extends AbstractElementWithParent {
1062
1025
  var ListForm = class extends AbstractForm {
1063
1026
  constructor(driver) {
1064
1027
  super(driver);
1065
- this.popupContainerBy = By17.className(`popup form-inline-${this.formName}`);
1028
+ this.popupContainerCssSelector = `.popup .form-inline-${this.formName}`;
1066
1029
  }
1067
1030
  /**
1068
1031
  * Находит таблицу
@@ -1072,7 +1035,7 @@ var ListForm = class extends AbstractForm {
1072
1035
  * expect(listForm.table());
1073
1036
  */
1074
1037
  table() {
1075
- return new Table(this.getContainerElement, this.formName, this.driver);
1038
+ return new Table(this.containerCssSelector, this.formName, this.driver);
1076
1039
  }
1077
1040
  /**
1078
1041
  * Находит группу на лист форме по имени
@@ -1082,7 +1045,7 @@ var ListForm = class extends AbstractForm {
1082
1045
  * expect(await formEdit.group('Name');
1083
1046
  */
1084
1047
  group(name) {
1085
- return new FormGroup(this.getContainerElement, this.formName, name, this.driver);
1048
+ return new FormGroup(this.containerCssSelector, this.formName, name, this.driver);
1086
1049
  }
1087
1050
  /**
1088
1051
  * Находит таблицу
@@ -1092,7 +1055,7 @@ var ListForm = class extends AbstractForm {
1092
1055
  * expect(listForm.toolbarButton());
1093
1056
  */
1094
1057
  toolbarButton(name) {
1095
- const toolbar = new TableToolbar(this.getContainerElement, this.formName, this.driver);
1058
+ const toolbar = new TableToolbar(this.containerCssSelector, this.formName, this.driver);
1096
1059
  return toolbar.button(name);
1097
1060
  }
1098
1061
  };
@@ -1159,11 +1122,13 @@ export {
1159
1122
  SubsystemsPanel,
1160
1123
  TextEditor,
1161
1124
  byTestId,
1125
+ byTestIdCssSelector,
1162
1126
  click,
1163
1127
  config,
1164
1128
  createDriver,
1165
1129
  editorFactory,
1166
1130
  elementIsNotPresent,
1167
1131
  signIn,
1132
+ wait,
1168
1133
  waitElementIsVisible
1169
1134
  };