@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.
Files changed (53) hide show
  1. package/a11y/_index.scss +4 -0
  2. package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +5 -0
  3. package/a11y/index.metadata.json +1 -1
  4. package/a11y-prebuilt.css +1 -1
  5. package/bundles/cdk-a11y.umd.js +8 -2
  6. package/bundles/cdk-a11y.umd.js.map +1 -1
  7. package/bundles/cdk-overlay.umd.js +14 -12
  8. package/bundles/cdk-overlay.umd.js.map +1 -1
  9. package/bundles/{cdk-testing-webdriver.umd.js → cdk-testing-selenium-webdriver.umd.js} +51 -51
  10. package/bundles/cdk-testing-selenium-webdriver.umd.js.map +1 -0
  11. package/bundles/cdk-testing.umd.js +41 -4
  12. package/bundles/cdk-testing.umd.js.map +1 -1
  13. package/bundles/cdk.umd.js +1 -1
  14. package/bundles/cdk.umd.js.map +1 -1
  15. package/esm2015/a11y/focus-trap/focus-trap.js +7 -2
  16. package/esm2015/a11y/high-contrast-mode/high-contrast-mode-detector.js +3 -2
  17. package/esm2015/overlay/dispatchers/overlay-outside-click-dispatcher.js +15 -13
  18. package/esm2015/testing/component-harness.js +42 -4
  19. package/esm2015/testing/selenium-webdriver/index.js +9 -0
  20. package/esm2015/testing/selenium-webdriver/public-api.js +10 -0
  21. package/esm2015/testing/selenium-webdriver/selenium-web-driver-element.js +240 -0
  22. package/esm2015/testing/selenium-webdriver/selenium-web-driver-harness-environment.js +97 -0
  23. package/esm2015/testing/selenium-webdriver/selenium-webdriver-keys.js +63 -0
  24. package/esm2015/testing/{webdriver/webdriver.externs.js → selenium-webdriver/selenium-webdriver.externs.js} +0 -0
  25. package/esm2015/version.js +1 -1
  26. package/fesm2015/a11y.js +8 -2
  27. package/fesm2015/a11y.js.map +1 -1
  28. package/fesm2015/cdk.js +1 -1
  29. package/fesm2015/cdk.js.map +1 -1
  30. package/fesm2015/overlay.js +14 -12
  31. package/fesm2015/overlay.js.map +1 -1
  32. package/fesm2015/testing/{webdriver.js → selenium-webdriver.js} +13 -13
  33. package/fesm2015/testing/selenium-webdriver.js.map +1 -0
  34. package/fesm2015/testing.js +41 -3
  35. package/fesm2015/testing.js.map +1 -1
  36. package/package.json +3 -3
  37. package/schematics/ng-add/index.js +1 -1
  38. package/schematics/ng-update/find-stylesheets.d.ts +8 -2
  39. package/schematics/ng-update/find-stylesheets.js +16 -5
  40. package/testing/{webdriver → selenium-webdriver}/index.d.ts +0 -0
  41. package/testing/selenium-webdriver/package.json +9 -0
  42. package/testing/{webdriver → selenium-webdriver}/public-api.d.ts +2 -2
  43. package/testing/{webdriver/webdriver-element.d.ts → selenium-webdriver/selenium-web-driver-element.d.ts} +1 -1
  44. package/testing/{webdriver/webdriver-harness-environment.d.ts → selenium-webdriver/selenium-web-driver-harness-environment.d.ts} +1 -1
  45. package/testing/{webdriver/webdriver-keys.d.ts → selenium-webdriver/selenium-webdriver-keys.d.ts} +2 -2
  46. package/bundles/cdk-testing-webdriver.umd.js.map +0 -1
  47. package/esm2015/testing/webdriver/index.js +0 -9
  48. package/esm2015/testing/webdriver/public-api.js +0 -10
  49. package/esm2015/testing/webdriver/webdriver-element.js +0 -240
  50. package/esm2015/testing/webdriver/webdriver-harness-environment.js +0 -97
  51. package/esm2015/testing/webdriver/webdriver-keys.js +0 -63
  52. package/fesm2015/testing/webdriver.js.map +0 -1
  53. 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.webdriver = {}), global.ng.cdk.testing, global['selenium-webdriver']));
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 webDriverKeyMap = (_a = {},
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 getWebDriverModifierKeys(modifiers) {
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 WebDriverElement = /** @class */ (function () {
395
- function WebDriverElement(element, _stabilize) {
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
- WebDriverElement.prototype.blur = function () {
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
- WebDriverElement.prototype.clear = function () {
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
- WebDriverElement.prototype.click = function () {
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
- WebDriverElement.prototype.rightClick = function () {
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
- WebDriverElement.prototype.focus = function () {
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
- WebDriverElement.prototype.getCssValue = function (property) {
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
- WebDriverElement.prototype.hover = function () {
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
- WebDriverElement.prototype.mouseAway = function () {
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
- WebDriverElement.prototype.sendKeys = function () {
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 = getWebDriverModifierKeys(modifiers);
551
- keys = rest.map(function (k) { return typeof k === 'string' ? k.split('') : [webDriverKeyMap[k]]; })
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
- WebDriverElement.prototype.text = function (options) {
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
- WebDriverElement.prototype.getAttribute = function (name) {
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
- WebDriverElement.prototype.hasClass = function (name) {
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
- WebDriverElement.prototype.getDimensions = function () {
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
- WebDriverElement.prototype.getProperty = function (name) {
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
- WebDriverElement.prototype.setInputValue = function (newValue) {
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
- WebDriverElement.prototype.selectOptions = function () {
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
- WebDriverElement.prototype.matchesSelector = function (selector) {
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
- WebDriverElement.prototype.isFocused = function () {
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
- WebDriverElement.prototype.dispatchEvent = function (name, data) {
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
- WebDriverElement.prototype._actions = function () {
771
+ SeleniumWebDriverElement.prototype._actions = function () {
772
772
  return this.element().getDriver().actions();
773
773
  };
774
774
  /** Executes a function in the browser. */
775
- WebDriverElement.prototype._executeScript = function (script) {
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
- WebDriverElement.prototype._dispatchClickEventSequence = function (args, button) {
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 = getWebDriverModifierKeys(modifiers);
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 WebDriverElement;
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 WebDriverHarnessEnvironment = /** @class */ (function (_super) {
891
- __extends(WebDriverHarnessEnvironment, _super);
892
- function WebDriverHarnessEnvironment(rawRootElement, options) {
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
- WebDriverHarnessEnvironment.getNativeElement = function (el) {
899
- if (el instanceof WebDriverElement) {
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
- WebDriverHarnessEnvironment.loader = function (driver, options) {
906
- return new WebDriverHarnessEnvironment(function () { return driver.findElement(webdriver__namespace.By.css('body')); }, options);
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
- WebDriverHarnessEnvironment.prototype.forceStabilize = function () {
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
- WebDriverHarnessEnvironment.prototype.waitForTasksOutsideAngular = function () {
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
- WebDriverHarnessEnvironment.prototype.getDocumentRoot = function () {
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
- WebDriverHarnessEnvironment.prototype.createTestElement = function (element) {
939
+ SeleniumWebDriverHarnessEnvironment.prototype.createTestElement = function (element) {
940
940
  var _this = this;
941
- return new WebDriverElement(element, function () { return _this.forceStabilize(); });
941
+ return new SeleniumWebDriverElement(element, function () { return _this.forceStabilize(); });
942
942
  };
943
943
  /** Creates a `HarnessLoader` rooted at the given raw element. */
944
- WebDriverHarnessEnvironment.prototype.createEnvironment = function (element) {
945
- return new WebDriverHarnessEnvironment(element, this._options);
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
- WebDriverHarnessEnvironment.prototype.getAllRawElements = function (selector) {
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 WebDriverHarnessEnvironment;
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.WebDriverElement = WebDriverElement;
986
- exports.WebDriverHarnessEnvironment = WebDriverHarnessEnvironment;
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
- var _this = this;
747
- return this._ancestor.split(',')
748
- .map(function (part) { return (part.trim() + " " + _this.harnessType.hostSelector).trim(); })
749
- .join(',');
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