@progress/kendo-e2e 4.6.0 → 4.7.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.
- package/dist/components/chat.d.ts +2 -1
- package/dist/components/chat.js +9 -0
- package/dist/components/chat.js.map +1 -1
- package/dist/components/dropdownlist.d.ts +2 -0
- package/dist/components/dropdownlist.js +9 -0
- package/dist/components/dropdownlist.js.map +1 -1
- package/dist/components/editor.d.ts +3 -1
- package/dist/components/editor.js +14 -0
- package/dist/components/editor.js.map +1 -1
- package/dist/components/input.d.ts +2 -1
- package/dist/components/input.js +9 -0
- package/dist/components/input.js.map +1 -1
- package/dist/components/textbox.d.ts +2 -1
- package/dist/components/textbox.js +9 -0
- package/dist/components/textbox.js.map +1 -1
- package/dist/components/ui-component.d.ts +42 -0
- package/dist/components/ui-component.js +130 -1
- package/dist/components/ui-component.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UIComponent } from "./ui-component";
|
|
1
|
+
import { FuzzTestExpectations, UIComponent } from "./ui-component";
|
|
2
2
|
import { Browser, By, WebElement } from "../selenium";
|
|
3
3
|
export declare class Chat extends UIComponent {
|
|
4
4
|
protected parentElement?: WebElement | By | string;
|
|
@@ -9,4 +9,5 @@ export declare class Chat extends UIComponent {
|
|
|
9
9
|
lastMessage(): Promise<WebElement>;
|
|
10
10
|
message(index: number): Promise<WebElement>;
|
|
11
11
|
quickReply(index: number): Promise<WebElement>;
|
|
12
|
+
setMaliciousInputs(myInputElement?: WebElement, maliciousInputArray?: string[][], expectationsArray?: FuzzTestExpectations): Promise<void>;
|
|
12
13
|
}
|
package/dist/components/chat.js
CHANGED
|
@@ -52,6 +52,15 @@ class Chat extends ui_component_1.UIComponent {
|
|
|
52
52
|
return (yield this.findChildren(locator))[index];
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
+
setMaliciousInputs(myInputElement, maliciousInputArray, expectationsArray) {
|
|
56
|
+
const _super = Object.create(null, {
|
|
57
|
+
setMaliciousInputs: { get: () => super.setMaliciousInputs }
|
|
58
|
+
});
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
const inputElement = myInputElement || (yield this.messageInput());
|
|
61
|
+
yield _super.setMaliciousInputs.call(this, inputElement, maliciousInputArray, expectationsArray);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
55
64
|
}
|
|
56
65
|
exports.Chat = Chat;
|
|
57
66
|
Chat.SELECTOR = const_1.SELECTORS.CHAT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/components/chat.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/components/chat.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AACpC,iDAAmE;AAGnE,MAAa,IAAK,SAAQ,0BAAW;IAGjC,YAAY,OAAgB,EAAE,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAY,aAAwC;QACrG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QADsB,kBAAa,GAAb,aAAa,CAA2B;IAEzG,CAAC;IAEK,UAAU;;YACZ,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC;KAAA;IAEK,YAAY;;YACd,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC;KAAA;IAEK,WAAW;;YACb,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,OAAO,CAAC,KAAa;;YACvB,MAAM,OAAO,GAAG,6BAA6B,CAAC;YAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAS,EAAE,gDAAC,OAAA,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAA,GAAA,EAAE;gBACnF,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qCAAqC,KAAK,GAAG;aACzD,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;KAAA;IAEK,UAAU,CAAC,KAAa;;YAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC;YACjC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAS,EAAE,gDAAC,OAAA,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAA,GAAA,EAAE;gBACnF,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2CAA2C,KAAK,GAAG;aAC/D,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;KAAA;IAEc,kBAAkB,CAAC,cAA2B,EAAE,mBAAgC,EAAE,iBAAwC;;;;;YACrI,MAAM,YAAY,GAAG,cAAc,KAAI,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA,CAAC;YACjE,MAAM,OAAM,kBAAkB,YAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;;AAxCL,oBAyCC;AAxCiB,aAAQ,GAAG,iBAAS,CAAC,IAAI,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Browser, By, WebElement } from "../selenium";
|
|
2
2
|
import { DropDown } from "./dropdown";
|
|
3
|
+
import { FuzzTestExpectations } from "./ui-component";
|
|
3
4
|
export declare class DropDownList extends DropDown {
|
|
4
5
|
static SELECTOR: string;
|
|
5
6
|
constructor(browser: Browser, locator?: By | string, rootElement?: WebElement);
|
|
6
7
|
filter(): Promise<WebElement>;
|
|
7
8
|
setFilter(text: string): Promise<void>;
|
|
8
9
|
isFocused(): Promise<boolean>;
|
|
10
|
+
setMaliciousInputs(myInputElement?: WebElement, maliciousInputArray?: string[][], expectationsArray?: FuzzTestExpectations): Promise<void>;
|
|
9
11
|
}
|
|
@@ -38,6 +38,15 @@ class DropDownList extends dropdown_1.DropDown {
|
|
|
38
38
|
return isVisuallyFocused && isKeyboardFocused;
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
+
setMaliciousInputs(myInputElement, maliciousInputArray, expectationsArray) {
|
|
42
|
+
const _super = Object.create(null, {
|
|
43
|
+
setMaliciousInputs: { get: () => super.setMaliciousInputs }
|
|
44
|
+
});
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const inputElement = myInputElement || (yield this.filter());
|
|
47
|
+
yield _super.setMaliciousInputs.call(this, inputElement, maliciousInputArray, expectationsArray);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
41
50
|
}
|
|
42
51
|
exports.DropDownList = DropDownList;
|
|
43
52
|
DropDownList.SELECTOR = const_1.SELECTORS.DROPDOWN_LIST;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdownlist.js","sourceRoot":"","sources":["../../src/components/dropdownlist.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAsD;AACtD,yCAAsC;AACtC,mCAA4C;
|
|
1
|
+
{"version":3,"file":"dropdownlist.js","sourceRoot":"","sources":["../../src/components/dropdownlist.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAsD;AACtD,yCAAsC;AACtC,mCAA4C;AAG5C,MAAa,YAAa,SAAQ,mBAAQ;IAGtC,YAAY,OAAgB,EAAE,UAAuB,YAAY,CAAC,QAAQ,EAAE,WAAwB;QAChG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAEY,MAAM;;YACf,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,aAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtF,CAAC;KAAA;IAEY,SAAS,CAAC,IAAY;;YAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAS,EAAE,gDAAC,OAAA,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,GAAA,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAC9H,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;KAAA;IAEY,SAAS;;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC;YACrE,MAAM,iBAAiB,GAAG,CAAA,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,OAAK,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA,CAAC;YACtF,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAM,CAAC,OAAO,CAAC,CAAC;YACrG,OAAO,iBAAiB,IAAI,iBAAiB,CAAC;QAClD,CAAC;KAAA;IAEc,kBAAkB,CAAC,cAA2B,EAAE,mBAAgC,EAAE,iBAAwC;;;;;YACrI,MAAM,YAAY,GAAG,cAAc,KAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA,CAAC;YAC3D,MAAM,OAAM,kBAAkB,YAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;;AA5BL,oCA6BC;AA5BiB,qBAAQ,GAAG,iBAAS,CAAC,aAAa,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UIComponent } from "./ui-component";
|
|
1
|
+
import { FuzzTestExpectations, UIComponent } from "./ui-component";
|
|
2
2
|
import { Browser, By, WebElement } from "../selenium";
|
|
3
3
|
export declare class Editor extends UIComponent {
|
|
4
4
|
protected parentElement?: WebElement | By | string;
|
|
@@ -8,4 +8,6 @@ export declare class Editor extends UIComponent {
|
|
|
8
8
|
getToolByTitle(title: string): Promise<WebElement>;
|
|
9
9
|
focusToolByTitle(title: string): Promise<void>;
|
|
10
10
|
getEditableArea(): Promise<WebElement>;
|
|
11
|
+
getEditableContent(): Promise<WebElement>;
|
|
12
|
+
setMaliciousInputs(myInputElement?: WebElement, maliciousInputArray?: string[][], expectationsArray?: FuzzTestExpectations): Promise<void>;
|
|
11
13
|
}
|
|
@@ -64,6 +64,20 @@ class Editor extends ui_component_1.UIComponent {
|
|
|
64
64
|
return yield this.findChild('.k-editable-area');
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
|
+
getEditableContent() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
return yield this.findChild('.k-content');
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
setMaliciousInputs(myInputElement, maliciousInputArray, expectationsArray) {
|
|
73
|
+
const _super = Object.create(null, {
|
|
74
|
+
setMaliciousInputs: { get: () => super.setMaliciousInputs }
|
|
75
|
+
});
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
const inputElement = myInputElement || (yield this.getEditableContent());
|
|
78
|
+
yield _super.setMaliciousInputs.call(this, inputElement, maliciousInputArray, expectationsArray);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
67
81
|
}
|
|
68
82
|
exports.Editor = Editor;
|
|
69
83
|
Editor.SELECTOR = const_1.SELECTORS.EDITOR;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/components/editor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/components/editor.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAmE;AACnE,0CAA2D;AAC3D,mCAAoC;AAEpC,MAAa,MAAO,SAAQ,0BAAW;IAGnC,YAAY,OAAgB,EAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAY,aAAwC;QACvG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QADwB,kBAAa,GAAb,aAAa,CAA2B;IAE3G,CAAC;IAEK,QAAQ;;YACV,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7C,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,EAAE,CAAC;gBACP,OAAO,GAAG,EAAE,CAAC;YACjB,CAAC;oBACO,CAAC;gBACL,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAEK,cAAc,CAAC,KAAa;;YAC9B,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;QACtD,CAAC;KAAA;IAEK,gBAAgB,CAAC,KAAa;;YAChC,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAG,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC;gBACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAA,MAAM,OAAO,CAAC,KAAK,EAAE,OAAK,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA,EAAE,CAAC;oBACjD,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC;YACxD,CAAC;QACL,CAAC;KAAA;IAEK,eAAe;;YACjB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC;KAAA;IAEK,kBAAkB;;YACpB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;KAAA;IAEc,kBAAkB,CAAC,cAA2B,EAAE,mBAAgC,EAAE,iBAAwC;;;;;YACrI,MAAM,YAAY,GAAG,cAAc,KAAI,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA,CAAC;YACvE,MAAM,OAAM,kBAAkB,YAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;;AAzDL,wBA0DC;AAzDiB,eAAQ,GAAG,iBAAS,CAAC,MAAM,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UIComponent } from "./ui-component";
|
|
1
|
+
import { FuzzTestExpectations, UIComponent } from "./ui-component";
|
|
2
2
|
import { Browser, By, WebElement } from "../selenium";
|
|
3
3
|
export declare class Input extends UIComponent {
|
|
4
4
|
protected parentElement?: WebElement | By | string;
|
|
@@ -11,4 +11,5 @@ export declare class Input extends UIComponent {
|
|
|
11
11
|
clear?: boolean;
|
|
12
12
|
}): Promise<void>;
|
|
13
13
|
clearValue(): Promise<void>;
|
|
14
|
+
setMaliciousInputs(myInputElement?: WebElement, maliciousInputArray?: string[][], expectationsArray?: FuzzTestExpectations): Promise<void>;
|
|
14
15
|
}
|
package/dist/components/input.js
CHANGED
|
@@ -42,6 +42,15 @@ class Input extends ui_component_1.UIComponent {
|
|
|
42
42
|
yield this.setValue('');
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
setMaliciousInputs(myInputElement, maliciousInputArray, expectationsArray) {
|
|
46
|
+
const _super = Object.create(null, {
|
|
47
|
+
setMaliciousInputs: { get: () => super.setMaliciousInputs }
|
|
48
|
+
});
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const inputElement = myInputElement || (yield this.input());
|
|
51
|
+
yield _super.setMaliciousInputs.call(this, inputElement, maliciousInputArray, expectationsArray);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
45
54
|
}
|
|
46
55
|
exports.Input = Input;
|
|
47
56
|
Input.SELECTOR = const_1.SELECTORS.INPUT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAmE;AACnE,mCAAoC;AAGpC,MAAa,KAAM,SAAQ,0BAAW;IAGlC,YAAY,OAAgB,EAAE,UAAuB,KAAK,CAAC,QAAQ,EAAY,aAAwC;QACnH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QADoC,kBAAa,GAAb,aAAa,CAA2B;IAEvH,CAAC;IAEK,KAAK;;YACP,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACxE,CAAC;KAAA;IAEK,QAAQ;;YACV,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;KAAA;IAEK,cAAc;;YAChB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC;KAAA;IAEK,QAAQ;6DAAC,KAAa,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;KAAA;IAEK,UAAU;;YACZ,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;KAAA;IAEc,kBAAkB,CAAC,cAA2B,EAAE,mBAAgC,EAAE,iBAAwC;;;;;YACrI,MAAM,YAAY,GAAG,cAAc,KAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA,CAAC;YAC1D,MAAM,OAAM,kBAAkB,YAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;;AA9BL,sBA+BC;AA9BiB,cAAQ,GAAG,iBAAS,CAAC,KAAK,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Browser, By, WebElement } from "../selenium";
|
|
2
|
-
import { UIComponent } from "./ui-component";
|
|
2
|
+
import { FuzzTestExpectations, UIComponent } from "./ui-component";
|
|
3
3
|
export declare class TextBox extends UIComponent {
|
|
4
4
|
protected parentElement?: WebElement | By | string;
|
|
5
5
|
static SELECTOR: string;
|
|
@@ -12,4 +12,5 @@ export declare class TextBox extends UIComponent {
|
|
|
12
12
|
getValue(): Promise<string>;
|
|
13
13
|
getSelectionStart(): Promise<number>;
|
|
14
14
|
getSelectionEnd(): Promise<number>;
|
|
15
|
+
setMaliciousInputs(myInputElement?: WebElement, maliciousInputArray?: string[][], expectationsArray?: FuzzTestExpectations): Promise<void>;
|
|
15
16
|
}
|
|
@@ -63,6 +63,15 @@ class TextBox extends ui_component_1.UIComponent {
|
|
|
63
63
|
return parseInt(yield this.browser.getProperty(input, "selectionEnd"));
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
setMaliciousInputs(myInputElement, maliciousInputArray, expectationsArray) {
|
|
67
|
+
const _super = Object.create(null, {
|
|
68
|
+
setMaliciousInputs: { get: () => super.setMaliciousInputs }
|
|
69
|
+
});
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
const inputElement = myInputElement || (yield this.input());
|
|
72
|
+
yield _super.setMaliciousInputs.call(this, inputElement, maliciousInputArray, expectationsArray);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
66
75
|
}
|
|
67
76
|
exports.TextBox = TextBox;
|
|
68
77
|
TextBox.SELECTOR = const_1.SELECTORS.TEXTBOX;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textbox.js","sourceRoot":"","sources":["../../src/components/textbox.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA2D;AAC3D,mCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"textbox.js","sourceRoot":"","sources":["../../src/components/textbox.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA2D;AAC3D,mCAAoC;AACpC,iDAAmE;AAEnE,MAAa,OAAQ,SAAQ,0BAAW;IAGpC,YAAY,OAAgB,EAAE,UAAuB,OAAO,CAAC,QAAQ,EAAY,aAAwC;QACrH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QADsC,kBAAa,GAAb,aAAa,CAA2B;IAEzH,CAAC;IAEK,KAAK;;YACP,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACvD,CAAC;KAAA;IAEK,UAAU;;YACZ,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,QAAQ;6DAAC,KAAa,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,QAAQ;;YACV,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;KAAA;IAEK,iBAAiB;;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7E,CAAC;KAAA;IAEK,eAAe;;YACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3E,CAAC;KAAA;IAEc,kBAAkB,CAAC,cAA2B,EAAE,mBAAgC,EAAE,iBAAwC;;;;;YACrI,MAAM,YAAY,GAAG,cAAc,KAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA,CAAC;YAC1D,MAAM,OAAM,kBAAkB,YAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACzF,CAAC;KAAA;;AAjDL,0BAkDC;AAjDiB,gBAAQ,GAAG,iBAAS,CAAC,OAAO,CAAC"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { Browser, By, WebElement } from "../selenium";
|
|
2
|
+
export interface FuzzTestExpectations {
|
|
3
|
+
performanceCheck?: (executionTime: number, input: string, targetExecutionTimeMs?: number) => Promise<void>;
|
|
4
|
+
consoleErrorCheck?: (errorLogs: string[], input: string) => Promise<void>;
|
|
5
|
+
xssAlertCheck?: (browser: Browser, input: string) => Promise<void>;
|
|
6
|
+
sanitizationCheck?: (inputValue: string, input: string) => Promise<void>;
|
|
7
|
+
domManipulationCheck?: (browser: Browser, input: string) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const XSS_PAYLOADS: string[];
|
|
10
|
+
export declare const SQL_INJECTION_PAYLOADS: string[];
|
|
11
|
+
export declare const COMMAND_INJECTION_PAYLOADS: string[];
|
|
12
|
+
export declare const PATH_TRAVERSAL_PAYLOADS: string[];
|
|
13
|
+
export declare const HTML_INJECTION_PAYLOADS: string[];
|
|
14
|
+
export declare const BUFFER_OVERFLOW_PAYLOADS: string[];
|
|
15
|
+
export declare const MALICIOUS_INPUT_PAYLOADS: string[][];
|
|
16
|
+
export declare const FUZZ_TEST_EXPECTATIONS: {
|
|
17
|
+
performanceCheck: (executionTime: number, input: string, targetExecutionTimeMs?: number) => Promise<void>;
|
|
18
|
+
consoleErrorCheck: (errorLogs: string[], input: string) => Promise<void>;
|
|
19
|
+
xssAlertCheck: (browser: Browser, input: string) => Promise<void>;
|
|
20
|
+
domManipulationCheck: (browser: Browser, input: string) => Promise<void>;
|
|
21
|
+
};
|
|
2
22
|
export declare class UIComponent {
|
|
3
23
|
protected browser: Browser;
|
|
4
24
|
locator: By | string;
|
|
@@ -23,4 +43,26 @@ export declare class UIComponent {
|
|
|
23
43
|
timeout?: number;
|
|
24
44
|
pollTimeout?: number;
|
|
25
45
|
}): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Tests the component with various malicious inputs to ensure its robustness against common security vulnerabilities.
|
|
48
|
+
*
|
|
49
|
+
* @param {WebElement} [myInputElement] - The input element to be tested.
|
|
50
|
+
* @param {string[][]} [maliciousInputArray] - An array of arrays containing malicious input strings. If not provided, the method will use the default `MALICIOUS_INPUT_PAYLOADS`.
|
|
51
|
+
* @param {Partial<FuzzTestExpectations>} [expectationsArray] - An object containing custom expectations for the tests. If not provided, the method will use the default `FUZZ_TEST_EXPECTATIONS`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // Default usage
|
|
55
|
+
* await myComponent.setMaliciousInputs(myInputElement);
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* // Partial customization of the expectations
|
|
59
|
+
* await myComponent.setMaliciousInputs(myInputElement, undefined, {
|
|
60
|
+
* performanceCheck: async (executionTime, input, targetExecutionTimeMs = 4000) => {
|
|
61
|
+
* if (executionTime >= targetExecutionTimeMs) {
|
|
62
|
+
* throw new Error(`Custom: Execution time exceeded for input: "${input}"`);
|
|
63
|
+
* }
|
|
64
|
+
* }
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
setMaliciousInputs(myInputElement: WebElement, maliciousInputArray?: string[][], expectationsArray?: Partial<FuzzTestExpectations>): Promise<void>;
|
|
26
68
|
}
|
|
@@ -9,8 +9,83 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.UIComponent = void 0;
|
|
12
|
+
exports.UIComponent = exports.FUZZ_TEST_EXPECTATIONS = exports.MALICIOUS_INPUT_PAYLOADS = exports.BUFFER_OVERFLOW_PAYLOADS = exports.HTML_INJECTION_PAYLOADS = exports.PATH_TRAVERSAL_PAYLOADS = exports.COMMAND_INJECTION_PAYLOADS = exports.SQL_INJECTION_PAYLOADS = exports.XSS_PAYLOADS = void 0;
|
|
13
13
|
const selenium_1 = require("../selenium");
|
|
14
|
+
exports.XSS_PAYLOADS = [
|
|
15
|
+
`"><script>alert('XSS')</script>`,
|
|
16
|
+
`<IMG SRC="javascript:alert('XSS');">`,
|
|
17
|
+
`<svg onload=alert(1)>`,
|
|
18
|
+
`"><img src=x onerror=alert(1)>`,
|
|
19
|
+
];
|
|
20
|
+
exports.SQL_INJECTION_PAYLOADS = [
|
|
21
|
+
`' OR '1'='1`,
|
|
22
|
+
`"; DROP TABLE users; --`,
|
|
23
|
+
`" UNION SELECT null, username, password FROM users --`,
|
|
24
|
+
`admin' --`,
|
|
25
|
+
];
|
|
26
|
+
exports.COMMAND_INJECTION_PAYLOADS = [
|
|
27
|
+
`; ls -la`,
|
|
28
|
+
`| cat /etc/passwd`,
|
|
29
|
+
`$(reboot)`,
|
|
30
|
+
`&& rm -rf /`,
|
|
31
|
+
];
|
|
32
|
+
exports.PATH_TRAVERSAL_PAYLOADS = [
|
|
33
|
+
`../../../../etc/passwd`,
|
|
34
|
+
`..\..\..\..\windows\system32\cmd.exe`,
|
|
35
|
+
`/etc/shadow`,
|
|
36
|
+
`../../boot.ini`,
|
|
37
|
+
];
|
|
38
|
+
exports.HTML_INJECTION_PAYLOADS = [
|
|
39
|
+
`<h1>Hacked!</h1>`,
|
|
40
|
+
`<iframe src="http://evil.com"></iframe>`,
|
|
41
|
+
`<marquee>Security Broken</marquee>`,
|
|
42
|
+
`<link rel="stylesheet" href="http://evil.com/bad.css">`,
|
|
43
|
+
`<img src="/imagepath" onerror="alert('xss')">`
|
|
44
|
+
];
|
|
45
|
+
exports.BUFFER_OVERFLOW_PAYLOADS = [
|
|
46
|
+
"A".repeat(5000),
|
|
47
|
+
"\x42".repeat(10000),
|
|
48
|
+
];
|
|
49
|
+
exports.MALICIOUS_INPUT_PAYLOADS = [
|
|
50
|
+
exports.XSS_PAYLOADS,
|
|
51
|
+
exports.SQL_INJECTION_PAYLOADS,
|
|
52
|
+
exports.COMMAND_INJECTION_PAYLOADS,
|
|
53
|
+
exports.PATH_TRAVERSAL_PAYLOADS,
|
|
54
|
+
exports.HTML_INJECTION_PAYLOADS,
|
|
55
|
+
exports.BUFFER_OVERFLOW_PAYLOADS,
|
|
56
|
+
];
|
|
57
|
+
exports.FUZZ_TEST_EXPECTATIONS = {
|
|
58
|
+
performanceCheck: (executionTime_1, input_1, ...args_1) => __awaiter(void 0, [executionTime_1, input_1, ...args_1], void 0, function* (executionTime, input, targetExecutionTimeMs = 10000) {
|
|
59
|
+
if (executionTime >= targetExecutionTimeMs) {
|
|
60
|
+
throw new Error(`Input took too long (${executionTime}ms)! Expected time: ${targetExecutionTimeMs}ms. Input: "${input}"`);
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
consoleErrorCheck: (errorLogs, input) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
if (errorLogs.length > 0) {
|
|
65
|
+
console.error(`Console error for input: "${input}" ->`, errorLogs);
|
|
66
|
+
}
|
|
67
|
+
expect(errorLogs).toEqual([]);
|
|
68
|
+
}),
|
|
69
|
+
xssAlertCheck: (browser, input) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
|
+
try {
|
|
71
|
+
yield browser.driver.switchTo().alert();
|
|
72
|
+
throw new Error(`XSS detected! Alert triggered for input: "${input}"`);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error.name !== "NoSuchAlertError") {
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}),
|
|
80
|
+
domManipulationCheck: (browser, input) => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
+
const bodyHTML = yield browser.executeScript('return document.body.innerHTML;');
|
|
82
|
+
if (bodyHTML.includes('<script>')) {
|
|
83
|
+
console.error(`XSS in DOM! Input: "${input}"`);
|
|
84
|
+
console.log(bodyHTML);
|
|
85
|
+
}
|
|
86
|
+
expect(bodyHTML).not.toContain('<script>');
|
|
87
|
+
})
|
|
88
|
+
};
|
|
14
89
|
class UIComponent {
|
|
15
90
|
constructor(browser, locator, rootElement) {
|
|
16
91
|
this.browser = browser;
|
|
@@ -52,6 +127,60 @@ class UIComponent {
|
|
|
52
127
|
yield this.browser.waitForAnimation(yield this.root(), { timeout: timeout, pollTimeout: pollTimeout });
|
|
53
128
|
});
|
|
54
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Tests the component with various malicious inputs to ensure its robustness against common security vulnerabilities.
|
|
132
|
+
*
|
|
133
|
+
* @param {WebElement} [myInputElement] - The input element to be tested.
|
|
134
|
+
* @param {string[][]} [maliciousInputArray] - An array of arrays containing malicious input strings. If not provided, the method will use the default `MALICIOUS_INPUT_PAYLOADS`.
|
|
135
|
+
* @param {Partial<FuzzTestExpectations>} [expectationsArray] - An object containing custom expectations for the tests. If not provided, the method will use the default `FUZZ_TEST_EXPECTATIONS`.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* // Default usage
|
|
139
|
+
* await myComponent.setMaliciousInputs(myInputElement);
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* // Partial customization of the expectations
|
|
143
|
+
* await myComponent.setMaliciousInputs(myInputElement, undefined, {
|
|
144
|
+
* performanceCheck: async (executionTime, input, targetExecutionTimeMs = 4000) => {
|
|
145
|
+
* if (executionTime >= targetExecutionTimeMs) {
|
|
146
|
+
* throw new Error(`Custom: Execution time exceeded for input: "${input}"`);
|
|
147
|
+
* }
|
|
148
|
+
* }
|
|
149
|
+
* });
|
|
150
|
+
*/
|
|
151
|
+
setMaliciousInputs(myInputElement_1) {
|
|
152
|
+
return __awaiter(this, arguments, void 0, function* (myInputElement, maliciousInputArray = exports.MALICIOUS_INPUT_PAYLOADS, expectationsArray = {}) {
|
|
153
|
+
// Merge custom expectations with defaults
|
|
154
|
+
const expectations = Object.assign(Object.assign({}, exports.FUZZ_TEST_EXPECTATIONS), expectationsArray // Custom overrides
|
|
155
|
+
);
|
|
156
|
+
for (const category of maliciousInputArray) {
|
|
157
|
+
console.log(`Testing category: ${category[0] || "Unnamed Category"}`);
|
|
158
|
+
for (const currentInput of category) {
|
|
159
|
+
console.log(`Testing input: "${currentInput}"`);
|
|
160
|
+
const startTime = Date.now();
|
|
161
|
+
yield this.browser.type(myInputElement, currentInput, { clear: true });
|
|
162
|
+
const executionTime = Date.now() - startTime;
|
|
163
|
+
if (expectations.performanceCheck) {
|
|
164
|
+
yield expectations.performanceCheck(executionTime, currentInput);
|
|
165
|
+
}
|
|
166
|
+
const errorLogs = yield this.browser.getErrorLogs([]);
|
|
167
|
+
if (expectations.consoleErrorCheck) {
|
|
168
|
+
yield expectations.consoleErrorCheck(errorLogs, currentInput);
|
|
169
|
+
}
|
|
170
|
+
if (expectations.xssAlertCheck) {
|
|
171
|
+
yield expectations.xssAlertCheck(this.browser, currentInput);
|
|
172
|
+
}
|
|
173
|
+
const inputValue = yield myInputElement.getAttribute('value');
|
|
174
|
+
if (expectations.sanitizationCheck) {
|
|
175
|
+
yield expectations.sanitizationCheck(inputValue, currentInput);
|
|
176
|
+
}
|
|
177
|
+
if (expectations.domManipulationCheck) {
|
|
178
|
+
yield expectations.domManipulationCheck(this.browser, currentInput);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
55
184
|
}
|
|
56
185
|
exports.UIComponent = UIComponent;
|
|
57
186
|
//# sourceMappingURL=ui-component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-component.js","sourceRoot":"","sources":["../../src/components/ui-component.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAA0D;
|
|
1
|
+
{"version":3,"file":"ui-component.js","sourceRoot":"","sources":["../../src/components/ui-component.ts"],"names":[],"mappings":"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"}
|