d5-testing-library 1.6.0 → 1.7.0-alpha.1

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.
@@ -120,10 +120,29 @@ declare function signIn(driver?: WebDriver): Promise<WebDriver>;
120
120
  */
121
121
  declare const click: (webElement: WebElement, driver?: WebDriver) => Promise<void>;
122
122
 
123
- declare class SubsystemsPanel extends AbstractElement {
124
- private header;
125
- constructor(driver?: WebDriver);
126
- headerTitle(): Promise<string>;
123
+ interface Editor {
124
+ setValue(value: any): Promise<void>;
125
+ getValue(): Promise<any>;
126
+ remove?(itemText: string): Promise<void>;
127
+ clear?(): Promise<void>;
128
+ isReadonly?(): Promise<boolean>;
129
+ }
130
+ declare enum ControlClass {
131
+ Text = "text-control",
132
+ TextArea = "text-area-control",
133
+ Number = "number-control",
134
+ CheckBox = "check-box",
135
+ Multiselect = "multi-select-control",
136
+ Select = "select-control",
137
+ Switch = "switch-control",
138
+ Date = "date-control",
139
+ SingleDateRange = "single-date-range-control",
140
+ BooleanSelector = "buttons-group",
141
+ ButtonGroup = "button-group-field"
142
+ }
143
+
144
+ interface ClearStrategy {
145
+ clear(editor: Editor): Promise<void>;
127
146
  }
128
147
 
129
148
  declare abstract class AbstractElementWithParent extends AbstractElement {
@@ -133,6 +152,92 @@ declare abstract class AbstractElementWithParent extends AbstractElement {
133
152
  isReadonly(): Promise<boolean>;
134
153
  }
135
154
 
155
+ declare abstract class AbstractDXEditorWithInput extends AbstractElementWithParent implements Editor {
156
+ private clearStrategy;
157
+ protected setClearStrategy(strategy: ClearStrategy): void;
158
+ protected getInputCssSelector(): string;
159
+ getInputElement(): Promise<selenium_webdriver.WebElement>;
160
+ protected getInputValue(): Promise<string>;
161
+ protected setInputValue(value: string): Promise<void>;
162
+ clear(): Promise<void>;
163
+ abstract setValue(value: any): Promise<void>;
164
+ abstract getValue(): Promise<any>;
165
+ }
166
+
167
+ declare class TextEditor extends AbstractDXEditorWithInput {
168
+ constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
169
+ getValue(): Promise<string>;
170
+ setValue(value: string): Promise<void>;
171
+ }
172
+
173
+ declare class NumberEditor extends AbstractDXEditorWithInput {
174
+ constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
175
+ getValue(): Promise<number | null>;
176
+ setValue(value: any): Promise<void>;
177
+ }
178
+
179
+ declare const editorFactory: (parentCssSelector: string, elementCssSelector: string, driver: WebDriver) => Promise<Editor>;
180
+
181
+ interface ISubsystemItem {
182
+ driver?: WebDriver;
183
+ bySelector: By;
184
+ }
185
+ declare class SubsystemItem {
186
+ private readonly bySelector;
187
+ private readonly driver;
188
+ constructor({ driver, bySelector }: ISubsystemItem);
189
+ getElement(): Promise<selenium_webdriver.WebElement>;
190
+ getTitle(): Promise<string>;
191
+ click(): Promise<void>;
192
+ }
193
+
194
+ declare class SubsystemsPanel extends AbstractElement {
195
+ private header;
196
+ constructor(driver?: WebDriver);
197
+ headerTitle(): Promise<string>;
198
+ protected getSearchComponent(): TextEditor;
199
+ /**
200
+ * Находит сабсистему по заголовку
201
+ * @example
202
+ * const subsystemsPanel= new SubsystemsPanel();
203
+ * //...
204
+ * await subsystemsPanel.search('SubSystemTitle');
205
+ */
206
+ search(title: string): Promise<void>;
207
+ /**
208
+ * Очищает поиск сабсистем
209
+ * @example
210
+ * const subsystemsPanel= new SubsystemsPanel();
211
+ * //...
212
+ * await subsystemsPanel.searchClear();
213
+ */
214
+ searchClear(): Promise<void>;
215
+ /**
216
+ * Возвращает сабсистему по имени
217
+ * @example
218
+ * const subsystemsPanel= new SubsystemsPanel();
219
+ * //...
220
+ * const subsystem = subsystemsPanel.item('SubSystemName');
221
+ */
222
+ item(name: string): SubsystemItem;
223
+ /**
224
+ * Возвращает сабсистему по заголовку
225
+ * @example
226
+ * const subsystemsPanel= new SubsystemsPanel();
227
+ * //...
228
+ * const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
229
+ */
230
+ itemByTitle(title: string): SubsystemItem;
231
+ /**
232
+ * Возвращается на уровень выше по сабсистемам
233
+ * @example
234
+ * const subsystemsPanel= new SubsystemsPanel();
235
+ * //...
236
+ * wait subsystemsPanel.back();
237
+ */
238
+ back(): Promise<void>;
239
+ }
240
+
136
241
  interface Button {
137
242
  click(): Promise<void>;
138
243
  isDisabled(): Promise<boolean>;
@@ -191,6 +296,7 @@ declare class FormGroup extends AbstractElementWithParent implements Group {
191
296
  expand(): Promise<void>;
192
297
  isExpanded(): Promise<boolean>;
193
298
  isCollapsed(): Promise<boolean>;
299
+ isActive(): Promise<boolean>;
194
300
  }
195
301
 
196
302
  declare class AbstractForm extends AbstractPage {
@@ -244,57 +350,6 @@ declare abstract class Form extends AbstractForm {
244
350
  subForm(name: string): Promise<unknown>;
245
351
  }
246
352
 
247
- interface Editor {
248
- setValue(value: any): Promise<void>;
249
- getValue(): Promise<any>;
250
- remove?(itemText: string): Promise<void>;
251
- clear?(): Promise<void>;
252
- isReadonly?(): Promise<boolean>;
253
- }
254
- declare enum ControlClass {
255
- Text = "text-control",
256
- TextArea = "text-area-control",
257
- Number = "number-control",
258
- CheckBox = "check-box",
259
- Multiselect = "multi-select-control",
260
- Select = "select-control",
261
- Switch = "switch-control",
262
- Date = "date-control",
263
- SingleDateRange = "single-date-range-control",
264
- BooleanSelector = "buttons-group",
265
- ButtonGroup = "button-group-field"
266
- }
267
-
268
- interface ClearStrategy {
269
- clear(editor: Editor): Promise<void>;
270
- }
271
-
272
- declare abstract class AbstractDXEditorWithInput extends AbstractElementWithParent implements Editor {
273
- private clearStrategy;
274
- protected setClearStrategy(strategy: ClearStrategy): void;
275
- protected getInputCssSelector(): string;
276
- getInputElement(): Promise<selenium_webdriver.WebElement>;
277
- protected getInputValue(): Promise<string>;
278
- protected setInputValue(value: string): Promise<void>;
279
- clear(): Promise<void>;
280
- abstract setValue(value: any): Promise<void>;
281
- abstract getValue(): Promise<any>;
282
- }
283
-
284
- declare class TextEditor extends AbstractDXEditorWithInput {
285
- constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
286
- getValue(): Promise<string>;
287
- setValue(value: string): Promise<void>;
288
- }
289
-
290
- declare class NumberEditor extends AbstractDXEditorWithInput {
291
- constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
292
- getValue(): Promise<number | null>;
293
- setValue(value: any): Promise<void>;
294
- }
295
-
296
- declare const editorFactory: (parentCssSelector: string, elementCssSelector: string, driver: WebDriver) => Promise<Editor>;
297
-
298
353
  declare class AbstractEditor extends AbstractElementWithParent implements Editor {
299
354
  protected editor: Editor;
300
355
  constructor(parentCssSelector: string, elementCssSelector: string, driver?: WebDriver);
@@ -543,7 +598,7 @@ declare class PanelFilterField extends AbstractEditor {
543
598
  }
544
599
 
545
600
  declare class FilterPanel extends AbstractElement {
546
- private _formName;
601
+ private readonly _formName;
547
602
  private get filterPanelSelector();
548
603
  private filterPanelButtons;
549
604
  constructor(formName: string, driver?: WebDriver);
@@ -560,6 +615,52 @@ declare class FilterPanel extends AbstractElement {
560
615
  close(): Promise<void>;
561
616
  }
562
617
 
618
+ declare class HeaderFilterField extends AbstractEditor {
619
+ constructor(parentCssSelector: string, formName: string, name: string, driver?: WebDriver);
620
+ getValue(): Promise<any>;
621
+ setValue(value: any): Promise<void>;
622
+ clear(): Promise<void>;
623
+ remove(itemText: string): Promise<void>;
624
+ }
625
+
626
+ declare class ColumnFilter extends AbstractElement {
627
+ private readonly _formName;
628
+ private readonly _name;
629
+ private _column;
630
+ constructor(formName: string, name: string, column: Column, driver?: WebDriver);
631
+ private getApplyButton;
632
+ private getCancelButton;
633
+ protected apply(): Promise<void>;
634
+ protected cancel(): Promise<void>;
635
+ protected initFilter(): Promise<HeaderFilterField>;
636
+ /**
637
+ * Возвращает значение в поле
638
+ * @example
639
+ * expect(await form.columnFilter('NumberFld').getValue()).toBe(10);
640
+ * expect(await form.columnFilter('TextFld').getValue()).toBe('TestValue');
641
+ */
642
+ getValue(): Promise<any>;
643
+ /**
644
+ * Устанавливает значение в поле
645
+ * @example
646
+ * await form.columnFilter('NumberFld').setValue(123);
647
+ * await form.columnFilter('TextFld').setValue('TestValue');
648
+ */
649
+ setValue(value: any): Promise<void>;
650
+ /**
651
+ * Очищает значение в поле
652
+ * @example
653
+ * await form.columnFilter('NumberFld').clear();
654
+ */
655
+ clear(): Promise<void>;
656
+ /**
657
+ * Удаляет тег по переданному тексту
658
+ * @example
659
+ * await form.columnFilter('TagBox').remove('test');
660
+ */
661
+ remove(itemText: string): Promise<void>;
662
+ }
663
+
563
664
  declare class ListForm extends Form {
564
665
  protected headerCssSelector: string;
565
666
  constructor(driver: WebDriver);
@@ -587,6 +688,7 @@ declare class ListForm extends Form {
587
688
  * expect(listForm.formFilter());
588
689
  */
589
690
  formFilter(name: string): FormFilterField;
691
+ columnFilter(name: string): ColumnFilter;
590
692
  /**
591
693
  * Модель панели фильтрации
592
694
  * @returns {FilterPanel}
@@ -1,21 +1,22 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-CFJ5JWM7.mjs";
3
+ } from "./chunk-Q67RHZDP.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-3EQV252X.mjs";
9
+ } from "./chunk-WUPIBFH7.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-PNSQQKEY.mjs";
12
+ } from "./chunk-CKCSBNKD.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
16
16
  AbstractElementWithParent,
17
17
  AbstractPage,
18
18
  ControlClass,
19
+ DX_CLEAR_BUTTON_AREA,
19
20
  FormField,
20
21
  NumberEditor,
21
22
  TextEditor,
@@ -23,11 +24,13 @@ import {
23
24
  byTestIdCssSelector,
24
25
  click,
25
26
  config,
27
+ createSubSystemTestId,
26
28
  editorFactory,
29
+ fixElementStaleError,
27
30
  readonlyLocator,
28
31
  wait,
29
32
  waitElementIsVisible
30
- } from "./chunk-4VLJL7OZ.mjs";
33
+ } from "./chunk-JITTN2NY.mjs";
31
34
 
32
35
  // src/pageObjects/pages/LoginPage.ts
33
36
  var LOGIN_PATH = "/login";
@@ -103,6 +106,36 @@ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
103
106
  };
104
107
 
105
108
  // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
109
+ import { By as By3 } from "selenium-webdriver";
110
+
111
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemItem.ts
112
+ var SubsystemItem = class {
113
+ bySelector;
114
+ driver;
115
+ constructor({ driver, bySelector }) {
116
+ this.bySelector = bySelector;
117
+ this.driver = driver;
118
+ }
119
+ async getElement() {
120
+ return fixElementStaleError(this.bySelector, this.driver);
121
+ }
122
+ async getTitle() {
123
+ const el = await this.getElement();
124
+ return await el.getAttribute("data-title");
125
+ }
126
+ async click() {
127
+ const el = await this.getElement();
128
+ await click(el, this.driver);
129
+ }
130
+ };
131
+
132
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
133
+ var SEARCH_ITEM_SELECTOR = "search-item";
134
+ var BACK_BUTTON_SELECTOR = "subsystem-back-item";
135
+ var SEARCH_INPUT_SELECTOR = "search-subsystem-input";
136
+ var byTitleCssSelector = (title) => {
137
+ return `span[data-title="${title}"]`;
138
+ };
106
139
  var SubsystemsPanel = class extends AbstractElement {
107
140
  header;
108
141
  constructor(driver) {
@@ -114,15 +147,90 @@ var SubsystemsPanel = class extends AbstractElement {
114
147
  await wait(async () => await title.getText() != "", this.driver);
115
148
  return title.getText();
116
149
  }
150
+ getSearchComponent() {
151
+ return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR));
152
+ }
153
+ /**
154
+ * Находит сабсистему по заголовку
155
+ * @example
156
+ * const subsystemsPanel= new SubsystemsPanel();
157
+ * //...
158
+ * await subsystemsPanel.search('SubSystemTitle');
159
+ */
160
+ async search(title) {
161
+ const searchComponent = this.getSearchComponent();
162
+ await searchComponent.setValue(title);
163
+ await wait(
164
+ async () => {
165
+ const findElement = await this.itemByTitle(title).getElement();
166
+ const classes = await findElement.getAttribute("class");
167
+ return classes.includes(SEARCH_ITEM_SELECTOR);
168
+ },
169
+ this.driver,
170
+ `Cannot find element: ${title}`
171
+ );
172
+ }
173
+ /**
174
+ * Очищает поиск сабсистем
175
+ * @example
176
+ * const subsystemsPanel= new SubsystemsPanel();
177
+ * //...
178
+ * await subsystemsPanel.searchClear();
179
+ */
180
+ async searchClear() {
181
+ const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
182
+ const clearBtn = await this.driver.findElement(By3.css(clearBtnSelector));
183
+ if (await clearBtn.isDisplayed()) {
184
+ await click(clearBtn, this.driver);
185
+ }
186
+ }
187
+ /**
188
+ * Возвращает сабсистему по имени
189
+ * @example
190
+ * const subsystemsPanel= new SubsystemsPanel();
191
+ * //...
192
+ * const subsystem = subsystemsPanel.item('SubSystemName');
193
+ */
194
+ item(name) {
195
+ const elementCSS = createSubSystemTestId(name);
196
+ return new SubsystemItem({ driver: this.driver, bySelector: By3.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
197
+ }
198
+ /**
199
+ * Возвращает сабсистему по заголовку
200
+ * @example
201
+ * const subsystemsPanel= new SubsystemsPanel();
202
+ * //...
203
+ * const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
204
+ */
205
+ itemByTitle(title) {
206
+ return new SubsystemItem({ driver: this.driver, bySelector: By3.css(byTitleCssSelector(title)) });
207
+ }
208
+ /**
209
+ * Возвращается на уровень выше по сабсистемам
210
+ * @example
211
+ * const subsystemsPanel= new SubsystemsPanel();
212
+ * //...
213
+ * wait subsystemsPanel.back();
214
+ */
215
+ async back() {
216
+ const backButton = this.driver.findElement(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`));
217
+ await waitElementIsVisible(
218
+ {
219
+ element: backButton,
220
+ driver: this.driver
221
+ }
222
+ );
223
+ await click(backButton, this.driver);
224
+ }
117
225
  };
118
226
 
119
227
  // src/pageObjects/elements/Forms/ReportForm.ts
120
- import { By as By3 } from "selenium-webdriver";
228
+ import { By as By4 } from "selenium-webdriver";
121
229
  var ReportForm = class extends FormEdit {
122
230
  constructor(driver) {
123
231
  super(driver);
124
232
  this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
125
- this.saveButtonBy = By3.id("button-apply");
233
+ this.saveButtonBy = By4.id("button-apply");
126
234
  }
127
235
  /**
128
236
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -137,7 +245,7 @@ var ReportForm = class extends FormEdit {
137
245
  };
138
246
 
139
247
  // src/pageObjects/elements/Dialog.ts
140
- import { By as By4 } from "selenium-webdriver";
248
+ import { By as By5 } from "selenium-webdriver";
141
249
  var DIALOG_CLASS = ".d5-dialog";
142
250
  var DIALOG_TITLE_CLASS = ".dialog__title";
143
251
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -151,7 +259,7 @@ var DialogButton = class extends AbstractButton {
151
259
  }
152
260
  async getElement() {
153
261
  const panel = await super.getElement();
154
- return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
262
+ return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
155
263
  }
156
264
  buttonNotDisplayedError() {
157
265
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -171,11 +279,11 @@ var Dialog = class extends AbstractElement {
171
279
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
172
280
  }
173
281
  async title() {
174
- const el = await this.driver.findElement(By4.css(this.titleSelector));
282
+ const el = await this.driver.findElement(By5.css(this.titleSelector));
175
283
  return await el.getText();
176
284
  }
177
285
  async text() {
178
- const el = await this.driver.findElement(By4.css(this.textSelector));
286
+ const el = await this.driver.findElement(By5.css(this.textSelector));
179
287
  return await el.getText();
180
288
  }
181
289
  button(text) {
@@ -1,21 +1,22 @@
1
1
  import {
2
2
  TreeView
3
- } from "./chunk-CFJ5JWM7.mjs";
3
+ } from "./chunk-Q67RHZDP.mjs";
4
4
  import {
5
5
  FilterPanel,
6
6
  FormFilterField,
7
7
  ListForm,
8
8
  PanelFilterField
9
- } from "./chunk-3EQV252X.mjs";
9
+ } from "./chunk-WUPIBFH7.mjs";
10
10
  import {
11
11
  FormEdit
12
- } from "./chunk-PNSQQKEY.mjs";
12
+ } from "./chunk-CKCSBNKD.mjs";
13
13
  import {
14
14
  AbstractButton,
15
15
  AbstractElement,
16
16
  AbstractElementWithParent,
17
17
  AbstractPage,
18
18
  ControlClass,
19
+ DX_CLEAR_BUTTON_AREA,
19
20
  FormField,
20
21
  NumberEditor,
21
22
  TextEditor,
@@ -23,11 +24,13 @@ import {
23
24
  byTestIdCssSelector,
24
25
  click,
25
26
  config,
27
+ createSubSystemTestId,
26
28
  editorFactory,
29
+ fixElementStaleError,
27
30
  readonlyLocator,
28
31
  wait,
29
32
  waitElementIsVisible
30
- } from "./chunk-4VLJL7OZ.mjs";
33
+ } from "./chunk-JITTN2NY.mjs";
31
34
 
32
35
  // src/pageObjects/pages/LoginPage.ts
33
36
  var LOGIN_PATH = "/login";
@@ -103,6 +106,36 @@ var SubsystemsPanelHeader = class extends AbstractElementWithParent {
103
106
  };
104
107
 
105
108
  // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
109
+ import { By as By3 } from "selenium-webdriver";
110
+
111
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemItem.ts
112
+ var SubsystemItem = class {
113
+ bySelector;
114
+ driver;
115
+ constructor({ driver, bySelector }) {
116
+ this.bySelector = bySelector;
117
+ this.driver = driver;
118
+ }
119
+ async getElement() {
120
+ return fixElementStaleError(this.bySelector, this.driver);
121
+ }
122
+ async getTitle() {
123
+ const el = await this.getElement();
124
+ return await el.getAttribute("data-title");
125
+ }
126
+ async click() {
127
+ const el = await this.getElement();
128
+ await click(el, this.driver);
129
+ }
130
+ };
131
+
132
+ // src/pageObjects/elements/SubsystemsPanel/SubsystemsPanel.ts
133
+ var SEARCH_ITEM_SELECTOR = "search-item";
134
+ var BACK_BUTTON_SELECTOR = "subsystem-back-item";
135
+ var SEARCH_INPUT_SELECTOR = "search-subsystem-input";
136
+ var byTitleCssSelector = (title) => {
137
+ return `span[data-title="${title}"]`;
138
+ };
106
139
  var SubsystemsPanel = class extends AbstractElement {
107
140
  header;
108
141
  constructor(driver) {
@@ -114,15 +147,90 @@ var SubsystemsPanel = class extends AbstractElement {
114
147
  await wait(async () => await title.getText() != "", this.driver);
115
148
  return title.getText();
116
149
  }
150
+ getSearchComponent() {
151
+ return new TextEditor("#aside", byTestIdCssSelector(SEARCH_INPUT_SELECTOR));
152
+ }
153
+ /**
154
+ * Находит сабсистему по заголовку
155
+ * @example
156
+ * const subsystemsPanel= new SubsystemsPanel();
157
+ * //...
158
+ * await subsystemsPanel.search('SubSystemTitle');
159
+ */
160
+ async search(title) {
161
+ const searchComponent = this.getSearchComponent();
162
+ await searchComponent.setValue(title);
163
+ await wait(
164
+ async () => {
165
+ const findElement = await this.itemByTitle(title).getElement();
166
+ const classes = await findElement.getAttribute("class");
167
+ return classes.includes(SEARCH_ITEM_SELECTOR);
168
+ },
169
+ this.driver,
170
+ `Cannot find element: ${title}`
171
+ );
172
+ }
173
+ /**
174
+ * Очищает поиск сабсистем
175
+ * @example
176
+ * const subsystemsPanel= new SubsystemsPanel();
177
+ * //...
178
+ * await subsystemsPanel.searchClear();
179
+ */
180
+ async searchClear() {
181
+ const clearBtnSelector = `#aside ${byTestIdCssSelector(SEARCH_INPUT_SELECTOR)} .${DX_CLEAR_BUTTON_AREA}`;
182
+ const clearBtn = await this.driver.findElement(By3.css(clearBtnSelector));
183
+ if (await clearBtn.isDisplayed()) {
184
+ await click(clearBtn, this.driver);
185
+ }
186
+ }
187
+ /**
188
+ * Возвращает сабсистему по имени
189
+ * @example
190
+ * const subsystemsPanel= new SubsystemsPanel();
191
+ * //...
192
+ * const subsystem = subsystemsPanel.item('SubSystemName');
193
+ */
194
+ item(name) {
195
+ const elementCSS = createSubSystemTestId(name);
196
+ return new SubsystemItem({ driver: this.driver, bySelector: By3.css(`${byTestIdCssSelector(elementCSS, "span")}`) });
197
+ }
198
+ /**
199
+ * Возвращает сабсистему по заголовку
200
+ * @example
201
+ * const subsystemsPanel= new SubsystemsPanel();
202
+ * //...
203
+ * const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
204
+ */
205
+ itemByTitle(title) {
206
+ return new SubsystemItem({ driver: this.driver, bySelector: By3.css(byTitleCssSelector(title)) });
207
+ }
208
+ /**
209
+ * Возвращается на уровень выше по сабсистемам
210
+ * @example
211
+ * const subsystemsPanel= new SubsystemsPanel();
212
+ * //...
213
+ * wait subsystemsPanel.back();
214
+ */
215
+ async back() {
216
+ const backButton = this.driver.findElement(By3.css(`#aside .${BACK_BUTTON_SELECTOR}`));
217
+ await waitElementIsVisible(
218
+ {
219
+ element: backButton,
220
+ driver: this.driver
221
+ }
222
+ );
223
+ await click(backButton, this.driver);
224
+ }
117
225
  };
118
226
 
119
227
  // src/pageObjects/elements/Forms/ReportForm.ts
120
- import { By as By3 } from "selenium-webdriver";
228
+ import { By as By4 } from "selenium-webdriver";
121
229
  var ReportForm = class extends FormEdit {
122
230
  constructor(driver) {
123
231
  super(driver);
124
232
  this.popupContainerCssSelector = `.popup .form-report-${this.formName}`;
125
- this.saveButtonBy = By3.id("button-apply");
233
+ this.saveButtonBy = By4.id("button-apply");
126
234
  }
127
235
  /**
128
236
  * Знаходить поле/фільтр у формі репорту за ім'ям
@@ -137,7 +245,7 @@ var ReportForm = class extends FormEdit {
137
245
  };
138
246
 
139
247
  // src/pageObjects/elements/Dialog.ts
140
- import { By as By4 } from "selenium-webdriver";
248
+ import { By as By5 } from "selenium-webdriver";
141
249
  var DIALOG_CLASS = ".d5-dialog";
142
250
  var DIALOG_TITLE_CLASS = ".dialog__title";
143
251
  var DIALOG_TEXT_CLASS = ".dialog__text";
@@ -151,7 +259,7 @@ var DialogButton = class extends AbstractButton {
151
259
  }
152
260
  async getElement() {
153
261
  const panel = await super.getElement();
154
- return panel.findElement(By4.xpath(buttonByTextXpath(this.text)));
262
+ return panel.findElement(By5.xpath(buttonByTextXpath(this.text)));
155
263
  }
156
264
  buttonNotDisplayedError() {
157
265
  return `Dialog button ${this.text} cannot be clicked. It is not displayed or it is disabled`;
@@ -171,11 +279,11 @@ var Dialog = class extends AbstractElement {
171
279
  return this.joinRelativeCssSelectors([DIALOG_CLASS, DIALOG_BUTTONS_PANEL_CLASS]);
172
280
  }
173
281
  async title() {
174
- const el = await this.driver.findElement(By4.css(this.titleSelector));
282
+ const el = await this.driver.findElement(By5.css(this.titleSelector));
175
283
  return await el.getText();
176
284
  }
177
285
  async text() {
178
- const el = await this.driver.findElement(By4.css(this.textSelector));
286
+ const el = await this.driver.findElement(By5.css(this.textSelector));
179
287
  return await el.getText();
180
288
  }
181
289
  button(text) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d5-testing-library",
3
- "version": "1.6.0",
3
+ "version": "1.7.0-alpha.1",
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",
@@ -22,7 +22,9 @@
22
22
  "build": "tsup",
23
23
  "changelog": "node ./scripts/releaseChangelog.mjs changelog -p v1.0.1",
24
24
  "prepublishOnly": "yarn clean",
25
- "prepack": "yarn build"
25
+ "prepack": "yarn build",
26
+ "preminor": "npm version preminor --preid=alpha",
27
+ "prerelease": "npm version prerelease --preid=alpha"
26
28
  },
27
29
  "files": [
28
30
  "dist"
@@ -1,7 +0,0 @@
1
- import {
2
- FormEdit
3
- } from "./chunk-PNSQQKEY.mjs";
4
- import "./chunk-4VLJL7OZ.mjs";
5
- export {
6
- FormEdit as default
7
- };
@@ -1,7 +0,0 @@
1
- import {
2
- ListForm
3
- } from "./chunk-3EQV252X.mjs";
4
- import "./chunk-4VLJL7OZ.mjs";
5
- export {
6
- ListForm as default
7
- };