@angular/cdk 12.0.0-rc.0 → 12.0.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/a11y/_index.scss +4 -0
- package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +5 -0
- package/a11y/index.metadata.json +1 -1
- package/a11y-prebuilt.css +1 -1
- package/bundles/cdk-a11y.umd.js +8 -2
- package/bundles/cdk-a11y.umd.js.map +1 -1
- package/bundles/cdk-overlay.umd.js +14 -12
- package/bundles/cdk-overlay.umd.js.map +1 -1
- package/bundles/{cdk-testing-webdriver.umd.js → cdk-testing-selenium-webdriver.umd.js} +51 -51
- package/bundles/cdk-testing-selenium-webdriver.umd.js.map +1 -0
- package/bundles/cdk-testing.umd.js +41 -4
- package/bundles/cdk-testing.umd.js.map +1 -1
- package/bundles/cdk.umd.js +1 -1
- package/bundles/cdk.umd.js.map +1 -1
- package/esm2015/a11y/focus-trap/focus-trap.js +7 -2
- package/esm2015/a11y/high-contrast-mode/high-contrast-mode-detector.js +3 -2
- package/esm2015/overlay/dispatchers/overlay-outside-click-dispatcher.js +15 -13
- package/esm2015/testing/component-harness.js +42 -4
- package/esm2015/testing/selenium-webdriver/index.js +9 -0
- package/esm2015/testing/selenium-webdriver/public-api.js +10 -0
- package/esm2015/testing/selenium-webdriver/selenium-web-driver-element.js +240 -0
- package/esm2015/testing/selenium-webdriver/selenium-web-driver-harness-environment.js +97 -0
- package/esm2015/testing/selenium-webdriver/selenium-webdriver-keys.js +63 -0
- package/esm2015/testing/{webdriver/webdriver.externs.js → selenium-webdriver/selenium-webdriver.externs.js} +0 -0
- package/esm2015/version.js +1 -1
- package/fesm2015/a11y.js +8 -2
- package/fesm2015/a11y.js.map +1 -1
- package/fesm2015/cdk.js +1 -1
- package/fesm2015/cdk.js.map +1 -1
- package/fesm2015/overlay.js +14 -12
- package/fesm2015/overlay.js.map +1 -1
- package/fesm2015/testing/{webdriver.js → selenium-webdriver.js} +13 -13
- package/fesm2015/testing/selenium-webdriver.js.map +1 -0
- package/fesm2015/testing.js +41 -3
- package/fesm2015/testing.js.map +1 -1
- package/package.json +3 -3
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/find-stylesheets.d.ts +8 -2
- package/schematics/ng-update/find-stylesheets.js +16 -5
- package/testing/{webdriver → selenium-webdriver}/index.d.ts +0 -0
- package/testing/selenium-webdriver/package.json +9 -0
- package/testing/{webdriver → selenium-webdriver}/public-api.d.ts +2 -2
- package/testing/{webdriver/webdriver-element.d.ts → selenium-webdriver/selenium-web-driver-element.d.ts} +1 -1
- package/testing/{webdriver/webdriver-harness-environment.d.ts → selenium-webdriver/selenium-web-driver-harness-environment.d.ts} +1 -1
- package/testing/{webdriver/webdriver-keys.d.ts → selenium-webdriver/selenium-webdriver-keys.d.ts} +2 -2
- package/bundles/cdk-testing-webdriver.umd.js.map +0 -1
- package/esm2015/testing/webdriver/index.js +0 -9
- package/esm2015/testing/webdriver/public-api.js +0 -10
- package/esm2015/testing/webdriver/webdriver-element.js +0 -240
- package/esm2015/testing/webdriver/webdriver-harness-environment.js +0 -97
- package/esm2015/testing/webdriver/webdriver-keys.js +0 -63
- package/fesm2015/testing/webdriver.js.map +0 -1
- package/testing/webdriver/package.json +0 -9
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
2
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/cdk/testing'), require('selenium-webdriver')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define('@angular/cdk/testing/webdriver', ['exports', '@angular/cdk/testing', 'selenium-webdriver'], factory) :
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ng = global.ng || {}, global.ng.cdk = global.ng.cdk || {}, global.ng.cdk.testing = global.ng.cdk.testing || {}, global.ng.cdk.testing.
|
|
3
|
+
typeof define === 'function' && define.amd ? define('@angular/cdk/testing/selenium-webdriver', ['exports', '@angular/cdk/testing', 'selenium-webdriver'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ng = global.ng || {}, global.ng.cdk = global.ng.cdk || {}, global.ng.cdk.testing = global.ng.cdk.testing || {}, global.ng.cdk.testing.seleniumWebdriver = {}), global.ng.cdk.testing, global['selenium-webdriver']));
|
|
5
5
|
}(this, (function (exports, testing, webdriver) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopNamespace(e) {
|
|
@@ -340,7 +340,7 @@
|
|
|
340
340
|
* Maps the `TestKey` constants to WebDriver's `webdriver.Key` constants.
|
|
341
341
|
* See https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/webdriver/key.js#L29
|
|
342
342
|
*/
|
|
343
|
-
var
|
|
343
|
+
var seleniumWebDriverKeyMap = (_a = {},
|
|
344
344
|
_a[testing.TestKey.BACKSPACE] = webdriver__namespace.Key.BACK_SPACE,
|
|
345
345
|
_a[testing.TestKey.TAB] = webdriver__namespace.Key.TAB,
|
|
346
346
|
_a[testing.TestKey.ENTER] = webdriver__namespace.Key.ENTER,
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
_a[testing.TestKey.META] = webdriver__namespace.Key.META,
|
|
374
374
|
_a);
|
|
375
375
|
/** Gets a list of WebDriver `Key`s for the given `ModifierKeys`. */
|
|
376
|
-
function
|
|
376
|
+
function getSeleniumWebDriverModifierKeys(modifiers) {
|
|
377
377
|
var result = [];
|
|
378
378
|
if (modifiers.control) {
|
|
379
379
|
result.push(webdriver__namespace.Key.CONTROL);
|
|
@@ -391,13 +391,13 @@
|
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
/** A `TestElement` implementation for WebDriver. */
|
|
394
|
-
var
|
|
395
|
-
function
|
|
394
|
+
var SeleniumWebDriverElement = /** @class */ (function () {
|
|
395
|
+
function SeleniumWebDriverElement(element, _stabilize) {
|
|
396
396
|
this.element = element;
|
|
397
397
|
this._stabilize = _stabilize;
|
|
398
398
|
}
|
|
399
399
|
/** Blur the element. */
|
|
400
|
-
|
|
400
|
+
SeleniumWebDriverElement.prototype.blur = function () {
|
|
401
401
|
return __awaiter(this, void 0, void 0, function () {
|
|
402
402
|
return __generator(this, function (_a) {
|
|
403
403
|
switch (_a.label) {
|
|
@@ -413,7 +413,7 @@
|
|
|
413
413
|
});
|
|
414
414
|
};
|
|
415
415
|
/** Clear the element's input (for input and textarea elements only). */
|
|
416
|
-
|
|
416
|
+
SeleniumWebDriverElement.prototype.clear = function () {
|
|
417
417
|
return __awaiter(this, void 0, void 0, function () {
|
|
418
418
|
return __generator(this, function (_a) {
|
|
419
419
|
switch (_a.label) {
|
|
@@ -428,7 +428,7 @@
|
|
|
428
428
|
});
|
|
429
429
|
});
|
|
430
430
|
};
|
|
431
|
-
|
|
431
|
+
SeleniumWebDriverElement.prototype.click = function () {
|
|
432
432
|
var args = [];
|
|
433
433
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
434
434
|
args[_i] = arguments[_i];
|
|
@@ -447,7 +447,7 @@
|
|
|
447
447
|
});
|
|
448
448
|
});
|
|
449
449
|
};
|
|
450
|
-
|
|
450
|
+
SeleniumWebDriverElement.prototype.rightClick = function () {
|
|
451
451
|
var args = [];
|
|
452
452
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
453
453
|
args[_i] = arguments[_i];
|
|
@@ -467,7 +467,7 @@
|
|
|
467
467
|
});
|
|
468
468
|
};
|
|
469
469
|
/** Focus the element. */
|
|
470
|
-
|
|
470
|
+
SeleniumWebDriverElement.prototype.focus = function () {
|
|
471
471
|
return __awaiter(this, void 0, void 0, function () {
|
|
472
472
|
return __generator(this, function (_a) {
|
|
473
473
|
switch (_a.label) {
|
|
@@ -483,7 +483,7 @@
|
|
|
483
483
|
});
|
|
484
484
|
};
|
|
485
485
|
/** Get the computed value of the given CSS property for the element. */
|
|
486
|
-
|
|
486
|
+
SeleniumWebDriverElement.prototype.getCssValue = function (property) {
|
|
487
487
|
return __awaiter(this, void 0, void 0, function () {
|
|
488
488
|
return __generator(this, function (_a) {
|
|
489
489
|
switch (_a.label) {
|
|
@@ -496,7 +496,7 @@
|
|
|
496
496
|
});
|
|
497
497
|
};
|
|
498
498
|
/** Hovers the mouse over the element. */
|
|
499
|
-
|
|
499
|
+
SeleniumWebDriverElement.prototype.hover = function () {
|
|
500
500
|
return __awaiter(this, void 0, void 0, function () {
|
|
501
501
|
return __generator(this, function (_a) {
|
|
502
502
|
switch (_a.label) {
|
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
});
|
|
513
513
|
};
|
|
514
514
|
/** Moves the mouse away from the element. */
|
|
515
|
-
|
|
515
|
+
SeleniumWebDriverElement.prototype.mouseAway = function () {
|
|
516
516
|
return __awaiter(this, void 0, void 0, function () {
|
|
517
517
|
return __generator(this, function (_a) {
|
|
518
518
|
switch (_a.label) {
|
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
});
|
|
528
528
|
});
|
|
529
529
|
};
|
|
530
|
-
|
|
530
|
+
SeleniumWebDriverElement.prototype.sendKeys = function () {
|
|
531
531
|
var modifiersAndKeys = [];
|
|
532
532
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
533
533
|
modifiersAndKeys[_i] = arguments[_i];
|
|
@@ -547,8 +547,8 @@
|
|
|
547
547
|
modifiers = {};
|
|
548
548
|
rest = modifiersAndKeys;
|
|
549
549
|
}
|
|
550
|
-
modifierKeys =
|
|
551
|
-
keys = rest.map(function (k) { return typeof k === 'string' ? k.split('') : [
|
|
550
|
+
modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);
|
|
551
|
+
keys = rest.map(function (k) { return typeof k === 'string' ? k.split('') : [seleniumWebDriverKeyMap[k]]; })
|
|
552
552
|
.reduce(function (arr, k) { return arr.concat(k); }, [])
|
|
553
553
|
// webdriver.Key.chord doesn't work well with geckodriver (mozilla/geckodriver#1502),
|
|
554
554
|
// so avoid it if no modifier keys are required.
|
|
@@ -571,7 +571,7 @@
|
|
|
571
571
|
* Gets the text from the element.
|
|
572
572
|
* @param options Options that affect what text is included.
|
|
573
573
|
*/
|
|
574
|
-
|
|
574
|
+
SeleniumWebDriverElement.prototype.text = function (options) {
|
|
575
575
|
return __awaiter(this, void 0, void 0, function () {
|
|
576
576
|
return __generator(this, function (_a) {
|
|
577
577
|
switch (_a.label) {
|
|
@@ -587,7 +587,7 @@
|
|
|
587
587
|
});
|
|
588
588
|
};
|
|
589
589
|
/** Gets the value for the given attribute from the element. */
|
|
590
|
-
|
|
590
|
+
SeleniumWebDriverElement.prototype.getAttribute = function (name) {
|
|
591
591
|
return __awaiter(this, void 0, void 0, function () {
|
|
592
592
|
return __generator(this, function (_a) {
|
|
593
593
|
switch (_a.label) {
|
|
@@ -600,7 +600,7 @@
|
|
|
600
600
|
});
|
|
601
601
|
};
|
|
602
602
|
/** Checks whether the element has the given class. */
|
|
603
|
-
|
|
603
|
+
SeleniumWebDriverElement.prototype.hasClass = function (name) {
|
|
604
604
|
return __awaiter(this, void 0, void 0, function () {
|
|
605
605
|
var classes;
|
|
606
606
|
return __generator(this, function (_a) {
|
|
@@ -617,7 +617,7 @@
|
|
|
617
617
|
});
|
|
618
618
|
};
|
|
619
619
|
/** Gets the dimensions of the element. */
|
|
620
|
-
|
|
620
|
+
SeleniumWebDriverElement.prototype.getDimensions = function () {
|
|
621
621
|
return __awaiter(this, void 0, void 0, function () {
|
|
622
622
|
var _a, width, height, _b, left, top;
|
|
623
623
|
return __generator(this, function (_c) {
|
|
@@ -637,7 +637,7 @@
|
|
|
637
637
|
});
|
|
638
638
|
};
|
|
639
639
|
/** Gets the value of a property of an element. */
|
|
640
|
-
|
|
640
|
+
SeleniumWebDriverElement.prototype.getProperty = function (name) {
|
|
641
641
|
return __awaiter(this, void 0, void 0, function () {
|
|
642
642
|
return __generator(this, function (_a) {
|
|
643
643
|
switch (_a.label) {
|
|
@@ -650,7 +650,7 @@
|
|
|
650
650
|
});
|
|
651
651
|
};
|
|
652
652
|
/** Sets the value of a property of an input. */
|
|
653
|
-
|
|
653
|
+
SeleniumWebDriverElement.prototype.setInputValue = function (newValue) {
|
|
654
654
|
return __awaiter(this, void 0, void 0, function () {
|
|
655
655
|
return __generator(this, function (_a) {
|
|
656
656
|
switch (_a.label) {
|
|
@@ -666,7 +666,7 @@
|
|
|
666
666
|
});
|
|
667
667
|
};
|
|
668
668
|
/** Selects the options at the specified indexes inside of a native `select` element. */
|
|
669
|
-
|
|
669
|
+
SeleniumWebDriverElement.prototype.selectOptions = function () {
|
|
670
670
|
var optionIndexes = [];
|
|
671
671
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
672
672
|
optionIndexes[_i] = arguments[_i];
|
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
});
|
|
723
723
|
};
|
|
724
724
|
/** Checks whether this element matches the given selector. */
|
|
725
|
-
|
|
725
|
+
SeleniumWebDriverElement.prototype.matchesSelector = function (selector) {
|
|
726
726
|
return __awaiter(this, void 0, void 0, function () {
|
|
727
727
|
return __generator(this, function (_a) {
|
|
728
728
|
switch (_a.label) {
|
|
@@ -736,7 +736,7 @@
|
|
|
736
736
|
});
|
|
737
737
|
};
|
|
738
738
|
/** Checks whether the element is focused. */
|
|
739
|
-
|
|
739
|
+
SeleniumWebDriverElement.prototype.isFocused = function () {
|
|
740
740
|
return __awaiter(this, void 0, void 0, function () {
|
|
741
741
|
return __generator(this, function (_a) {
|
|
742
742
|
switch (_a.label) {
|
|
@@ -752,7 +752,7 @@
|
|
|
752
752
|
* Dispatches an event with a particular name.
|
|
753
753
|
* @param name Name of the event to be dispatched.
|
|
754
754
|
*/
|
|
755
|
-
|
|
755
|
+
SeleniumWebDriverElement.prototype.dispatchEvent = function (name, data) {
|
|
756
756
|
return __awaiter(this, void 0, void 0, function () {
|
|
757
757
|
return __generator(this, function (_a) {
|
|
758
758
|
switch (_a.label) {
|
|
@@ -768,11 +768,11 @@
|
|
|
768
768
|
});
|
|
769
769
|
};
|
|
770
770
|
/** Gets the webdriver action sequence. */
|
|
771
|
-
|
|
771
|
+
SeleniumWebDriverElement.prototype._actions = function () {
|
|
772
772
|
return this.element().getDriver().actions();
|
|
773
773
|
};
|
|
774
774
|
/** Executes a function in the browser. */
|
|
775
|
-
|
|
775
|
+
SeleniumWebDriverElement.prototype._executeScript = function (script) {
|
|
776
776
|
var var_args = [];
|
|
777
777
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
778
778
|
var_args[_i - 1] = arguments[_i];
|
|
@@ -785,7 +785,7 @@
|
|
|
785
785
|
});
|
|
786
786
|
};
|
|
787
787
|
/** Dispatches all the events that are part of a click event sequence. */
|
|
788
|
-
|
|
788
|
+
SeleniumWebDriverElement.prototype._dispatchClickEventSequence = function (args, button) {
|
|
789
789
|
return __awaiter(this, void 0, void 0, function () {
|
|
790
790
|
var modifiers, modifierKeys, offsetArgs, actions, modifierKeys_1, modifierKeys_1_1, modifierKey, modifierKeys_2, modifierKeys_2_1, modifierKey;
|
|
791
791
|
var _a, e_1, _b, e_2, _c;
|
|
@@ -796,7 +796,7 @@
|
|
|
796
796
|
if (args.length && typeof args[args.length - 1] === 'object') {
|
|
797
797
|
modifiers = args.pop();
|
|
798
798
|
}
|
|
799
|
-
modifierKeys =
|
|
799
|
+
modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);
|
|
800
800
|
offsetArgs = (args.length === 2 ?
|
|
801
801
|
[{ x: args[0], y: args[1] }] : []);
|
|
802
802
|
actions = (_a = this._actions()).mouseMove.apply(_a, __spreadArray([this.element()], __read(offsetArgs)));
|
|
@@ -835,7 +835,7 @@
|
|
|
835
835
|
});
|
|
836
836
|
});
|
|
837
837
|
};
|
|
838
|
-
return
|
|
838
|
+
return SeleniumWebDriverElement;
|
|
839
839
|
}());
|
|
840
840
|
/**
|
|
841
841
|
* Dispatches an event with a particular name and data to an element. Note that this needs to be a
|
|
@@ -887,30 +887,30 @@
|
|
|
887
887
|
});
|
|
888
888
|
}
|
|
889
889
|
/** A `HarnessEnvironment` implementation for WebDriver. */
|
|
890
|
-
var
|
|
891
|
-
__extends(
|
|
892
|
-
function
|
|
890
|
+
var SeleniumWebDriverHarnessEnvironment = /** @class */ (function (_super) {
|
|
891
|
+
__extends(SeleniumWebDriverHarnessEnvironment, _super);
|
|
892
|
+
function SeleniumWebDriverHarnessEnvironment(rawRootElement, options) {
|
|
893
893
|
var _this = _super.call(this, rawRootElement) || this;
|
|
894
894
|
_this._options = Object.assign(Object.assign({}, defaultEnvironmentOptions), options);
|
|
895
895
|
return _this;
|
|
896
896
|
}
|
|
897
897
|
/** Gets the ElementFinder corresponding to the given TestElement. */
|
|
898
|
-
|
|
899
|
-
if (el instanceof
|
|
898
|
+
SeleniumWebDriverHarnessEnvironment.getNativeElement = function (el) {
|
|
899
|
+
if (el instanceof SeleniumWebDriverElement) {
|
|
900
900
|
return el.element();
|
|
901
901
|
}
|
|
902
902
|
throw Error('This TestElement was not created by the WebDriverHarnessEnvironment');
|
|
903
903
|
};
|
|
904
904
|
/** Creates a `HarnessLoader` rooted at the document root. */
|
|
905
|
-
|
|
906
|
-
return new
|
|
905
|
+
SeleniumWebDriverHarnessEnvironment.loader = function (driver, options) {
|
|
906
|
+
return new SeleniumWebDriverHarnessEnvironment(function () { return driver.findElement(webdriver__namespace.By.css('body')); }, options);
|
|
907
907
|
};
|
|
908
908
|
/**
|
|
909
909
|
* Flushes change detection and async tasks captured in the Angular zone.
|
|
910
910
|
* In most cases it should not be necessary to call this manually. However, there may be some edge
|
|
911
911
|
* cases where it is needed to fully flush animation events.
|
|
912
912
|
*/
|
|
913
|
-
|
|
913
|
+
SeleniumWebDriverHarnessEnvironment.prototype.forceStabilize = function () {
|
|
914
914
|
return __awaiter(this, void 0, void 0, function () {
|
|
915
915
|
return __generator(this, function (_a) {
|
|
916
916
|
switch (_a.label) {
|
|
@@ -923,7 +923,7 @@
|
|
|
923
923
|
});
|
|
924
924
|
};
|
|
925
925
|
/** @docs-private */
|
|
926
|
-
|
|
926
|
+
SeleniumWebDriverHarnessEnvironment.prototype.waitForTasksOutsideAngular = function () {
|
|
927
927
|
return __awaiter(this, void 0, void 0, function () {
|
|
928
928
|
return __generator(this, function (_a) {
|
|
929
929
|
return [2 /*return*/];
|
|
@@ -931,18 +931,18 @@
|
|
|
931
931
|
});
|
|
932
932
|
};
|
|
933
933
|
/** Gets the root element for the document. */
|
|
934
|
-
|
|
934
|
+
SeleniumWebDriverHarnessEnvironment.prototype.getDocumentRoot = function () {
|
|
935
935
|
var _this = this;
|
|
936
936
|
return function () { return _this.rawRootElement().getDriver().findElement(webdriver__namespace.By.css('body')); };
|
|
937
937
|
};
|
|
938
938
|
/** Creates a `TestElement` from a raw element. */
|
|
939
|
-
|
|
939
|
+
SeleniumWebDriverHarnessEnvironment.prototype.createTestElement = function (element) {
|
|
940
940
|
var _this = this;
|
|
941
|
-
return new
|
|
941
|
+
return new SeleniumWebDriverElement(element, function () { return _this.forceStabilize(); });
|
|
942
942
|
};
|
|
943
943
|
/** Creates a `HarnessLoader` rooted at the given raw element. */
|
|
944
|
-
|
|
945
|
-
return new
|
|
944
|
+
SeleniumWebDriverHarnessEnvironment.prototype.createEnvironment = function (element) {
|
|
945
|
+
return new SeleniumWebDriverHarnessEnvironment(element, this._options);
|
|
946
946
|
};
|
|
947
947
|
// Note: This seems to be working, though we may need to re-evaluate if we encounter issues with
|
|
948
948
|
// stale element references. `() => Promise<webdriver.WebElement[]>` seems like a more correct
|
|
@@ -950,7 +950,7 @@
|
|
|
950
950
|
/**
|
|
951
951
|
* Gets a list of all elements matching the given selector under this environment's root element.
|
|
952
952
|
*/
|
|
953
|
-
|
|
953
|
+
SeleniumWebDriverHarnessEnvironment.prototype.getAllRawElements = function (selector) {
|
|
954
954
|
return __awaiter(this, void 0, void 0, function () {
|
|
955
955
|
var els;
|
|
956
956
|
return __generator(this, function (_a) {
|
|
@@ -963,7 +963,7 @@
|
|
|
963
963
|
});
|
|
964
964
|
});
|
|
965
965
|
};
|
|
966
|
-
return
|
|
966
|
+
return SeleniumWebDriverHarnessEnvironment;
|
|
967
967
|
}(testing.HarnessEnvironment));
|
|
968
968
|
|
|
969
969
|
/**
|
|
@@ -982,11 +982,11 @@
|
|
|
982
982
|
* found in the LICENSE file at https://angular.io/license
|
|
983
983
|
*/
|
|
984
984
|
|
|
985
|
-
exports.
|
|
986
|
-
exports.
|
|
985
|
+
exports.SeleniumWebDriverElement = SeleniumWebDriverElement;
|
|
986
|
+
exports.SeleniumWebDriverHarnessEnvironment = SeleniumWebDriverHarnessEnvironment;
|
|
987
987
|
exports.waitForAngularReady = waitForAngularReady;
|
|
988
988
|
|
|
989
989
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
990
990
|
|
|
991
991
|
})));
|
|
992
|
-
//# sourceMappingURL=cdk-testing-webdriver.umd.js.map
|
|
992
|
+
//# sourceMappingURL=cdk-testing-selenium-webdriver.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdk-testing-selenium-webdriver.umd.js","sources":["../../../../../external/npm/node_modules/tslib/tslib.es6.js","../../../../../src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts","../../../../../src/cdk/testing/selenium-webdriver/selenium-web-driver-element.ts","../../../../../src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts","../../../../../src/cdk/testing/selenium-webdriver/public-api.ts","../../../../../src/cdk/testing/selenium-webdriver/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ModifierKeys, TestKey} from '@angular/cdk/testing';\nimport * as webdriver from 'selenium-webdriver';\n\n/**\n * Maps the `TestKey` constants to WebDriver's `webdriver.Key` constants.\n * See https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/webdriver/key.js#L29\n */\nexport const seleniumWebDriverKeyMap = {\n [TestKey.BACKSPACE]: webdriver.Key.BACK_SPACE,\n [TestKey.TAB]: webdriver.Key.TAB,\n [TestKey.ENTER]: webdriver.Key.ENTER,\n [TestKey.SHIFT]: webdriver.Key.SHIFT,\n [TestKey.CONTROL]: webdriver.Key.CONTROL,\n [TestKey.ALT]: webdriver.Key.ALT,\n [TestKey.ESCAPE]: webdriver.Key.ESCAPE,\n [TestKey.PAGE_UP]: webdriver.Key.PAGE_UP,\n [TestKey.PAGE_DOWN]: webdriver.Key.PAGE_DOWN,\n [TestKey.END]: webdriver.Key.END,\n [TestKey.HOME]: webdriver.Key.HOME,\n [TestKey.LEFT_ARROW]: webdriver.Key.ARROW_LEFT,\n [TestKey.UP_ARROW]: webdriver.Key.ARROW_UP,\n [TestKey.RIGHT_ARROW]: webdriver.Key.ARROW_RIGHT,\n [TestKey.DOWN_ARROW]: webdriver.Key.ARROW_DOWN,\n [TestKey.INSERT]: webdriver.Key.INSERT,\n [TestKey.DELETE]: webdriver.Key.DELETE,\n [TestKey.F1]: webdriver.Key.F1,\n [TestKey.F2]: webdriver.Key.F2,\n [TestKey.F3]: webdriver.Key.F3,\n [TestKey.F4]: webdriver.Key.F4,\n [TestKey.F5]: webdriver.Key.F5,\n [TestKey.F6]: webdriver.Key.F6,\n [TestKey.F7]: webdriver.Key.F7,\n [TestKey.F8]: webdriver.Key.F8,\n [TestKey.F9]: webdriver.Key.F9,\n [TestKey.F10]: webdriver.Key.F10,\n [TestKey.F11]: webdriver.Key.F11,\n [TestKey.F12]: webdriver.Key.F12,\n [TestKey.META]: webdriver.Key.META\n};\n\n/** Gets a list of WebDriver `Key`s for the given `ModifierKeys`. */\nexport function getSeleniumWebDriverModifierKeys(modifiers: ModifierKeys): string[] {\n const result: string[] = [];\n if (modifiers.control) {\n result.push(webdriver.Key.CONTROL);\n }\n if (modifiers.alt) {\n result.push(webdriver.Key.ALT);\n }\n if (modifiers.shift) {\n result.push(webdriver.Key.SHIFT);\n }\n if (modifiers.meta) {\n result.push(webdriver.Key.META);\n }\n return result;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n _getTextWithExcludedElements,\n ElementDimensions,\n EventData,\n ModifierKeys,\n TestElement,\n TestKey,\n TextOptions\n} from '@angular/cdk/testing';\nimport * as webdriver from 'selenium-webdriver';\nimport {getSeleniumWebDriverModifierKeys, seleniumWebDriverKeyMap} from './selenium-webdriver-keys';\n\n/** A `TestElement` implementation for WebDriver. */\nexport class SeleniumWebDriverElement implements TestElement {\n constructor(\n readonly element: () => webdriver.WebElement,\n private _stabilize: () => Promise<void>) {}\n\n /** Blur the element. */\n async blur(): Promise<void> {\n await this._executeScript(((element: HTMLElement) => element.blur()), this.element());\n await this._stabilize();\n }\n\n /** Clear the element's input (for input and textarea elements only). */\n async clear(): Promise<void> {\n await this.element().clear();\n await this._stabilize();\n }\n\n /**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */\n click(modifiers?: ModifierKeys): Promise<void>;\n /** Click the element at the element's center. */\n click(location: 'center', modifiers?: ModifierKeys): Promise<void>;\n /**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */\n click(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;\n async click(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchClickEventSequence(args, webdriver.Button.LEFT);\n await this._stabilize();\n }\n\n /**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */\n rightClick(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;\n async rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |\n [number, number, ModifierKeys?]): Promise<void> {\n await this._dispatchClickEventSequence(args, webdriver.Button.RIGHT);\n await this._stabilize();\n }\n\n /** Focus the element. */\n async focus(): Promise<void> {\n await this._executeScript((element: HTMLElement) => element.focus(), this.element());\n await this._stabilize();\n }\n\n /** Get the computed value of the given CSS property for the element. */\n async getCssValue(property: string): Promise<string> {\n await this._stabilize();\n return this.element().getCssValue(property);\n }\n\n /** Hovers the mouse over the element. */\n async hover(): Promise<void> {\n await this._actions().mouseMove(this.element()).perform();\n await this._stabilize();\n }\n\n /** Moves the mouse away from the element. */\n async mouseAway(): Promise<void> {\n await this._actions().mouseMove(this.element(), {x: -1, y: -1}).perform();\n await this._stabilize();\n }\n\n /**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */\n async sendKeys(...keys: (string | TestKey)[]): Promise<void>;\n /**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */\n async sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;\n async sendKeys(...modifiersAndKeys: any[]): Promise<void> {\n const first = modifiersAndKeys[0];\n let modifiers: ModifierKeys;\n let rest: (string | TestKey)[];\n if (typeof first !== 'string' && typeof first !== 'number') {\n modifiers = first;\n rest = modifiersAndKeys.slice(1);\n } else {\n modifiers = {};\n rest = modifiersAndKeys;\n }\n\n const modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);\n const keys = rest.map(k => typeof k === 'string' ? k.split('') : [seleniumWebDriverKeyMap[k]])\n .reduce((arr, k) => arr.concat(k), [])\n // webdriver.Key.chord doesn't work well with geckodriver (mozilla/geckodriver#1502),\n // so avoid it if no modifier keys are required.\n .map(k => modifierKeys.length > 0 ? webdriver.Key.chord(...modifierKeys, k) : k);\n\n await this.element().sendKeys(...keys);\n await this._stabilize();\n }\n\n /**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */\n async text(options?: TextOptions): Promise<string> {\n await this._stabilize();\n if (options?.exclude) {\n return this._executeScript(_getTextWithExcludedElements, this.element(), options.exclude);\n }\n return this.element().getText();\n }\n\n /** Gets the value for the given attribute from the element. */\n async getAttribute(name: string): Promise<string|null> {\n await this._stabilize();\n return this._executeScript(\n (element: Element, attribute: string) => element.getAttribute(attribute),\n this.element(), name);\n }\n\n /** Checks whether the element has the given class. */\n async hasClass(name: string): Promise<boolean> {\n await this._stabilize();\n const classes = (await this.getAttribute('class')) || '';\n return new Set(classes.split(/\\s+/).filter(c => c)).has(name);\n }\n\n /** Gets the dimensions of the element. */\n async getDimensions(): Promise<ElementDimensions> {\n await this._stabilize();\n const {width, height} = await this.element().getSize();\n const {x: left, y: top} = await this.element().getLocation();\n return {width, height, left, top};\n }\n\n /** Gets the value of a property of an element. */\n async getProperty(name: string): Promise<any> {\n await this._stabilize();\n return this._executeScript(\n (element: Element, property: keyof Element) => element[property],\n this.element(), name);\n }\n\n /** Sets the value of a property of an input. */\n async setInputValue(newValue: string): Promise<void> {\n await this._executeScript(\n (element: HTMLInputElement, value: string) => element.value = value,\n this.element(), newValue);\n await this._stabilize();\n }\n\n /** Selects the options at the specified indexes inside of a native `select` element. */\n async selectOptions(...optionIndexes: number[]): Promise<void> {\n await this._stabilize();\n const options = await this.element().findElements(webdriver.By.css('option'));\n const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.\n\n if (options.length && indexes.size) {\n // Reset the value so all the selected states are cleared. We can\n // reuse the input-specific method since the logic is the same.\n await this.setInputValue('');\n\n for (let i = 0; i < options.length; i++) {\n if (indexes.has(i)) {\n // We have to hold the control key while clicking on options so that multiple can be\n // selected in multi-selection mode. The key doesn't do anything for single selection.\n await this._actions().keyDown(webdriver.Key.CONTROL).perform();\n await options[i].click();\n await this._actions().keyUp(webdriver.Key.CONTROL).perform();\n }\n }\n\n await this._stabilize();\n }\n }\n\n /** Checks whether this element matches the given selector. */\n async matchesSelector(selector: string): Promise<boolean> {\n await this._stabilize();\n return this._executeScript((element: Element, s: string) =>\n (Element.prototype.matches || (Element.prototype as any).msMatchesSelector)\n .call(element, s),\n this.element(), selector);\n }\n\n /** Checks whether the element is focused. */\n async isFocused(): Promise<boolean> {\n await this._stabilize();\n return webdriver.WebElement.equals(\n this.element(), this.element().getDriver().switchTo().activeElement());\n }\n\n /**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */\n async dispatchEvent(name: string, data?: Record<string, EventData>): Promise<void> {\n await this._executeScript(dispatchEvent, name, this.element(), data);\n await this._stabilize();\n }\n\n /** Gets the webdriver action sequence. */\n private _actions() {\n return this.element().getDriver().actions();\n }\n\n /** Executes a function in the browser. */\n private async _executeScript<T>(script: Function, ...var_args: any[]): Promise<T> {\n return this.element().getDriver().executeScript(script, ...var_args);\n }\n\n /** Dispatches all the events that are part of a click event sequence. */\n private async _dispatchClickEventSequence(\n args: [ModifierKeys?] | ['center', ModifierKeys?] | [number, number, ModifierKeys?],\n button: string) {\n let modifiers: ModifierKeys = {};\n if (args.length && typeof args[args.length - 1] === 'object') {\n modifiers = args.pop() as ModifierKeys;\n }\n const modifierKeys = getSeleniumWebDriverModifierKeys(modifiers);\n\n // Omitting the offset argument to mouseMove results in clicking the center.\n // This is the default behavior we want, so we use an empty array of offsetArgs if\n // no args remain after popping the modifiers from the args passed to this function.\n const offsetArgs = (args.length === 2 ?\n [{x: args[0], y: args[1]}] : []) as [{x: number, y: number}];\n\n let actions = this._actions().mouseMove(this.element(), ...offsetArgs);\n\n for (const modifierKey of modifierKeys) {\n actions = actions.keyDown(modifierKey);\n }\n actions = actions.click(button);\n for (const modifierKey of modifierKeys) {\n actions = actions.keyUp(modifierKey);\n }\n\n await actions.perform();\n }\n}\n\n/**\n * Dispatches an event with a particular name and data to an element. Note that this needs to be a\n * pure function, because it gets stringified by WebDriver and is executed inside the browser.\n */\nfunction dispatchEvent(name: string, element: Element, data?: Record<string, EventData>) {\n const event = document.createEvent('Event');\n event.initEvent(name);\n // tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.\n Object.assign(event, data || {});\n element.dispatchEvent(event);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessEnvironment, HarnessLoader, TestElement} from '@angular/cdk/testing';\nimport * as webdriver from 'selenium-webdriver';\nimport {SeleniumWebDriverElement} from './selenium-web-driver-element';\n\n/**\n * An Angular framework stabilizer function that takes a callback and calls it when the application\n * is stable, passing a boolean indicating if any work was done.\n */\ndeclare interface FrameworkStabilizer {\n (callback: (didWork: boolean) => void): void;\n}\n\ndeclare global {\n interface Window {\n /**\n * These hooks are exposed by Angular to register a callback for when the application is stable\n * (no more pending tasks).\n *\n * For the implementation, see: https://github.com/\n * angular/angular/blob/master/packages/platform-browser/src/browser/testability.ts#L30-L49\n */\n frameworkStabilizers: FrameworkStabilizer[];\n }\n}\n\n/** Options to configure the environment. */\nexport interface WebDriverHarnessEnvironmentOptions {\n /** The query function used to find DOM elements. */\n queryFn: (selector: string, root: () => webdriver.WebElement) => Promise<webdriver.WebElement[]>;\n}\n\n/** The default environment options. */\nconst defaultEnvironmentOptions: WebDriverHarnessEnvironmentOptions = {\n queryFn: async (selector: string, root: () => webdriver.WebElement) =>\n root().findElements(webdriver.By.css(selector))\n};\n\n/**\n * This function is meant to be executed in the browser. It taps into the hooks exposed by Angular\n * and invokes the specified `callback` when the application is stable (no more pending tasks).\n */\nfunction whenStable(callback: (didWork: boolean[]) => void): void {\n Promise.all(window.frameworkStabilizers.map(stabilizer => new Promise(stabilizer)))\n .then(callback);\n}\n\n/**\n * This function is meant to be executed in the browser. It checks whether the Angular framework has\n * bootstrapped yet.\n */\nfunction isBootstrapped() {\n return !!window.frameworkStabilizers;\n}\n\n/** Waits for angular to be ready after the page load. */\nexport async function waitForAngularReady(wd: webdriver.WebDriver) {\n await wd.wait(() => wd.executeScript(isBootstrapped));\n await wd.executeAsyncScript(whenStable);\n}\n\n/** A `HarnessEnvironment` implementation for WebDriver. */\nexport class SeleniumWebDriverHarnessEnvironment extends\n HarnessEnvironment<() => webdriver.WebElement> {\n /** The options for this environment. */\n private _options: WebDriverHarnessEnvironmentOptions;\n\n protected constructor(\n rawRootElement: () => webdriver.WebElement, options?: WebDriverHarnessEnvironmentOptions) {\n super(rawRootElement);\n this._options = {...defaultEnvironmentOptions, ...options};\n }\n\n /** Gets the ElementFinder corresponding to the given TestElement. */\n static getNativeElement(el: TestElement): webdriver.WebElement {\n if (el instanceof SeleniumWebDriverElement) {\n return el.element();\n }\n throw Error('This TestElement was not created by the WebDriverHarnessEnvironment');\n }\n\n /** Creates a `HarnessLoader` rooted at the document root. */\n static loader(driver: webdriver.WebDriver, options?: WebDriverHarnessEnvironmentOptions):\n HarnessLoader {\n return new SeleniumWebDriverHarnessEnvironment(\n () => driver.findElement(webdriver.By.css('body')), options);\n }\n\n /**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */\n async forceStabilize(): Promise<void> {\n await this.rawRootElement().getDriver().executeAsyncScript(whenStable);\n }\n\n /** @docs-private */\n async waitForTasksOutsideAngular(): Promise<void> {\n // TODO: figure out how we can do this for the webdriver environment.\n // https://github.com/angular/components/issues/17412\n }\n\n /** Gets the root element for the document. */\n protected getDocumentRoot(): () => webdriver.WebElement {\n return () => this.rawRootElement().getDriver().findElement(webdriver.By.css('body'));\n }\n\n /** Creates a `TestElement` from a raw element. */\n protected createTestElement(element: () => webdriver.WebElement): TestElement {\n return new SeleniumWebDriverElement(element, () => this.forceStabilize());\n }\n\n /** Creates a `HarnessLoader` rooted at the given raw element. */\n protected createEnvironment(element: () => webdriver.WebElement):\n HarnessEnvironment<() => webdriver.WebElement> {\n return new SeleniumWebDriverHarnessEnvironment(element, this._options);\n }\n\n // Note: This seems to be working, though we may need to re-evaluate if we encounter issues with\n // stale element references. `() => Promise<webdriver.WebElement[]>` seems like a more correct\n // return type, though supporting it would require changes to the public harness API.\n /**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */\n protected async getAllRawElements(selector: string): Promise<(() => webdriver.WebElement)[]> {\n const els = await this._options.queryFn(selector, this.rawRootElement);\n return els.map((x: webdriver.WebElement) => () => x);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './selenium-web-driver-element';\nexport * from './selenium-web-driver-harness-environment';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":["TestKey","webdriver","_getTextWithExcludedElements","HarnessEnvironment"],"mappings":"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"}
|
|
@@ -743,10 +743,20 @@
|
|
|
743
743
|
};
|
|
744
744
|
/** Gets the selector used to find candidate elements. */
|
|
745
745
|
HarnessPredicate.prototype.getSelector = function () {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
746
|
+
// We don't have to go through the extra trouble if there are no ancestors.
|
|
747
|
+
if (!this._ancestor) {
|
|
748
|
+
return (this.harnessType.hostSelector || '').trim();
|
|
749
|
+
}
|
|
750
|
+
var _b = __read(_splitAndEscapeSelector(this._ancestor), 2), ancestors = _b[0], ancestorPlaceholders = _b[1];
|
|
751
|
+
var _c = __read(_splitAndEscapeSelector(this.harnessType.hostSelector || ''), 2), selectors = _c[0], selectorPlaceholders = _c[1];
|
|
752
|
+
var result = [];
|
|
753
|
+
// We have to add the ancestor to each part of the host compound selector, otherwise we can get
|
|
754
|
+
// incorrect results. E.g. `.ancestor .a, .ancestor .b` vs `.ancestor .a, .b`.
|
|
755
|
+
ancestors.forEach(function (escapedAncestor) {
|
|
756
|
+
var ancestor = _restoreSelector(escapedAncestor, ancestorPlaceholders);
|
|
757
|
+
return selectors.forEach(function (escapedSelector) { return result.push(ancestor + " " + _restoreSelector(escapedSelector, selectorPlaceholders)); });
|
|
758
|
+
});
|
|
759
|
+
return result.join(', ');
|
|
750
760
|
};
|
|
751
761
|
/** Adds base options common to all harness types. */
|
|
752
762
|
HarnessPredicate.prototype._addBaseOptions = function (options) {
|
|
@@ -789,6 +799,33 @@
|
|
|
789
799
|
return '{...}';
|
|
790
800
|
}
|
|
791
801
|
}
|
|
802
|
+
/**
|
|
803
|
+
* Splits up a compound selector into its parts and escapes any quoted content. The quoted content
|
|
804
|
+
* has to be escaped, because it can contain commas which will throw throw us off when trying to
|
|
805
|
+
* split it.
|
|
806
|
+
* @param selector Selector to be split.
|
|
807
|
+
* @returns The escaped string where any quoted content is replaced with a placeholder. E.g.
|
|
808
|
+
* `[foo="bar"]` turns into `[foo=__cdkPlaceholder-0__]`. Use `_restoreSelector` to restore
|
|
809
|
+
* the placeholders.
|
|
810
|
+
*/
|
|
811
|
+
function _splitAndEscapeSelector(selector) {
|
|
812
|
+
var placeholders = [];
|
|
813
|
+
// Note that the regex doesn't account for nested quotes so something like `"ab'cd'e"` will be
|
|
814
|
+
// considered as two blocks. It's a bit of an edge case, but if we find that it's a problem,
|
|
815
|
+
// we can make it a bit smarter using a loop. Use this for now since it's more readable and
|
|
816
|
+
// compact. More complete implementation:
|
|
817
|
+
// https://github.com/angular/angular/blob/bd34bc9e89f18a/packages/compiler/src/shadow_css.ts#L655
|
|
818
|
+
var result = selector.replace(/(["'][^["']*["'])/g, function (_, keep) {
|
|
819
|
+
var replaceBy = "__cdkPlaceholder-" + placeholders.length + "__";
|
|
820
|
+
placeholders.push(keep);
|
|
821
|
+
return replaceBy;
|
|
822
|
+
});
|
|
823
|
+
return [result.split(',').map(function (part) { return part.trim(); }), placeholders];
|
|
824
|
+
}
|
|
825
|
+
/** Restores a selector whose content was escaped in `_splitAndEscapeSelector`. */
|
|
826
|
+
function _restoreSelector(selector, placeholders) {
|
|
827
|
+
return selector.replace(/__cdkPlaceholder-(\d+)__/g, function (_, index) { return placeholders[+index]; });
|
|
828
|
+
}
|
|
792
829
|
|
|
793
830
|
/**
|
|
794
831
|
* Base harness environment class that can be extended to allow `ComponentHarness`es to be used in
|