d5-testing-library 1.9.0-alpha.1 → 1.9.0-alpha.2
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.
- package/dist/cjs/d5-testing-library.d.ts +989 -0
- package/package.json +10 -5
|
@@ -0,0 +1,989 @@
|
|
|
1
|
+
import * as selenium_webdriver from 'selenium-webdriver';
|
|
2
|
+
import { Browser, WebDriver, WebElement, By, Condition } from 'selenium-webdriver';
|
|
3
|
+
|
|
4
|
+
type DriverType = typeof Browser;
|
|
5
|
+
type BrowserList = DriverType[keyof DriverType];
|
|
6
|
+
type IConfig = {
|
|
7
|
+
auth: {
|
|
8
|
+
host: string;
|
|
9
|
+
login: string;
|
|
10
|
+
password: string;
|
|
11
|
+
};
|
|
12
|
+
timeout: number;
|
|
13
|
+
browser: BrowserList;
|
|
14
|
+
headless?: 'true' | 'false';
|
|
15
|
+
};
|
|
16
|
+
declare function config(cfg?: IConfig): IConfig;
|
|
17
|
+
|
|
18
|
+
declare abstract class AbstractElement {
|
|
19
|
+
driver: WebDriver;
|
|
20
|
+
protected elementCssSelector: string;
|
|
21
|
+
protected constructor(driver: WebDriver, elementCssSelector?: string);
|
|
22
|
+
protected getFullCssSelector(): string;
|
|
23
|
+
protected joinRelativeCssSelectors(selectors: string[]): string;
|
|
24
|
+
getElement(): Promise<WebElement>;
|
|
25
|
+
getAttribute(attr: string): Promise<string>;
|
|
26
|
+
getClasses(): Promise<string>;
|
|
27
|
+
getDataTestId(): Promise<string>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare abstract class AbstractPage extends AbstractElement {
|
|
31
|
+
protected url: string;
|
|
32
|
+
protected host: string;
|
|
33
|
+
constructor(driver: WebDriver);
|
|
34
|
+
private prependHash;
|
|
35
|
+
protected goToUrl(url: string): Promise<void>;
|
|
36
|
+
protected get path(): string;
|
|
37
|
+
locate(): Promise<void>;
|
|
38
|
+
reloadPage(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
declare class LoginPage extends AbstractPage {
|
|
42
|
+
usernameField: By;
|
|
43
|
+
passwordField: By;
|
|
44
|
+
loginButton: By;
|
|
45
|
+
locate(): Promise<void>;
|
|
46
|
+
get path(): string;
|
|
47
|
+
enterUsername(username: string): Promise<void>;
|
|
48
|
+
enterPassword(password: string): Promise<void>;
|
|
49
|
+
clickLoginButton(): Promise<void>;
|
|
50
|
+
loginWith(username: string, password: string): Promise<void>;
|
|
51
|
+
authorize(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare const byTestIdCssSelector: (testId: string, element?: string) => string;
|
|
55
|
+
/**
|
|
56
|
+
* Returns a By locator object that can be used to locate an element by its test ID.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} testId - The test ID of the element.
|
|
59
|
+
* @param {string} [element='div'] - The HTML tag name of the element (optional).
|
|
60
|
+
* @returns {By} - The By locator object.
|
|
61
|
+
*/
|
|
62
|
+
declare const byTestId: (testId: string, element?: string) => By;
|
|
63
|
+
declare const readonlyLocator = "readonly";
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Creates a WebDriver instance for the specified browser.
|
|
67
|
+
* If no browser parameter is provided, it uses the default browser specified in the configuration.
|
|
68
|
+
* The default timeout is also set based on the configuration.
|
|
69
|
+
*
|
|
70
|
+
* @param {BrowserList} browser - The browser to create the WebDriver instance for.
|
|
71
|
+
* @returns {Promise<WebDriver>} A promise that resolves to the WebDriver instance.
|
|
72
|
+
*/
|
|
73
|
+
declare const createDriver: (browser?: BrowserList) => Promise<WebDriver>;
|
|
74
|
+
|
|
75
|
+
declare const elementIsNotPresent: (locator: By) => Condition<boolean>;
|
|
76
|
+
|
|
77
|
+
type WithElement$1 = {
|
|
78
|
+
element: WebElement;
|
|
79
|
+
};
|
|
80
|
+
type WithBy$1 = {
|
|
81
|
+
by: By;
|
|
82
|
+
};
|
|
83
|
+
type Args$1 = {
|
|
84
|
+
timeout?: number;
|
|
85
|
+
errorMessage?: string;
|
|
86
|
+
driver: WebDriver;
|
|
87
|
+
};
|
|
88
|
+
type ArgsWithElement$1 = Args$1 & WithElement$1;
|
|
89
|
+
type ArgsWithWithBy$1 = Args$1 & WithBy$1;
|
|
90
|
+
declare function waitElementIsVisible(args: ArgsWithElement$1): Promise<void>;
|
|
91
|
+
declare function waitElementIsVisible(args: ArgsWithWithBy$1): Promise<void>;
|
|
92
|
+
|
|
93
|
+
type WithElement = {
|
|
94
|
+
element: WebElement;
|
|
95
|
+
};
|
|
96
|
+
type WithBy = {
|
|
97
|
+
by: By;
|
|
98
|
+
};
|
|
99
|
+
type Args = {
|
|
100
|
+
timeout?: number;
|
|
101
|
+
errorMessage?: string;
|
|
102
|
+
driver: WebDriver;
|
|
103
|
+
};
|
|
104
|
+
type ArgsWithElement = Args & WithElement;
|
|
105
|
+
type ArgsWithWithBy = Args & WithBy;
|
|
106
|
+
declare function waitElementIsClickable(args: ArgsWithElement): Promise<void>;
|
|
107
|
+
declare function waitElementIsClickable(args: ArgsWithWithBy): Promise<void>;
|
|
108
|
+
|
|
109
|
+
interface WaiteParams {
|
|
110
|
+
condition: (driver: WebDriver) => Promise<boolean>;
|
|
111
|
+
timeout?: number;
|
|
112
|
+
errorMessage?: string;
|
|
113
|
+
driver: WebDriver;
|
|
114
|
+
}
|
|
115
|
+
declare function safeWait(condition: WaiteParams['condition'], driver: WebDriver, errorMessage?: string, timeout?: number): Promise<void>;
|
|
116
|
+
|
|
117
|
+
declare function signIn(driver?: WebDriver): Promise<WebDriver>;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Clicks on a specified web element.
|
|
121
|
+
*
|
|
122
|
+
* @param {WebElement} webElement - The web element to click on.
|
|
123
|
+
* @param {WebDriver} [driver] - The web driver instance to use. If not provided, the default driver from the configuration is used.
|
|
124
|
+
* @returns {Promise<void>} A promise that resolves when the click action is complete.
|
|
125
|
+
*/
|
|
126
|
+
declare const click: (webElement: WebElement, driver: WebDriver) => Promise<void>;
|
|
127
|
+
declare const contextMenu: (webElement: WebElement, driver: WebDriver) => Promise<void>;
|
|
128
|
+
|
|
129
|
+
interface Editor {
|
|
130
|
+
setValue(value: any): Promise<void>;
|
|
131
|
+
getValue(): Promise<any>;
|
|
132
|
+
remove?(itemText: string): Promise<void>;
|
|
133
|
+
clear?(): Promise<void>;
|
|
134
|
+
isReadonly?(): Promise<boolean>;
|
|
135
|
+
}
|
|
136
|
+
declare enum ControlClass {
|
|
137
|
+
Text = "text-control",
|
|
138
|
+
TextArea = "text-area-control",
|
|
139
|
+
Number = "number-control",
|
|
140
|
+
CheckBox = "check-box",
|
|
141
|
+
Multiselect = "multi-select-control",
|
|
142
|
+
Select = "select-control",
|
|
143
|
+
Switch = "switch-control",
|
|
144
|
+
Date = "date-control",
|
|
145
|
+
SingleDateRange = "single-date-range-control",
|
|
146
|
+
BooleanSelector = "buttons-group",
|
|
147
|
+
ButtonGroup = "button-group-field",
|
|
148
|
+
HeaderFilterDictionary = "header-filter-dictionary"
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
interface ClearStrategy {
|
|
152
|
+
clear(editor: Editor): Promise<void>;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
declare abstract class AbstractElementWithParent extends AbstractElement {
|
|
156
|
+
protected parentCssSelector: string;
|
|
157
|
+
constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
|
|
158
|
+
protected getFullCssSelector(): string;
|
|
159
|
+
isReadonly(): Promise<boolean>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
declare abstract class AbstractDXEditorWithInput extends AbstractElementWithParent implements Editor {
|
|
163
|
+
private clearStrategy;
|
|
164
|
+
protected setClearStrategy(strategy: ClearStrategy): void;
|
|
165
|
+
protected getInputCssSelector(): string;
|
|
166
|
+
getInputElement(): Promise<selenium_webdriver.WebElement>;
|
|
167
|
+
protected getInputValue(): Promise<string>;
|
|
168
|
+
protected setInputValue(value: string): Promise<void>;
|
|
169
|
+
clear(): Promise<void>;
|
|
170
|
+
abstract setValue(value: any): Promise<void>;
|
|
171
|
+
abstract getValue(): Promise<any>;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
declare class TextEditor extends AbstractDXEditorWithInput {
|
|
175
|
+
constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
|
|
176
|
+
getValue(): Promise<string | null>;
|
|
177
|
+
setValue(value: string): Promise<void>;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
declare class NumberEditor extends AbstractDXEditorWithInput {
|
|
181
|
+
constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
|
|
182
|
+
getValue(): Promise<number | null>;
|
|
183
|
+
setValue(value: any): Promise<void>;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
declare const editorFactory: (parentCssSelector: string, elementCssSelector: string, driver: WebDriver) => Promise<Editor>;
|
|
187
|
+
|
|
188
|
+
interface ISubsystemItem {
|
|
189
|
+
driver: WebDriver;
|
|
190
|
+
bySelector: By;
|
|
191
|
+
}
|
|
192
|
+
declare class SubsystemItem {
|
|
193
|
+
private readonly bySelector;
|
|
194
|
+
private readonly driver;
|
|
195
|
+
constructor({ driver, bySelector }: ISubsystemItem);
|
|
196
|
+
getElement(): Promise<selenium_webdriver.WebElement>;
|
|
197
|
+
getTitle(): Promise<string>;
|
|
198
|
+
click(): Promise<void>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
declare class SubsystemsPanel extends AbstractElement {
|
|
202
|
+
private header;
|
|
203
|
+
constructor(driver: WebDriver);
|
|
204
|
+
headerTitle(): Promise<string>;
|
|
205
|
+
protected getSearchComponent(): TextEditor;
|
|
206
|
+
/**
|
|
207
|
+
* Находит сабсистему по заголовку
|
|
208
|
+
* @example
|
|
209
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
210
|
+
* //...
|
|
211
|
+
* await subsystemsPanel.search('SubSystemTitle');
|
|
212
|
+
*/
|
|
213
|
+
search(title: string): Promise<void>;
|
|
214
|
+
/**
|
|
215
|
+
* Очищает поиск сабсистем
|
|
216
|
+
* @example
|
|
217
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
218
|
+
* //...
|
|
219
|
+
* await subsystemsPanel.searchClear();
|
|
220
|
+
*/
|
|
221
|
+
searchClear(): Promise<void>;
|
|
222
|
+
/**
|
|
223
|
+
* Возвращает сабсистему по имени
|
|
224
|
+
* @example
|
|
225
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
226
|
+
* //...
|
|
227
|
+
* const subsystem = subsystemsPanel.item('SubSystemName');
|
|
228
|
+
*/
|
|
229
|
+
item(name: string): SubsystemItem;
|
|
230
|
+
/**
|
|
231
|
+
* Возвращает сабсистему по заголовку
|
|
232
|
+
* @example
|
|
233
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
234
|
+
* //...
|
|
235
|
+
* const subsystem = subsystemsPanel.itemByTitle('SubSystemTitle');
|
|
236
|
+
*/
|
|
237
|
+
itemByTitle(title: string): SubsystemItem;
|
|
238
|
+
/**
|
|
239
|
+
* Возвращается на уровень выше по сабсистемам
|
|
240
|
+
* @example
|
|
241
|
+
* const subsystemsPanel= new SubsystemsPanel();
|
|
242
|
+
* //...
|
|
243
|
+
* wait subsystemsPanel.back();
|
|
244
|
+
*/
|
|
245
|
+
back(): Promise<void>;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
interface Button {
|
|
249
|
+
click(): Promise<void>;
|
|
250
|
+
isDisabled(): Promise<boolean>;
|
|
251
|
+
isDisplayed(): Promise<boolean>;
|
|
252
|
+
getTitle(): Promise<string>;
|
|
253
|
+
}
|
|
254
|
+
declare abstract class AbstractButton extends AbstractElementWithParent implements Button {
|
|
255
|
+
protected constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
|
|
256
|
+
protected abstract buttonNotDisplayedError(): string;
|
|
257
|
+
click(): Promise<void>;
|
|
258
|
+
isDisabled(): Promise<boolean>;
|
|
259
|
+
isDisplayed(): Promise<boolean>;
|
|
260
|
+
abstract getTitle(): Promise<string>;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
declare abstract class DXButton extends AbstractButton {
|
|
264
|
+
protected getText(): Promise<string>;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
declare class FormButton extends DXButton {
|
|
268
|
+
private readonly name;
|
|
269
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
270
|
+
protected buttonNotDisplayedError(): string;
|
|
271
|
+
getTitle(): Promise<string>;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
interface Group<TItem = unknown> {
|
|
275
|
+
isDisplayed(): Promise<boolean>;
|
|
276
|
+
click?(): Promise<void>;
|
|
277
|
+
itemClick?(name: string): Promise<void>;
|
|
278
|
+
item?(name: string): TItem;
|
|
279
|
+
accordionClick?(): Promise<void>;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
declare class FormGroup extends AbstractElementWithParent implements Group {
|
|
283
|
+
private groupInstance;
|
|
284
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
285
|
+
private initInstance;
|
|
286
|
+
/**
|
|
287
|
+
* Возвращает булевое значение доступна ли группа
|
|
288
|
+
* @example
|
|
289
|
+
* expect(await tableList.group('MainSuperPanel').isDisplayed();
|
|
290
|
+
*/
|
|
291
|
+
isDisplayed(): Promise<boolean>;
|
|
292
|
+
/**
|
|
293
|
+
* Клик по элементам группы.
|
|
294
|
+
* Метод работает если у группы есть дочерние элементы, например элементы аккордеона или вкладки таб панели.
|
|
295
|
+
* @example
|
|
296
|
+
* expect(await tableList.group('TabPanel').itemClick('Tab');
|
|
297
|
+
* expect(await tableList.group('Accordion').itemClick('AccordionItem');
|
|
298
|
+
*/
|
|
299
|
+
itemClick(name: string): Promise<void>;
|
|
300
|
+
/**
|
|
301
|
+
* Метод работает если группа - это элемент аккордеона или вкладка таб панели
|
|
302
|
+
* @example
|
|
303
|
+
* expect(await tableList.group('Tab').click();
|
|
304
|
+
* expect(await tableList.group('AccordionItem').click();
|
|
305
|
+
*/
|
|
306
|
+
click(): Promise<void>;
|
|
307
|
+
collapse(): Promise<void>;
|
|
308
|
+
expand(): Promise<void>;
|
|
309
|
+
isExpanded(): Promise<boolean>;
|
|
310
|
+
isCollapsed(): Promise<boolean>;
|
|
311
|
+
isActive(): Promise<boolean>;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
declare class AbstractForm extends AbstractPage {
|
|
315
|
+
protected containerCssSelector: string;
|
|
316
|
+
private _formName;
|
|
317
|
+
protected containerBy: By;
|
|
318
|
+
protected getContainerElement: () => selenium_webdriver.WebElementPromise;
|
|
319
|
+
set formName(name: string);
|
|
320
|
+
get formName(): string;
|
|
321
|
+
/**
|
|
322
|
+
* Возвращает true если форма есть в DOM
|
|
323
|
+
* @example
|
|
324
|
+
* class MyForm extends FormEdit {}
|
|
325
|
+
* //...
|
|
326
|
+
* const formEdit = new MyForm();
|
|
327
|
+
* expect(await formEdit.exists()).toBe(true);
|
|
328
|
+
*/
|
|
329
|
+
exists(): Promise<boolean>;
|
|
330
|
+
button(name: string): FormButton;
|
|
331
|
+
/**
|
|
332
|
+
* Находит группу на форме по имени
|
|
333
|
+
* @example
|
|
334
|
+
* const formEdit = new MyForm();
|
|
335
|
+
* //...
|
|
336
|
+
* expect(await formEdit.group('Name');
|
|
337
|
+
*/
|
|
338
|
+
group(name: string): FormGroup;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
interface SubFormOptions {
|
|
342
|
+
isDockPanel?: boolean;
|
|
343
|
+
}
|
|
344
|
+
declare abstract class Form extends AbstractForm {
|
|
345
|
+
protected popupContainerCssSelector: string;
|
|
346
|
+
protected constructor(driver: WebDriver);
|
|
347
|
+
protected isModal(): Promise<boolean>;
|
|
348
|
+
/**
|
|
349
|
+
* Получение заголовка на формы
|
|
350
|
+
* @example
|
|
351
|
+
* const listForm = new MyForm();
|
|
352
|
+
* //...
|
|
353
|
+
* expect(await listForm.getTitleText()).toBe('MyFormTitle');
|
|
354
|
+
*/
|
|
355
|
+
getTitleText(): Promise<string>;
|
|
356
|
+
protected setSubFormMode(): void;
|
|
357
|
+
/**
|
|
358
|
+
* Возвращает сабформу
|
|
359
|
+
* @returns {Promise<ListForm | TreeView | FormEdit>}
|
|
360
|
+
* @example
|
|
361
|
+
* const form = new MyForm();
|
|
362
|
+
* //...
|
|
363
|
+
* expect(await form.subForm(name));
|
|
364
|
+
*/
|
|
365
|
+
subForm(name: string, options?: SubFormOptions): Promise<unknown>;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
declare class EditorButton extends AbstractElementWithParent {
|
|
369
|
+
private readonly name;
|
|
370
|
+
constructor(parentCssSelector: string, name: string, driver: WebDriver);
|
|
371
|
+
protected buttonNotDisplayedError(): string;
|
|
372
|
+
click(): Promise<void>;
|
|
373
|
+
isDisplayed(): Promise<boolean>;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
declare class AbstractEditor extends AbstractElementWithParent implements Editor {
|
|
377
|
+
protected editor: Editor;
|
|
378
|
+
constructor(parentCssSelector: string, elementCssSelector: string, driver: WebDriver);
|
|
379
|
+
protected initEditor(): Promise<void>;
|
|
380
|
+
/**
|
|
381
|
+
* Возвращает значение в поле
|
|
382
|
+
* @example
|
|
383
|
+
* expect(await formEdit.field('NumberFld').getValue()).toBe(10);
|
|
384
|
+
* expect(await formEdit.field('TextFld').getValue()).toBe('TestValue');
|
|
385
|
+
*/
|
|
386
|
+
getValue(): Promise<any>;
|
|
387
|
+
/**
|
|
388
|
+
* Устанавливает значение в поле
|
|
389
|
+
* @example
|
|
390
|
+
* await formEdit.field('NumberFld').setValue(123);
|
|
391
|
+
* await formEdit.field('TextFld').setValue('TestValue');
|
|
392
|
+
*/
|
|
393
|
+
setValue(value: any): Promise<void>;
|
|
394
|
+
/**
|
|
395
|
+
* Очищает значение в поле
|
|
396
|
+
* @example
|
|
397
|
+
* await formEdit.field('NumberFld').clear();
|
|
398
|
+
*/
|
|
399
|
+
clear(): Promise<void>;
|
|
400
|
+
/**
|
|
401
|
+
* Удаляет тег по переданному тексту
|
|
402
|
+
* @example
|
|
403
|
+
* await formEdit.field('TagBox').remove('test');
|
|
404
|
+
*/
|
|
405
|
+
remove(itemText: string): Promise<void>;
|
|
406
|
+
/**
|
|
407
|
+
* Возвращает значение true|false в зависимости readOnly поле или нет
|
|
408
|
+
* @example
|
|
409
|
+
* expect(await formEdit.field('NumberFld').isReadonly()).toBe(true);
|
|
410
|
+
* expect(await formEdit.field('TextFld').isReadonly()).toBe(false);
|
|
411
|
+
*/
|
|
412
|
+
isReadonly(): Promise<boolean>;
|
|
413
|
+
/**
|
|
414
|
+
* Возвращает значение true|false в зависимости isDisplayed поле или нет
|
|
415
|
+
* @example
|
|
416
|
+
* expect(await formEdit.field('NumberFld').isDisplayed()).toBe(true);
|
|
417
|
+
* expect(await formEdit.field('TextFld').isDisplayed()).toBe(false);
|
|
418
|
+
*/
|
|
419
|
+
isDisplayed(): Promise<boolean>;
|
|
420
|
+
/**
|
|
421
|
+
* Находит кнопку на поле по имени
|
|
422
|
+
* @example
|
|
423
|
+
* const form= new MyForm();
|
|
424
|
+
* //...
|
|
425
|
+
* await form.field('Name').button('editorButton).click()
|
|
426
|
+
*/
|
|
427
|
+
button(name: string): EditorButton;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
declare class FormField extends AbstractEditor {
|
|
431
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
declare class FormEdit extends Form {
|
|
435
|
+
saveButtonId: string;
|
|
436
|
+
closeButtonId: string;
|
|
437
|
+
constructor(driver: WebDriver);
|
|
438
|
+
private getButtonCssSelector;
|
|
439
|
+
/**
|
|
440
|
+
* Находит поле формы редактирования по имени
|
|
441
|
+
* @example
|
|
442
|
+
* const formEdit = new MyForm();
|
|
443
|
+
* //...
|
|
444
|
+
* expect(await formEdit.field('Name').getValue()).toBe('test value');
|
|
445
|
+
*/
|
|
446
|
+
field(name: string): FormField;
|
|
447
|
+
/**
|
|
448
|
+
* Проверяет не отключена ли кнопка Сохранить
|
|
449
|
+
* @example
|
|
450
|
+
* const formEdit = new MyForm();
|
|
451
|
+
* //...
|
|
452
|
+
* await formEdit.isSaveButtonDisabled();
|
|
453
|
+
*/
|
|
454
|
+
isSaveButtonDisabled(): Promise<boolean>;
|
|
455
|
+
/**
|
|
456
|
+
* Нажатие на кнопку Сохранить
|
|
457
|
+
* @example
|
|
458
|
+
* const formEdit = new MyForm();
|
|
459
|
+
* //...
|
|
460
|
+
* await formEdit.saveButtonClick();
|
|
461
|
+
*/
|
|
462
|
+
saveButtonClick(): Promise<void>;
|
|
463
|
+
/**
|
|
464
|
+
* Нажатие на кнопку Закрить
|
|
465
|
+
* @example
|
|
466
|
+
* const formEdit = new MyForm();
|
|
467
|
+
* //...
|
|
468
|
+
* await formEdit.closeButtonClick();
|
|
469
|
+
*/
|
|
470
|
+
closeButtonClick(): Promise<void>;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
declare abstract class AbstractDropDownMenuList extends AbstractElementWithParent {
|
|
474
|
+
protected abstract getButtonNameBy(name: string): By;
|
|
475
|
+
protected abstract getButtonTitleBy(name: string): By;
|
|
476
|
+
protected buttonNotDisplayedError(name: string): string;
|
|
477
|
+
private clickItemBy;
|
|
478
|
+
private getElementByPath;
|
|
479
|
+
clickButton(name: string | string[]): Promise<void>;
|
|
480
|
+
clickButtonByTitle(title: string | string[]): Promise<void>;
|
|
481
|
+
getMenuItemElementByTitle(title: string | string[]): Promise<WebElement>;
|
|
482
|
+
getMenuItemElementByName(name: string | string[]): Promise<WebElement>;
|
|
483
|
+
isVisible(): Promise<boolean>;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
declare abstract class AbstractDropDownMenuButton extends AbstractElementWithParent {
|
|
487
|
+
private readonly _list;
|
|
488
|
+
protected constructor(parentCssSelector: string, elementCssSelector: string, list: AbstractDropDownMenuList, driver: WebDriver);
|
|
489
|
+
protected openDropdownMenu(): Promise<void>;
|
|
490
|
+
clickButton(name: string | string[]): Promise<void>;
|
|
491
|
+
clickButtonByTitle(title: string | string[]): Promise<void>;
|
|
492
|
+
getMenuItemElementByTitle(title: string | string[]): Promise<WebElement>;
|
|
493
|
+
getMenuItemElementByName(name: string | string[]): Promise<WebElement>;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
declare class ToolbarMenu extends AbstractDropDownMenuButton {
|
|
497
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
498
|
+
private checkNameValue;
|
|
499
|
+
private checkTitleValue;
|
|
500
|
+
private buttonByName;
|
|
501
|
+
private buttonByTitle;
|
|
502
|
+
buttonIsDisplayed(name: string | string[]): Promise<boolean>;
|
|
503
|
+
buttonByTitleIsDisplayed(title: string | string[]): Promise<boolean>;
|
|
504
|
+
buttonTitle(name: string | string[]): Promise<string>;
|
|
505
|
+
buttonIsDisabled(name: string | string[]): Promise<boolean>;
|
|
506
|
+
buttonByTitleIsDisabled(title: string | string[]): Promise<boolean>;
|
|
507
|
+
clickButton(name: string | string[]): Promise<void>;
|
|
508
|
+
clickButtonByTitle(title: string | string[]): Promise<void>;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
declare class ToolbarItem extends AbstractElementWithParent implements Button {
|
|
512
|
+
private _button;
|
|
513
|
+
private readonly _formName;
|
|
514
|
+
private readonly _itemName;
|
|
515
|
+
constructor(parentCssSelector: string, formName: string, itemName: string, driver: WebDriver);
|
|
516
|
+
private init;
|
|
517
|
+
click(): Promise<void>;
|
|
518
|
+
isDisabled(): Promise<boolean>;
|
|
519
|
+
isDisplayed(): Promise<boolean>;
|
|
520
|
+
getTitle(): Promise<string>;
|
|
521
|
+
get menu(): ToolbarMenu;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
declare class Cell extends AbstractElementWithParent {
|
|
525
|
+
private _index;
|
|
526
|
+
private getCellIndex;
|
|
527
|
+
constructor(parentCssSelector: string, getCellIndex: () => Promise<number>, driver: WebDriver, index?: number);
|
|
528
|
+
private set index(value);
|
|
529
|
+
private getBooleanValue;
|
|
530
|
+
private getTagsValue;
|
|
531
|
+
private getNumberValue;
|
|
532
|
+
private getDateValue;
|
|
533
|
+
getElement(): Promise<WebElement>;
|
|
534
|
+
getValue(): Promise<string | number | 1 | 0 | string[] | Date>;
|
|
535
|
+
getIndex(): number;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
interface ConstructorParams$1 {
|
|
539
|
+
parentCssSelector: string;
|
|
540
|
+
headerCssSelector?: string;
|
|
541
|
+
name?: string;
|
|
542
|
+
caption?: string;
|
|
543
|
+
index?: number;
|
|
544
|
+
driver: WebDriver;
|
|
545
|
+
}
|
|
546
|
+
declare class Column extends AbstractElementWithParent {
|
|
547
|
+
private _index;
|
|
548
|
+
private _caption;
|
|
549
|
+
private _name;
|
|
550
|
+
protected headerCssSelector: string | undefined;
|
|
551
|
+
constructor({ parentCssSelector, headerCssSelector, name, caption, index, driver }: ConstructorParams$1);
|
|
552
|
+
private set index(value);
|
|
553
|
+
private get index();
|
|
554
|
+
getElement(): Promise<WebElement>;
|
|
555
|
+
private getColumnHeaderIndexBy;
|
|
556
|
+
private getIndexByCaption;
|
|
557
|
+
private getIndexByName;
|
|
558
|
+
caption(): Promise<string>;
|
|
559
|
+
getIndex(): Promise<number>;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
declare class Row extends AbstractElementWithParent {
|
|
563
|
+
private readonly index;
|
|
564
|
+
protected getColumnBy: (_: {
|
|
565
|
+
title?: string;
|
|
566
|
+
name?: string;
|
|
567
|
+
}) => Column;
|
|
568
|
+
protected fixedTableContentCssSelector: string;
|
|
569
|
+
/**
|
|
570
|
+
* @param parentCssSelector
|
|
571
|
+
* @param fixedTableContentCssSelector
|
|
572
|
+
* @param index починається з 0 (в getCssRowByIndexSelector додається +1)
|
|
573
|
+
* @param driver
|
|
574
|
+
* @param getColumnBy
|
|
575
|
+
*/
|
|
576
|
+
constructor(parentCssSelector: string, fixedTableContentCssSelector: string, index: number, driver: WebDriver, getColumnBy?: (_: {
|
|
577
|
+
title?: string;
|
|
578
|
+
name?: string;
|
|
579
|
+
}) => Column);
|
|
580
|
+
private _getCell;
|
|
581
|
+
getCellByIndex(index: number): Cell;
|
|
582
|
+
getCell(name: string): Cell;
|
|
583
|
+
getCellByTitle(title: string): Cell;
|
|
584
|
+
select(): Promise<void>;
|
|
585
|
+
isSelected(): Promise<boolean>;
|
|
586
|
+
getIndex(): number;
|
|
587
|
+
getCells(): Promise<Cell[]>;
|
|
588
|
+
private clickInlineButton;
|
|
589
|
+
private checkEditingMode;
|
|
590
|
+
edit(): Promise<void>;
|
|
591
|
+
save(): Promise<void>;
|
|
592
|
+
cancel(): Promise<void>;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
declare abstract class DXContextMenuList extends AbstractDropDownMenuList {
|
|
596
|
+
/**
|
|
597
|
+
* @param parentCssSelector
|
|
598
|
+
* @param classNames - Список класів. Починається з крапки
|
|
599
|
+
* @param driver
|
|
600
|
+
*/
|
|
601
|
+
protected constructor(parentCssSelector: string, classNames: string, driver: WebDriver);
|
|
602
|
+
protected getButtonTitleBy(title: string): By;
|
|
603
|
+
isVisible(): Promise<boolean>;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
declare class ContextMenu extends DXContextMenuList {
|
|
607
|
+
private readonly _formName;
|
|
608
|
+
private _initFn;
|
|
609
|
+
constructor(cssClass: string, formName: string, driver: WebDriver);
|
|
610
|
+
setInit(cb: () => Promise<void>): this;
|
|
611
|
+
protected getButtonNameBy(name: string): By;
|
|
612
|
+
clickButtonByTitle(title: string | string[]): Promise<void>;
|
|
613
|
+
clickButton(name: string | string[]): Promise<void>;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
interface ConstructorParams {
|
|
617
|
+
parentCssSelector: string;
|
|
618
|
+
headerCssSelector: string;
|
|
619
|
+
fixedTableContentCssSelector: string;
|
|
620
|
+
contextMenuCssSelector: string;
|
|
621
|
+
tableContentCssSelector: string;
|
|
622
|
+
formName: string;
|
|
623
|
+
driver: WebDriver;
|
|
624
|
+
}
|
|
625
|
+
declare class Table extends AbstractElementWithParent {
|
|
626
|
+
protected formName: string;
|
|
627
|
+
protected headerCssSelector: string;
|
|
628
|
+
protected contextMenuCssSelector: string;
|
|
629
|
+
protected fixedTableContentCssSelector: string;
|
|
630
|
+
protected tableContentCssSelector: string;
|
|
631
|
+
constructor({ parentCssSelector, contextMenuCssSelector, tableContentCssSelector, headerCssSelector, fixedTableContentCssSelector, formName, driver }: ConstructorParams);
|
|
632
|
+
private getColumnBy;
|
|
633
|
+
/**
|
|
634
|
+
* Отримати рядок по індексу.
|
|
635
|
+
* @param index починається з 0
|
|
636
|
+
*/
|
|
637
|
+
getRowByIndex(index: number): Row;
|
|
638
|
+
/**
|
|
639
|
+
* @param index починається з 0
|
|
640
|
+
*/
|
|
641
|
+
getColumnByIndex(index: number): Column;
|
|
642
|
+
getColumnByTitle: (title: string) => Column;
|
|
643
|
+
getColumnByName: (name: string) => Column;
|
|
644
|
+
/**
|
|
645
|
+
* Вибрати рядок по індексу.
|
|
646
|
+
* @param index починається з 0
|
|
647
|
+
*/
|
|
648
|
+
selectRowByIndex(index: number): Promise<void>;
|
|
649
|
+
getRows(): Promise<Row[]>;
|
|
650
|
+
getColumns(): Promise<Column[]>;
|
|
651
|
+
element(): Promise<selenium_webdriver.WebElement>;
|
|
652
|
+
/**
|
|
653
|
+
* Находит поле когда форма находится в состоянии редактирования
|
|
654
|
+
* @example
|
|
655
|
+
* const form = new MyForm();
|
|
656
|
+
* //...
|
|
657
|
+
* expect(await form.field('Name').getValue()).toBe('test value');
|
|
658
|
+
*/
|
|
659
|
+
field(name: string): FormField;
|
|
660
|
+
/**
|
|
661
|
+
* Возвращает список строк которые выделены
|
|
662
|
+
* @returns Row[]
|
|
663
|
+
* @example
|
|
664
|
+
* const form = new MyForm();
|
|
665
|
+
* //...
|
|
666
|
+
* await form.getSelectedRows();
|
|
667
|
+
*/
|
|
668
|
+
getSelectedRows(): Promise<Row[]>;
|
|
669
|
+
/**
|
|
670
|
+
* Вызывает контекстное меню в области с данными.
|
|
671
|
+
* @param fieldName - имя поля
|
|
672
|
+
* @param [rowIndex] - индекс строки. Если значение не передано, то по умолчанию контекстное меню будет вызвано на первой выделенной строке.
|
|
673
|
+
* @throws {Error} Если нет выделенных строк, то выбросит исключение.
|
|
674
|
+
* @example
|
|
675
|
+
* const form = new MyForm();
|
|
676
|
+
* //...
|
|
677
|
+
* await form.contextMenu('FieldName').clickButton('OpenFormButton');
|
|
678
|
+
* // or
|
|
679
|
+
* await form.contextMenu('FieldName', 3).clickButton(['Group', 'ButtonInGroup']);
|
|
680
|
+
*/
|
|
681
|
+
contextMenu(fieldName: string, rowIndex?: number): ContextMenu;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
declare class FormFilterField extends AbstractEditor {
|
|
685
|
+
private readonly formName;
|
|
686
|
+
private readonly name;
|
|
687
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
688
|
+
/**
|
|
689
|
+
* Возвращает значение в поле
|
|
690
|
+
* @example
|
|
691
|
+
* expect(await form.formFilter('NumberFld').getValue()).toBe(10);
|
|
692
|
+
* expect(await form.formFilter('TextFld').getValue()).toBe('TestValue');
|
|
693
|
+
*/
|
|
694
|
+
getValue(): Promise<any>;
|
|
695
|
+
/**
|
|
696
|
+
* Устанавливает значение в поле
|
|
697
|
+
* @example
|
|
698
|
+
* await form.formFilter('NumberFld').setValue(123);
|
|
699
|
+
* await form.formFilter('TextFld').setValue('TestValue');
|
|
700
|
+
* await form.formFilter('TextFld').setValue('TestValue', '=', true);
|
|
701
|
+
*/
|
|
702
|
+
setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
|
|
703
|
+
/**
|
|
704
|
+
* Очищает значение в поле
|
|
705
|
+
* @example
|
|
706
|
+
* await form.formFilter('NumberFld').clear();
|
|
707
|
+
*/
|
|
708
|
+
clear(): Promise<void>;
|
|
709
|
+
/**
|
|
710
|
+
* Удаляет тег по переданному тексту
|
|
711
|
+
* @example
|
|
712
|
+
* await form.formFilter('TagBox').remove('test');
|
|
713
|
+
*/
|
|
714
|
+
remove(itemText: string): Promise<void>;
|
|
715
|
+
/**
|
|
716
|
+
* Инициализация операции фильтра
|
|
717
|
+
*/
|
|
718
|
+
private initOperation;
|
|
719
|
+
/**
|
|
720
|
+
* Устанавливает операцию для фильтра
|
|
721
|
+
* @example
|
|
722
|
+
* await form.formFilter('TagBox').setOperation("=");
|
|
723
|
+
*/
|
|
724
|
+
setOperation(operationName: string): Promise<void>;
|
|
725
|
+
/**
|
|
726
|
+
* Возвращает операцию фильтра
|
|
727
|
+
* @example
|
|
728
|
+
* expect(await form.formFilter('NumberFld').getOperation()).toBe("=");
|
|
729
|
+
*/
|
|
730
|
+
getOperation(): Promise<any>;
|
|
731
|
+
/**
|
|
732
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
733
|
+
* @example
|
|
734
|
+
* await form.formFilter('TagBox').setIsBlank(true);
|
|
735
|
+
*/
|
|
736
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
737
|
+
/**
|
|
738
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
739
|
+
* @example
|
|
740
|
+
* expect(await form.formFilter('NumberFld').getIsBlank()).toBe(false);
|
|
741
|
+
*/
|
|
742
|
+
getIsBlank(): Promise<boolean>;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
declare class PanelFilterField extends AbstractEditor {
|
|
746
|
+
private readonly formName;
|
|
747
|
+
private readonly name;
|
|
748
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
749
|
+
/**
|
|
750
|
+
* Возвращает значение в поле
|
|
751
|
+
* @example
|
|
752
|
+
* expect(await form.filterPanel.filterField('NumberFld').getValue()).toBe(10);
|
|
753
|
+
* expect(await form.filterPanel.filterField('TextFld').getValue()).toBe('TestValue');
|
|
754
|
+
*/
|
|
755
|
+
getValue(): Promise<any>;
|
|
756
|
+
/**
|
|
757
|
+
* Устанавливает значение в поле
|
|
758
|
+
* @example
|
|
759
|
+
* await form.filterPanel.filterField('NumberFld').setValue(123);
|
|
760
|
+
* await form.filterPanel.filterField('TextFld').setValue('TestValue');
|
|
761
|
+
* await form.filterPanel.filterField('TextFld').setValue('TestValue', '=', true);
|
|
762
|
+
*/
|
|
763
|
+
setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
|
|
764
|
+
/**
|
|
765
|
+
* Очищает значение в поле
|
|
766
|
+
* @example
|
|
767
|
+
* await form.filterPanel.filterField('NumberFld').clear();
|
|
768
|
+
*/
|
|
769
|
+
clear(): Promise<void>;
|
|
770
|
+
/**
|
|
771
|
+
* Удаляет тег по переданному тексту
|
|
772
|
+
* @example
|
|
773
|
+
* await form.filterPanel.filterField('TagBox').remove('test');
|
|
774
|
+
*/
|
|
775
|
+
remove(itemText: string): Promise<void>;
|
|
776
|
+
/**
|
|
777
|
+
* Инициализация операции фильтра
|
|
778
|
+
*/
|
|
779
|
+
private initOperation;
|
|
780
|
+
/**
|
|
781
|
+
* Устанавливает операцию для фильтра
|
|
782
|
+
* @example
|
|
783
|
+
* await form.filterPanel.filterField('TagBox').setOperation("=");
|
|
784
|
+
*/
|
|
785
|
+
setOperation(operationName: string): Promise<void>;
|
|
786
|
+
/**
|
|
787
|
+
* Возвращает операцию фильтра
|
|
788
|
+
* @example
|
|
789
|
+
* expect(await form.filterPanel.filterField('NumberFld').getOperation()).toBe("=");
|
|
790
|
+
*/
|
|
791
|
+
getOperation(): Promise<any>;
|
|
792
|
+
/**
|
|
793
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
794
|
+
* @example
|
|
795
|
+
* await form.filterPanel.filterField('TagBox').setIsBlank(true);
|
|
796
|
+
*/
|
|
797
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
798
|
+
/**
|
|
799
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
800
|
+
* @example
|
|
801
|
+
* expect(await form.filterPanel.filterField('NumberFld').getIsBlank()).toBe(false);
|
|
802
|
+
*/
|
|
803
|
+
getIsBlank(): Promise<boolean>;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
declare class FilterPanel extends AbstractElement {
|
|
807
|
+
private readonly _formName;
|
|
808
|
+
private get filterPanelSelector();
|
|
809
|
+
private filterPanelButtons;
|
|
810
|
+
constructor(formName: string, driver: WebDriver);
|
|
811
|
+
/**
|
|
812
|
+
* Возвращает фильтр на панели фильтрации
|
|
813
|
+
* @returns {PanelFilterField}
|
|
814
|
+
* @example
|
|
815
|
+
* await form.filterPanel.filterField('NumberFld');
|
|
816
|
+
*/
|
|
817
|
+
filterField(name: string): PanelFilterField;
|
|
818
|
+
apply(): Promise<void>;
|
|
819
|
+
private findButtonByTitle;
|
|
820
|
+
clearAll(): Promise<void>;
|
|
821
|
+
close(): Promise<void>;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
declare class HeaderFilterField extends AbstractEditor {
|
|
825
|
+
constructor(parentCssSelector: string, formName: string, name: string, driver: WebDriver);
|
|
826
|
+
getValue(): Promise<any>;
|
|
827
|
+
setValue(value: any): Promise<void>;
|
|
828
|
+
clear(): Promise<void>;
|
|
829
|
+
remove(itemText: string): Promise<void>;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
interface IFilterOperations {
|
|
833
|
+
parentCssSelector: string;
|
|
834
|
+
filterTestID: string;
|
|
835
|
+
driver: WebDriver;
|
|
836
|
+
}
|
|
837
|
+
declare class FilterOperation extends AbstractElementWithParent {
|
|
838
|
+
private readonly _testId;
|
|
839
|
+
constructor({ parentCssSelector, filterTestID, driver, }: IFilterOperations);
|
|
840
|
+
private initOperationWidget;
|
|
841
|
+
setOperation(operationName: string): Promise<void>;
|
|
842
|
+
getOperation(): Promise<any>;
|
|
843
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
844
|
+
getIsBlank(): Promise<boolean>;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
declare class ColumnFilter extends AbstractElement {
|
|
848
|
+
private readonly _formName;
|
|
849
|
+
private readonly _name;
|
|
850
|
+
private _column;
|
|
851
|
+
constructor(formName: string, name: string, column: Column, driver: WebDriver);
|
|
852
|
+
private getApplyButton;
|
|
853
|
+
private getCancelButton;
|
|
854
|
+
protected apply(): Promise<void>;
|
|
855
|
+
protected cancel(): Promise<void>;
|
|
856
|
+
protected initFilter(): Promise<HeaderFilterField>;
|
|
857
|
+
/**
|
|
858
|
+
* Возвращает значение в поле
|
|
859
|
+
* @example
|
|
860
|
+
* expect(await form.columnFilter('NumberFld').getValue()).toBe(10);
|
|
861
|
+
* expect(await form.columnFilter('TextFld').getValue()).toBe('TestValue');
|
|
862
|
+
*/
|
|
863
|
+
getValue(): Promise<any>;
|
|
864
|
+
/**
|
|
865
|
+
* Устанавливает значение в поле
|
|
866
|
+
* @example
|
|
867
|
+
* await form.columnFilter('NumberFld').setValue(123);
|
|
868
|
+
* await form.columnFilter('TextFld').setValue('TestValue');
|
|
869
|
+
* await form.columnFilter('TextFld').setValue('TestValue', '=', true);
|
|
870
|
+
*/
|
|
871
|
+
setValue(value: any, operation?: string, isBlank?: boolean): Promise<void>;
|
|
872
|
+
/**
|
|
873
|
+
* Очищает значение в поле
|
|
874
|
+
* @example
|
|
875
|
+
* await form.columnFilter('NumberFld').clear();
|
|
876
|
+
*/
|
|
877
|
+
clear(): Promise<void>;
|
|
878
|
+
/**
|
|
879
|
+
* Удаляет тег по переданному тексту
|
|
880
|
+
* @example
|
|
881
|
+
* await form.columnFilter('TagBox').remove('test');
|
|
882
|
+
*/
|
|
883
|
+
remove(itemText: string): Promise<void>;
|
|
884
|
+
/**
|
|
885
|
+
* Инициализация операции фильтра
|
|
886
|
+
*/
|
|
887
|
+
initOperation(): Promise<FilterOperation>;
|
|
888
|
+
/**
|
|
889
|
+
* Устанавливает операцию для фильтра
|
|
890
|
+
* @example
|
|
891
|
+
* await form.columnFilter('TagBox').setOperation("=");
|
|
892
|
+
*/
|
|
893
|
+
setOperation(operationName: string): Promise<void>;
|
|
894
|
+
/**
|
|
895
|
+
* Возвращает операцию фильтра
|
|
896
|
+
* @example
|
|
897
|
+
* expect(await form.columnFilter('NumberFld').getOperation()).toBe("=");
|
|
898
|
+
*/
|
|
899
|
+
getOperation(): Promise<any>;
|
|
900
|
+
/**
|
|
901
|
+
* Устанавливает операцию 'isblank' для фильтра
|
|
902
|
+
* @example
|
|
903
|
+
* await form.columnFilter('TagBox').setIsBlank(true);
|
|
904
|
+
*/
|
|
905
|
+
setIsBlank(value: boolean): Promise<void>;
|
|
906
|
+
/**
|
|
907
|
+
* Возвращает true|false, если операция 'isblank' установлена для фильтра
|
|
908
|
+
* @example
|
|
909
|
+
* expect(await form.columnFilter('NumberFld').getIsBlank()).toBe(false);
|
|
910
|
+
*/
|
|
911
|
+
getIsBlank(): Promise<boolean>;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
declare class ListForm extends Form {
|
|
915
|
+
protected headerCssSelector: string;
|
|
916
|
+
protected fixedTableContentCssSelector: string;
|
|
917
|
+
protected tableContentCssSelector: string;
|
|
918
|
+
protected contextMenuCssSelector: string;
|
|
919
|
+
constructor(driver: WebDriver);
|
|
920
|
+
/**
|
|
921
|
+
* Находит таблицу
|
|
922
|
+
* @example
|
|
923
|
+
* const listForm = new MyForm();
|
|
924
|
+
* //...
|
|
925
|
+
* expect(listForm.table());
|
|
926
|
+
*/
|
|
927
|
+
table(): Table;
|
|
928
|
+
/**
|
|
929
|
+
* Находит таблицу
|
|
930
|
+
* @example
|
|
931
|
+
* const listForm = new MyForm();
|
|
932
|
+
* //...
|
|
933
|
+
* expect(listForm.toolbarButton());
|
|
934
|
+
*/
|
|
935
|
+
toolbarButton(name: string): ToolbarItem;
|
|
936
|
+
/**
|
|
937
|
+
* Фильтр который расположен на форме
|
|
938
|
+
* @example
|
|
939
|
+
* const listForm = new MyForm();
|
|
940
|
+
* //...
|
|
941
|
+
* expect(listForm.formFilter());
|
|
942
|
+
*/
|
|
943
|
+
formFilter(name: string): FormFilterField;
|
|
944
|
+
columnFilter(name: string): ColumnFilter;
|
|
945
|
+
/**
|
|
946
|
+
* Модель панели фильтрации
|
|
947
|
+
* @returns {FilterPanel}
|
|
948
|
+
* @example
|
|
949
|
+
* const listForm = new MyForm();
|
|
950
|
+
* //...
|
|
951
|
+
* expect(listForm.filterPanel());
|
|
952
|
+
*/
|
|
953
|
+
get filterPanel(): FilterPanel;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
declare class TreeView extends ListForm {
|
|
957
|
+
constructor(driver: WebDriver);
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
declare class ReportForm extends FormEdit {
|
|
961
|
+
constructor(driver: WebDriver);
|
|
962
|
+
/**
|
|
963
|
+
* Знаходить поле/фільтр у формі репорту за ім'ям
|
|
964
|
+
* @example
|
|
965
|
+
* const formReport = new MyForm();
|
|
966
|
+
* //...
|
|
967
|
+
* expect(await formReport.filterField('Name').getValue()).toBe('test value');
|
|
968
|
+
*/
|
|
969
|
+
filterField(name: string): FormField;
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
declare class DialogButton extends AbstractButton implements Button {
|
|
973
|
+
private readonly text;
|
|
974
|
+
constructor(parentCssSelector: string, text: string, driver: WebDriver);
|
|
975
|
+
getElement(): Promise<WebElement>;
|
|
976
|
+
protected buttonNotDisplayedError(): string;
|
|
977
|
+
getTitle(): Promise<string>;
|
|
978
|
+
}
|
|
979
|
+
declare class Dialog extends AbstractElement {
|
|
980
|
+
constructor(driver: WebDriver);
|
|
981
|
+
private get titleSelector();
|
|
982
|
+
private get textSelector();
|
|
983
|
+
private get buttonsSelector();
|
|
984
|
+
title(): Promise<string>;
|
|
985
|
+
text(): Promise<string>;
|
|
986
|
+
button(text: string): DialogButton;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
export { AbstractPage, ControlClass, Dialog, type Editor, FilterPanel, FormEdit, FormField, FormFilterField, ListForm, LoginPage, NumberEditor, PanelFilterField, ReportForm, SubsystemsPanel, TextEditor, TreeView, byTestId, byTestIdCssSelector, click, config, contextMenu, createDriver, editorFactory, elementIsNotPresent, readonlyLocator, signIn, safeWait as wait, waitElementIsClickable, waitElementIsVisible };
|
package/package.json
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "d5-testing-library",
|
|
3
|
-
"version": "1.9.0-alpha.
|
|
3
|
+
"version": "1.9.0-alpha.2",
|
|
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",
|
|
7
|
-
"types": "dist/d5-testing-library.d.
|
|
7
|
+
"types": "dist/d5-testing-library.d.mts",
|
|
8
8
|
"exports": {
|
|
9
9
|
"./package.json": "./package.json",
|
|
10
10
|
".": {
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/d5-testing-library.d.mts",
|
|
13
|
+
"default": "./dist/d5-testing-library.mjs"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/cjs/d5-testing-library.d.ts",
|
|
17
|
+
"default": "./dist/cjs/d5-testing-library.cjs"
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
20
|
},
|
|
16
21
|
"repository": "",
|