@oracle/oraclejet-webdriver 10.1.7
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/LICENSE +21 -0
- package/README.md +16 -0
- package/bin/generate +509 -0
- package/bin/generate-jet +163 -0
- package/bin/templates/baseclass.ts-template +13 -0
- package/bin/templates/class.ts-template +12 -0
- package/bin/templates/element-test.spec.ts-template +28 -0
- package/bin/templates/index.ts-template +27 -0
- package/bin/templates/jetcomponents.json +71 -0
- package/bin/templates/package.json-template +15 -0
- package/bin/templates/tsconfig.json-template +19 -0
- package/elements/OjWebElement.js +232 -0
- package/elements/OjWebElement.js.map +1 -0
- package/elements/OjWebElement.ts +674 -0
- package/elements/index.js +214 -0
- package/elements/index.js.map +1 -0
- package/elements/index.ts +75 -0
- package/elements/oj-accordion/OjAccordion.js +8 -0
- package/elements/oj-accordion/OjAccordion.js.map +1 -0
- package/elements/oj-accordion/OjAccordion.ts +12 -0
- package/elements/oj-accordion/OjAccordionBase.js +20 -0
- package/elements/oj-accordion/OjAccordionBase.js.map +1 -0
- package/elements/oj-accordion/OjAccordionBase.ts +48 -0
- package/elements/oj-accordion/index.js +17 -0
- package/elements/oj-accordion/index.js.map +1 -0
- package/elements/oj-accordion/index.ts +27 -0
- package/elements/oj-button/OjButton.js +20 -0
- package/elements/oj-button/OjButton.js.map +1 -0
- package/elements/oj-button/OjButton.ts +35 -0
- package/elements/oj-button/OjButtonBase.js +23 -0
- package/elements/oj-button/OjButtonBase.js.map +1 -0
- package/elements/oj-button/OjButtonBase.ts +57 -0
- package/elements/oj-button/index.js +17 -0
- package/elements/oj-button/index.js.map +1 -0
- package/elements/oj-button/index.ts +27 -0
- package/elements/oj-buttonset-many/OjButtonsetMany.js +8 -0
- package/elements/oj-buttonset-many/OjButtonsetMany.js.map +1 -0
- package/elements/oj-buttonset-many/OjButtonsetMany.ts +11 -0
- package/elements/oj-buttonset-many/OjButtonsetManyBase.js +35 -0
- package/elements/oj-buttonset-many/OjButtonsetManyBase.js.map +1 -0
- package/elements/oj-buttonset-many/OjButtonsetManyBase.ts +93 -0
- package/elements/oj-buttonset-many/index.js +17 -0
- package/elements/oj-buttonset-many/index.js.map +1 -0
- package/elements/oj-buttonset-many/index.ts +27 -0
- package/elements/oj-buttonset-one/OjButtonsetOne.js +8 -0
- package/elements/oj-buttonset-one/OjButtonsetOne.js.map +1 -0
- package/elements/oj-buttonset-one/OjButtonsetOne.ts +11 -0
- package/elements/oj-buttonset-one/OjButtonsetOneBase.js +35 -0
- package/elements/oj-buttonset-one/OjButtonsetOneBase.js.map +1 -0
- package/elements/oj-buttonset-one/OjButtonsetOneBase.ts +93 -0
- package/elements/oj-buttonset-one/index.js +17 -0
- package/elements/oj-buttonset-one/index.js.map +1 -0
- package/elements/oj-buttonset-one/index.ts +27 -0
- package/elements/oj-chart/OjChart.js +8 -0
- package/elements/oj-chart/OjChart.js.map +1 -0
- package/elements/oj-chart/OjChart.ts +12 -0
- package/elements/oj-chart/OjChartBase.js +170 -0
- package/elements/oj-chart/OjChartBase.js.map +1 -0
- package/elements/oj-chart/OjChartBase.ts +2468 -0
- package/elements/oj-chart/index.js +17 -0
- package/elements/oj-chart/index.js.map +1 -0
- package/elements/oj-chart/index.ts +27 -0
- package/elements/oj-checkboxset/OjCheckboxset.js +39 -0
- package/elements/oj-checkboxset/OjCheckboxset.js.map +1 -0
- package/elements/oj-checkboxset/OjCheckboxset.ts +74 -0
- package/elements/oj-checkboxset/OjCheckboxsetBase.js +68 -0
- package/elements/oj-checkboxset/OjCheckboxsetBase.js.map +1 -0
- package/elements/oj-checkboxset/OjCheckboxsetBase.ts +262 -0
- package/elements/oj-checkboxset/index.js +17 -0
- package/elements/oj-checkboxset/index.js.map +1 -0
- package/elements/oj-checkboxset/index.ts +27 -0
- package/elements/oj-collapsible/OjCollapsible.js +23 -0
- package/elements/oj-collapsible/OjCollapsible.js.map +1 -0
- package/elements/oj-collapsible/OjCollapsible.ts +36 -0
- package/elements/oj-collapsible/OjCollapsibleBase.js +23 -0
- package/elements/oj-collapsible/OjCollapsibleBase.js.map +1 -0
- package/elements/oj-collapsible/OjCollapsibleBase.ts +57 -0
- package/elements/oj-collapsible/index.js +17 -0
- package/elements/oj-collapsible/index.js.map +1 -0
- package/elements/oj-collapsible/index.ts +27 -0
- package/elements/oj-color-palette/OjColorPalette.js +8 -0
- package/elements/oj-color-palette/OjColorPalette.js.map +1 -0
- package/elements/oj-color-palette/OjColorPalette.ts +12 -0
- package/elements/oj-color-palette/OjColorPaletteBase.js +65 -0
- package/elements/oj-color-palette/OjColorPaletteBase.js.map +1 -0
- package/elements/oj-color-palette/OjColorPaletteBase.ts +235 -0
- package/elements/oj-color-palette/index.js +17 -0
- package/elements/oj-color-palette/index.js.map +1 -0
- package/elements/oj-color-palette/index.ts +27 -0
- package/elements/oj-color-spectrum/OjColorSpectrum.js +8 -0
- package/elements/oj-color-spectrum/OjColorSpectrum.js.map +1 -0
- package/elements/oj-color-spectrum/OjColorSpectrum.ts +12 -0
- package/elements/oj-color-spectrum/OjColorSpectrumBase.js +56 -0
- package/elements/oj-color-spectrum/OjColorSpectrumBase.js.map +1 -0
- package/elements/oj-color-spectrum/OjColorSpectrumBase.ts +210 -0
- package/elements/oj-color-spectrum/index.js +17 -0
- package/elements/oj-color-spectrum/index.js.map +1 -0
- package/elements/oj-color-spectrum/index.ts +27 -0
- package/elements/oj-combobox-many/OjComboboxMany.js +51 -0
- package/elements/oj-combobox-many/OjComboboxMany.js.map +1 -0
- package/elements/oj-combobox-many/OjComboboxMany.ts +80 -0
- package/elements/oj-combobox-many/OjComboboxManyBase.js +98 -0
- package/elements/oj-combobox-many/OjComboboxManyBase.js.map +1 -0
- package/elements/oj-combobox-many/OjComboboxManyBase.ts +428 -0
- package/elements/oj-combobox-many/index.js +17 -0
- package/elements/oj-combobox-many/index.js.map +1 -0
- package/elements/oj-combobox-many/index.ts +27 -0
- package/elements/oj-combobox-one/OjComboboxOne.js +49 -0
- package/elements/oj-combobox-one/OjComboboxOne.js.map +1 -0
- package/elements/oj-combobox-one/OjComboboxOne.ts +74 -0
- package/elements/oj-combobox-one/OjComboboxOneBase.js +101 -0
- package/elements/oj-combobox-one/OjComboboxOneBase.js.map +1 -0
- package/elements/oj-combobox-one/OjComboboxOneBase.ts +437 -0
- package/elements/oj-combobox-one/index.js +17 -0
- package/elements/oj-combobox-one/index.js.map +1 -0
- package/elements/oj-combobox-one/index.ts +27 -0
- package/elements/oj-conveyor-belt/OjConveyorBelt.js +16 -0
- package/elements/oj-conveyor-belt/OjConveyorBelt.js.map +1 -0
- package/elements/oj-conveyor-belt/OjConveyorBelt.ts +30 -0
- package/elements/oj-conveyor-belt/OjConveyorBeltBase.js +29 -0
- package/elements/oj-conveyor-belt/OjConveyorBeltBase.js.map +1 -0
- package/elements/oj-conveyor-belt/OjConveyorBeltBase.ts +87 -0
- package/elements/oj-conveyor-belt/index.js +17 -0
- package/elements/oj-conveyor-belt/index.js.map +1 -0
- package/elements/oj-conveyor-belt/index.ts +27 -0
- package/elements/oj-data-grid/OjDataGrid.js +198 -0
- package/elements/oj-data-grid/OjDataGrid.js.map +1 -0
- package/elements/oj-data-grid/OjDataGrid.ts +279 -0
- package/elements/oj-data-grid/OjDataGridBase.js +65 -0
- package/elements/oj-data-grid/OjDataGridBase.js.map +1 -0
- package/elements/oj-data-grid/OjDataGridBase.ts +705 -0
- package/elements/oj-data-grid/index.js +17 -0
- package/elements/oj-data-grid/index.js.map +1 -0
- package/elements/oj-data-grid/index.ts +27 -0
- package/elements/oj-date-picker/OjDatePicker.js +8 -0
- package/elements/oj-date-picker/OjDatePicker.js.map +1 -0
- package/elements/oj-date-picker/OjDatePicker.ts +12 -0
- package/elements/oj-date-picker/OjDatePickerBase.js +104 -0
- package/elements/oj-date-picker/OjDatePickerBase.js.map +1 -0
- package/elements/oj-date-picker/OjDatePickerBase.ts +536 -0
- package/elements/oj-date-picker/index.js +17 -0
- package/elements/oj-date-picker/index.js.map +1 -0
- package/elements/oj-date-picker/index.ts +27 -0
- package/elements/oj-date-time-picker/OjDateTimePicker.js +8 -0
- package/elements/oj-date-time-picker/OjDateTimePicker.js.map +1 -0
- package/elements/oj-date-time-picker/OjDateTimePicker.ts +32 -0
- package/elements/oj-date-time-picker/OjDateTimePickerBase.js +107 -0
- package/elements/oj-date-time-picker/OjDateTimePickerBase.js.map +1 -0
- package/elements/oj-date-time-picker/OjDateTimePickerBase.ts +567 -0
- package/elements/oj-date-time-picker/index.js +17 -0
- package/elements/oj-date-time-picker/index.js.map +1 -0
- package/elements/oj-date-time-picker/index.ts +27 -0
- package/elements/oj-diagram/OjDiagram.js +8 -0
- package/elements/oj-diagram/OjDiagram.js.map +1 -0
- package/elements/oj-diagram/OjDiagram.ts +12 -0
- package/elements/oj-diagram/OjDiagramBase.js +128 -0
- package/elements/oj-diagram/OjDiagramBase.js.map +1 -0
- package/elements/oj-diagram/OjDiagramBase.ts +740 -0
- package/elements/oj-diagram/index.js +17 -0
- package/elements/oj-diagram/index.js.map +1 -0
- package/elements/oj-diagram/index.ts +27 -0
- package/elements/oj-dialog/OjDialog.js +13 -0
- package/elements/oj-dialog/OjDialog.js.map +1 -0
- package/elements/oj-dialog/OjDialog.ts +21 -0
- package/elements/oj-dialog/OjDialogBase.js +32 -0
- package/elements/oj-dialog/OjDialogBase.js.map +1 -0
- package/elements/oj-dialog/OjDialogBase.ts +144 -0
- package/elements/oj-dialog/index.js +17 -0
- package/elements/oj-dialog/index.js.map +1 -0
- package/elements/oj-dialog/index.ts +27 -0
- package/elements/oj-file-picker/OjFilePicker.js +36 -0
- package/elements/oj-file-picker/OjFilePicker.js.map +1 -0
- package/elements/oj-file-picker/OjFilePicker.ts +49 -0
- package/elements/oj-file-picker/OjFilePickerBase.js +29 -0
- package/elements/oj-file-picker/OjFilePickerBase.js.map +1 -0
- package/elements/oj-file-picker/OjFilePickerBase.ts +75 -0
- package/elements/oj-file-picker/index.js +17 -0
- package/elements/oj-file-picker/index.js.map +1 -0
- package/elements/oj-file-picker/index.ts +27 -0
- package/elements/oj-film-strip/OjFilmStrip.js +8 -0
- package/elements/oj-film-strip/OjFilmStrip.js.map +1 -0
- package/elements/oj-film-strip/OjFilmStrip.ts +12 -0
- package/elements/oj-film-strip/OjFilmStripBase.js +32 -0
- package/elements/oj-film-strip/OjFilmStripBase.js.map +1 -0
- package/elements/oj-film-strip/OjFilmStripBase.ts +118 -0
- package/elements/oj-film-strip/index.js +17 -0
- package/elements/oj-film-strip/index.js.map +1 -0
- package/elements/oj-film-strip/index.ts +27 -0
- package/elements/oj-gantt/OjGantt.js +8 -0
- package/elements/oj-gantt/OjGantt.js.map +1 -0
- package/elements/oj-gantt/OjGantt.ts +12 -0
- package/elements/oj-gantt/OjGanttBase.js +98 -0
- package/elements/oj-gantt/OjGanttBase.js.map +1 -0
- package/elements/oj-gantt/OjGanttBase.ts +996 -0
- package/elements/oj-gantt/index.js +17 -0
- package/elements/oj-gantt/index.js.map +1 -0
- package/elements/oj-gantt/index.ts +27 -0
- package/elements/oj-indexer/OjIndexer.js +8 -0
- package/elements/oj-indexer/OjIndexer.js.map +1 -0
- package/elements/oj-indexer/OjIndexer.ts +12 -0
- package/elements/oj-indexer/OjIndexerBase.js +14 -0
- package/elements/oj-indexer/OjIndexerBase.js.map +1 -0
- package/elements/oj-indexer/OjIndexerBase.ts +62 -0
- package/elements/oj-indexer/index.js +17 -0
- package/elements/oj-indexer/index.js.map +1 -0
- package/elements/oj-indexer/index.ts +27 -0
- package/elements/oj-input-date/OjInputDate.js +10 -0
- package/elements/oj-input-date/OjInputDate.js.map +1 -0
- package/elements/oj-input-date/OjInputDate.ts +14 -0
- package/elements/oj-input-date/OjInputDateBase.js +107 -0
- package/elements/oj-input-date/OjInputDateBase.js.map +1 -0
- package/elements/oj-input-date/OjInputDateBase.ts +545 -0
- package/elements/oj-input-date/index.js +17 -0
- package/elements/oj-input-date/index.js.map +1 -0
- package/elements/oj-input-date/index.ts +27 -0
- package/elements/oj-input-date-time/OjInputDateTime.js +10 -0
- package/elements/oj-input-date-time/OjInputDateTime.js.map +1 -0
- package/elements/oj-input-date-time/OjInputDateTime.ts +14 -0
- package/elements/oj-input-date-time/OjInputDateTimeBase.js +110 -0
- package/elements/oj-input-date-time/OjInputDateTimeBase.js.map +1 -0
- package/elements/oj-input-date-time/OjInputDateTimeBase.ts +576 -0
- package/elements/oj-input-date-time/index.js +17 -0
- package/elements/oj-input-date-time/index.js.map +1 -0
- package/elements/oj-input-date-time/index.ts +27 -0
- package/elements/oj-input-number/OjInputNumber.js +10 -0
- package/elements/oj-input-number/OjInputNumber.js.map +1 -0
- package/elements/oj-input-number/OjInputNumber.ts +14 -0
- package/elements/oj-input-number/OjInputNumberBase.js +98 -0
- package/elements/oj-input-number/OjInputNumberBase.js.map +1 -0
- package/elements/oj-input-number/OjInputNumberBase.ts +406 -0
- package/elements/oj-input-number/index.js +17 -0
- package/elements/oj-input-number/index.js.map +1 -0
- package/elements/oj-input-number/index.ts +27 -0
- package/elements/oj-input-password/OjInputPassword.js +10 -0
- package/elements/oj-input-password/OjInputPassword.js.map +1 -0
- package/elements/oj-input-password/OjInputPassword.ts +14 -0
- package/elements/oj-input-password/OjInputPasswordBase.js +83 -0
- package/elements/oj-input-password/OjInputPasswordBase.js.map +1 -0
- package/elements/oj-input-password/OjInputPasswordBase.ts +323 -0
- package/elements/oj-input-password/index.js +17 -0
- package/elements/oj-input-password/index.js.map +1 -0
- package/elements/oj-input-password/index.ts +27 -0
- package/elements/oj-input-search/OjInputSearch.js +41 -0
- package/elements/oj-input-search/OjInputSearch.js.map +1 -0
- package/elements/oj-input-search/OjInputSearch.ts +64 -0
- package/elements/oj-input-search/OjInputSearchBase.js +26 -0
- package/elements/oj-input-search/OjInputSearchBase.js.map +1 -0
- package/elements/oj-input-search/OjInputSearchBase.ts +66 -0
- package/elements/oj-input-search/index.js +17 -0
- package/elements/oj-input-search/index.js.map +1 -0
- package/elements/oj-input-search/index.ts +27 -0
- package/elements/oj-input-text/OjInputText.js +10 -0
- package/elements/oj-input-text/OjInputText.js.map +1 -0
- package/elements/oj-input-text/OjInputText.ts +15 -0
- package/elements/oj-input-text/OjInputTextBase.js +95 -0
- package/elements/oj-input-text/OjInputTextBase.js.map +1 -0
- package/elements/oj-input-text/OjInputTextBase.ts +361 -0
- package/elements/oj-input-text/index.js +17 -0
- package/elements/oj-input-text/index.js.map +1 -0
- package/elements/oj-input-text/index.ts +27 -0
- package/elements/oj-input-time/OjInputTime.js +10 -0
- package/elements/oj-input-time/OjInputTime.js.map +1 -0
- package/elements/oj-input-time/OjInputTime.ts +14 -0
- package/elements/oj-input-time/OjInputTimeBase.js +101 -0
- package/elements/oj-input-time/OjInputTimeBase.js.map +1 -0
- package/elements/oj-input-time/OjInputTimeBase.ts +477 -0
- package/elements/oj-input-time/index.js +17 -0
- package/elements/oj-input-time/index.js.map +1 -0
- package/elements/oj-input-time/index.ts +27 -0
- package/elements/oj-label/OjLabel.js +8 -0
- package/elements/oj-label/OjLabel.js.map +1 -0
- package/elements/oj-label/OjLabel.ts +12 -0
- package/elements/oj-label/OjLabelBase.js +23 -0
- package/elements/oj-label/OjLabelBase.js.map +1 -0
- package/elements/oj-label/OjLabelBase.ts +79 -0
- package/elements/oj-label/index.js +17 -0
- package/elements/oj-label/index.js.map +1 -0
- package/elements/oj-label/index.ts +27 -0
- package/elements/oj-led-gauge/OjLedGauge.js +8 -0
- package/elements/oj-led-gauge/OjLedGauge.js.map +1 -0
- package/elements/oj-led-gauge/OjLedGauge.ts +12 -0
- package/elements/oj-led-gauge/OjLedGaugeBase.js +62 -0
- package/elements/oj-led-gauge/OjLedGaugeBase.js.map +1 -0
- package/elements/oj-led-gauge/OjLedGaugeBase.ts +302 -0
- package/elements/oj-led-gauge/index.js +17 -0
- package/elements/oj-led-gauge/index.js.map +1 -0
- package/elements/oj-led-gauge/index.ts +27 -0
- package/elements/oj-legend/OjLegend.js +8 -0
- package/elements/oj-legend/OjLegend.js.map +1 -0
- package/elements/oj-legend/OjLegend.ts +12 -0
- package/elements/oj-legend/OjLegendBase.js +74 -0
- package/elements/oj-legend/OjLegendBase.js.map +1 -0
- package/elements/oj-legend/OjLegendBase.ts +324 -0
- package/elements/oj-legend/index.js +17 -0
- package/elements/oj-legend/index.js.map +1 -0
- package/elements/oj-legend/index.ts +27 -0
- package/elements/oj-list-view/OjListView.js +25 -0
- package/elements/oj-list-view/OjListView.js.map +1 -0
- package/elements/oj-list-view/OjListView.ts +36 -0
- package/elements/oj-list-view/OjListViewBase.js +71 -0
- package/elements/oj-list-view/OjListViewBase.js.map +1 -0
- package/elements/oj-list-view/OjListViewBase.ts +355 -0
- package/elements/oj-list-view/index.js +17 -0
- package/elements/oj-list-view/index.js.map +1 -0
- package/elements/oj-list-view/index.ts +27 -0
- package/elements/oj-masonry-layout/OjMasonryLayout.js +8 -0
- package/elements/oj-masonry-layout/OjMasonryLayout.js.map +1 -0
- package/elements/oj-masonry-layout/OjMasonryLayout.ts +12 -0
- package/elements/oj-masonry-layout/OjMasonryLayoutBase.js +14 -0
- package/elements/oj-masonry-layout/OjMasonryLayoutBase.js.map +1 -0
- package/elements/oj-masonry-layout/OjMasonryLayoutBase.ts +46 -0
- package/elements/oj-masonry-layout/index.js +17 -0
- package/elements/oj-masonry-layout/index.js.map +1 -0
- package/elements/oj-masonry-layout/index.ts +27 -0
- package/elements/oj-menu/OjMenu.js +28 -0
- package/elements/oj-menu/OjMenu.js.map +1 -0
- package/elements/oj-menu/OjMenu.ts +42 -0
- package/elements/oj-menu/OjMenuBase.js +17 -0
- package/elements/oj-menu/OjMenuBase.js.map +1 -0
- package/elements/oj-menu/OjMenuBase.ts +121 -0
- package/elements/oj-menu/index.js +17 -0
- package/elements/oj-menu/index.js.map +1 -0
- package/elements/oj-menu/index.ts +27 -0
- package/elements/oj-menu-button/OjMenuButton.js +14 -0
- package/elements/oj-menu-button/OjMenuButton.js.map +1 -0
- package/elements/oj-menu-button/OjMenuButton.ts +20 -0
- package/elements/oj-menu-button/OjMenuButtonBase.js +20 -0
- package/elements/oj-menu-button/OjMenuButtonBase.js.map +1 -0
- package/elements/oj-menu-button/OjMenuButtonBase.ts +48 -0
- package/elements/oj-menu-button/index.js +17 -0
- package/elements/oj-menu-button/index.js.map +1 -0
- package/elements/oj-menu-button/index.ts +27 -0
- package/elements/oj-message/OjMessage.js +13 -0
- package/elements/oj-message/OjMessage.js.map +1 -0
- package/elements/oj-message/OjMessage.ts +19 -0
- package/elements/oj-message/OjMessageBase.js +17 -0
- package/elements/oj-message/OjMessageBase.js.map +1 -0
- package/elements/oj-message/OjMessageBase.ts +113 -0
- package/elements/oj-message/index.js +17 -0
- package/elements/oj-message/index.js.map +1 -0
- package/elements/oj-message/index.ts +27 -0
- package/elements/oj-n-box/OjNBox.js +8 -0
- package/elements/oj-n-box/OjNBox.js.map +1 -0
- package/elements/oj-n-box/OjNBox.ts +12 -0
- package/elements/oj-n-box/OjNBoxBase.js +116 -0
- package/elements/oj-n-box/OjNBoxBase.js.map +1 -0
- package/elements/oj-n-box/OjNBoxBase.ts +880 -0
- package/elements/oj-n-box/index.js +17 -0
- package/elements/oj-n-box/index.js.map +1 -0
- package/elements/oj-n-box/index.ts +27 -0
- package/elements/oj-navigation-list/OjNavigationList.js +186 -0
- package/elements/oj-navigation-list/OjNavigationList.js.map +1 -0
- package/elements/oj-navigation-list/OjNavigationList.ts +250 -0
- package/elements/oj-navigation-list/OjNavigationListBase.js +50 -0
- package/elements/oj-navigation-list/OjNavigationListBase.js.map +1 -0
- package/elements/oj-navigation-list/OjNavigationListBase.ts +164 -0
- package/elements/oj-navigation-list/index.js +17 -0
- package/elements/oj-navigation-list/index.js.map +1 -0
- package/elements/oj-navigation-list/index.ts +27 -0
- package/elements/oj-paging-control/OjPagingControl.js +13 -0
- package/elements/oj-paging-control/OjPagingControl.js.map +1 -0
- package/elements/oj-paging-control/OjPagingControl.ts +26 -0
- package/elements/oj-paging-control/OjPagingControlBase.js +29 -0
- package/elements/oj-paging-control/OjPagingControlBase.js.map +1 -0
- package/elements/oj-paging-control/OjPagingControlBase.ts +235 -0
- package/elements/oj-paging-control/index.js +17 -0
- package/elements/oj-paging-control/index.js.map +1 -0
- package/elements/oj-paging-control/index.ts +27 -0
- package/elements/oj-picto-chart/OjPictoChart.js +8 -0
- package/elements/oj-picto-chart/OjPictoChart.js.map +1 -0
- package/elements/oj-picto-chart/OjPictoChart.ts +12 -0
- package/elements/oj-picto-chart/OjPictoChartBase.js +86 -0
- package/elements/oj-picto-chart/OjPictoChartBase.js.map +1 -0
- package/elements/oj-picto-chart/OjPictoChartBase.ts +394 -0
- package/elements/oj-picto-chart/index.js +17 -0
- package/elements/oj-picto-chart/index.js.map +1 -0
- package/elements/oj-picto-chart/index.ts +27 -0
- package/elements/oj-popup/OjPopup.js +8 -0
- package/elements/oj-popup/OjPopup.js.map +1 -0
- package/elements/oj-popup/OjPopup.ts +11 -0
- package/elements/oj-popup/OjPopupBase.js +29 -0
- package/elements/oj-popup/OjPopupBase.js.map +1 -0
- package/elements/oj-popup/OjPopupBase.ts +155 -0
- package/elements/oj-popup/index.js +17 -0
- package/elements/oj-popup/index.js.map +1 -0
- package/elements/oj-popup/index.ts +27 -0
- package/elements/oj-progress/OjProgress.js +8 -0
- package/elements/oj-progress/OjProgress.js.map +1 -0
- package/elements/oj-progress/OjProgress.ts +12 -0
- package/elements/oj-progress/OjProgressBase.js +23 -0
- package/elements/oj-progress/OjProgressBase.js.map +1 -0
- package/elements/oj-progress/OjProgressBase.ts +65 -0
- package/elements/oj-progress/index.js +17 -0
- package/elements/oj-progress/index.js.map +1 -0
- package/elements/oj-progress/index.ts +27 -0
- package/elements/oj-progress-list/OjProgressList.js +8 -0
- package/elements/oj-progress-list/OjProgressList.js.map +1 -0
- package/elements/oj-progress-list/OjProgressList.ts +12 -0
- package/elements/oj-progress-list/OjProgressListBase.js +11 -0
- package/elements/oj-progress-list/OjProgressListBase.js.map +1 -0
- package/elements/oj-progress-list/OjProgressListBase.ts +21 -0
- package/elements/oj-progress-list/index.js +17 -0
- package/elements/oj-progress-list/index.js.map +1 -0
- package/elements/oj-progress-list/index.ts +27 -0
- package/elements/oj-radioset/OjRadioset.js +32 -0
- package/elements/oj-radioset/OjRadioset.js.map +1 -0
- package/elements/oj-radioset/OjRadioset.ts +63 -0
- package/elements/oj-radioset/OjRadiosetBase.js +68 -0
- package/elements/oj-radioset/OjRadiosetBase.js.map +1 -0
- package/elements/oj-radioset/OjRadiosetBase.ts +262 -0
- package/elements/oj-radioset/index.js +17 -0
- package/elements/oj-radioset/index.js.map +1 -0
- package/elements/oj-radioset/index.ts +27 -0
- package/elements/oj-rating-gauge/OjRatingGauge.js +8 -0
- package/elements/oj-rating-gauge/OjRatingGauge.js.map +1 -0
- package/elements/oj-rating-gauge/OjRatingGauge.ts +12 -0
- package/elements/oj-rating-gauge/OjRatingGaugeBase.js +80 -0
- package/elements/oj-rating-gauge/OjRatingGaugeBase.js.map +1 -0
- package/elements/oj-rating-gauge/OjRatingGaugeBase.ts +424 -0
- package/elements/oj-rating-gauge/index.js +17 -0
- package/elements/oj-rating-gauge/index.js.map +1 -0
- package/elements/oj-rating-gauge/index.ts +27 -0
- package/elements/oj-refresher/OjRefresher.js +8 -0
- package/elements/oj-refresher/OjRefresher.js.map +1 -0
- package/elements/oj-refresher/OjRefresher.ts +12 -0
- package/elements/oj-refresher/OjRefresherBase.js +20 -0
- package/elements/oj-refresher/OjRefresherBase.js.map +1 -0
- package/elements/oj-refresher/OjRefresherBase.ts +64 -0
- package/elements/oj-refresher/index.js +17 -0
- package/elements/oj-refresher/index.js.map +1 -0
- package/elements/oj-refresher/index.ts +27 -0
- package/elements/oj-row-expander/OjRowExpander.js +8 -0
- package/elements/oj-row-expander/OjRowExpander.js.map +1 -0
- package/elements/oj-row-expander/OjRowExpander.ts +12 -0
- package/elements/oj-row-expander/OjRowExpanderBase.js +20 -0
- package/elements/oj-row-expander/OjRowExpanderBase.js.map +1 -0
- package/elements/oj-row-expander/OjRowExpanderBase.ts +76 -0
- package/elements/oj-row-expander/index.js +17 -0
- package/elements/oj-row-expander/index.js.map +1 -0
- package/elements/oj-row-expander/index.ts +27 -0
- package/elements/oj-select-many/OjSelectMany.js +51 -0
- package/elements/oj-select-many/OjSelectMany.js.map +1 -0
- package/elements/oj-select-many/OjSelectMany.ts +80 -0
- package/elements/oj-select-many/OjSelectManyBase.js +89 -0
- package/elements/oj-select-many/OjSelectManyBase.js.map +1 -0
- package/elements/oj-select-many/OjSelectManyBase.ts +387 -0
- package/elements/oj-select-many/index.js +17 -0
- package/elements/oj-select-many/index.js.map +1 -0
- package/elements/oj-select-many/index.ts +27 -0
- package/elements/oj-select-one/OjSelectOne.js +45 -0
- package/elements/oj-select-one/OjSelectOne.js.map +1 -0
- package/elements/oj-select-one/OjSelectOne.ts +70 -0
- package/elements/oj-select-one/OjSelectOneBase.js +89 -0
- package/elements/oj-select-one/OjSelectOneBase.js.map +1 -0
- package/elements/oj-select-one/OjSelectOneBase.ts +387 -0
- package/elements/oj-select-one/index.js +17 -0
- package/elements/oj-select-one/index.js.map +1 -0
- package/elements/oj-select-one/index.ts +27 -0
- package/elements/oj-select-single/OjSelectSingle.js +35 -0
- package/elements/oj-select-single/OjSelectSingle.js.map +1 -0
- package/elements/oj-select-single/OjSelectSingle.ts +51 -0
- package/elements/oj-select-single/OjSelectSingleBase.js +77 -0
- package/elements/oj-select-single/OjSelectSingleBase.js.map +1 -0
- package/elements/oj-select-single/OjSelectSingleBase.ts +303 -0
- package/elements/oj-select-single/index.js +17 -0
- package/elements/oj-select-single/index.js.map +1 -0
- package/elements/oj-select-single/index.ts +27 -0
- package/elements/oj-selector/OjSelector.js +13 -0
- package/elements/oj-selector/OjSelector.js.map +1 -0
- package/elements/oj-selector/OjSelector.ts +20 -0
- package/elements/oj-selector/OjSelectorBase.js +26 -0
- package/elements/oj-selector/OjSelectorBase.js.map +1 -0
- package/elements/oj-selector/OjSelectorBase.ts +66 -0
- package/elements/oj-selector/index.js +17 -0
- package/elements/oj-selector/index.js.map +1 -0
- package/elements/oj-selector/index.ts +27 -0
- package/elements/oj-slider/OjSlider.js +15 -0
- package/elements/oj-slider/OjSlider.js.map +1 -0
- package/elements/oj-slider/OjSlider.ts +25 -0
- package/elements/oj-slider/OjSliderBase.js +71 -0
- package/elements/oj-slider/OjSliderBase.js.map +1 -0
- package/elements/oj-slider/OjSliderBase.ts +259 -0
- package/elements/oj-slider/index.js +17 -0
- package/elements/oj-slider/index.js.map +1 -0
- package/elements/oj-slider/index.ts +27 -0
- package/elements/oj-spark-chart/OjSparkChart.js +8 -0
- package/elements/oj-spark-chart/OjSparkChart.js.map +1 -0
- package/elements/oj-spark-chart/OjSparkChart.ts +12 -0
- package/elements/oj-spark-chart/OjSparkChartBase.js +95 -0
- package/elements/oj-spark-chart/OjSparkChartBase.js.map +1 -0
- package/elements/oj-spark-chart/OjSparkChartBase.ts +431 -0
- package/elements/oj-spark-chart/index.js +17 -0
- package/elements/oj-spark-chart/index.js.map +1 -0
- package/elements/oj-spark-chart/index.ts +27 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGauge.js +8 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGauge.js.map +1 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGauge.ts +12 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.js +107 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.js.map +1 -0
- package/elements/oj-status-meter-gauge/OjStatusMeterGaugeBase.ts +491 -0
- package/elements/oj-status-meter-gauge/index.js +17 -0
- package/elements/oj-status-meter-gauge/index.js.map +1 -0
- package/elements/oj-status-meter-gauge/index.ts +27 -0
- package/elements/oj-stream-list/OjStreamList.js +70 -0
- package/elements/oj-stream-list/OjStreamList.js.map +1 -0
- package/elements/oj-stream-list/OjStreamList.ts +79 -0
- package/elements/oj-stream-list/OjStreamListBase.js +29 -0
- package/elements/oj-stream-list/OjStreamListBase.js.map +1 -0
- package/elements/oj-stream-list/OjStreamListBase.ts +109 -0
- package/elements/oj-stream-list/index.js +17 -0
- package/elements/oj-stream-list/index.js.map +1 -0
- package/elements/oj-stream-list/index.ts +27 -0
- package/elements/oj-sunburst/OjSunburst.js +8 -0
- package/elements/oj-sunburst/OjSunburst.js.map +1 -0
- package/elements/oj-sunburst/OjSunburst.ts +12 -0
- package/elements/oj-sunburst/OjSunburstBase.js +104 -0
- package/elements/oj-sunburst/OjSunburstBase.js.map +1 -0
- package/elements/oj-sunburst/OjSunburstBase.ts +512 -0
- package/elements/oj-sunburst/index.js +17 -0
- package/elements/oj-sunburst/index.js.map +1 -0
- package/elements/oj-sunburst/index.ts +27 -0
- package/elements/oj-swipe-actions/OjSwipeActions.js +19 -0
- package/elements/oj-swipe-actions/OjSwipeActions.js.map +1 -0
- package/elements/oj-swipe-actions/OjSwipeActions.ts +30 -0
- package/elements/oj-swipe-actions/OjSwipeActionsBase.js +11 -0
- package/elements/oj-swipe-actions/OjSwipeActionsBase.js.map +1 -0
- package/elements/oj-swipe-actions/OjSwipeActionsBase.ts +37 -0
- package/elements/oj-swipe-actions/index.js +17 -0
- package/elements/oj-swipe-actions/index.js.map +1 -0
- package/elements/oj-swipe-actions/index.ts +27 -0
- package/elements/oj-switch/OjSwitch.js +16 -0
- package/elements/oj-switch/OjSwitch.js.map +1 -0
- package/elements/oj-switch/OjSwitch.ts +26 -0
- package/elements/oj-switch/OjSwitchBase.js +56 -0
- package/elements/oj-switch/OjSwitchBase.js.map +1 -0
- package/elements/oj-switch/OjSwitchBase.ts +192 -0
- package/elements/oj-switch/index.js +17 -0
- package/elements/oj-switch/index.js.map +1 -0
- package/elements/oj-switch/index.ts +27 -0
- package/elements/oj-tab-bar/OjTabBar.js +8 -0
- package/elements/oj-tab-bar/OjTabBar.js.map +1 -0
- package/elements/oj-tab-bar/OjTabBar.ts +12 -0
- package/elements/oj-tab-bar/OjTabBarBase.js +50 -0
- package/elements/oj-tab-bar/OjTabBarBase.js.map +1 -0
- package/elements/oj-tab-bar/OjTabBarBase.ts +200 -0
- package/elements/oj-tab-bar/index.js +17 -0
- package/elements/oj-tab-bar/index.js.map +1 -0
- package/elements/oj-tab-bar/index.ts +27 -0
- package/elements/oj-table/OjTable.js +33 -0
- package/elements/oj-table/OjTable.js.map +1 -0
- package/elements/oj-table/OjTable.ts +52 -0
- package/elements/oj-table/OjTableBase.js +98 -0
- package/elements/oj-table/OjTableBase.js.map +1 -0
- package/elements/oj-table/OjTableBase.ts +702 -0
- package/elements/oj-table/index.js +17 -0
- package/elements/oj-table/index.js.map +1 -0
- package/elements/oj-table/index.ts +27 -0
- package/elements/oj-tag-cloud/OjTagCloud.js +8 -0
- package/elements/oj-tag-cloud/OjTagCloud.js.map +1 -0
- package/elements/oj-tag-cloud/OjTagCloud.ts +12 -0
- package/elements/oj-tag-cloud/OjTagCloudBase.js +68 -0
- package/elements/oj-tag-cloud/OjTagCloudBase.js.map +1 -0
- package/elements/oj-tag-cloud/OjTagCloudBase.ts +318 -0
- package/elements/oj-tag-cloud/index.js +17 -0
- package/elements/oj-tag-cloud/index.js.map +1 -0
- package/elements/oj-tag-cloud/index.ts +27 -0
- package/elements/oj-text-area/OjTextArea.js +10 -0
- package/elements/oj-text-area/OjTextArea.js.map +1 -0
- package/elements/oj-text-area/OjTextArea.ts +14 -0
- package/elements/oj-text-area/OjTextAreaBase.js +95 -0
- package/elements/oj-text-area/OjTextAreaBase.js.map +1 -0
- package/elements/oj-text-area/OjTextAreaBase.ts +365 -0
- package/elements/oj-text-area/index.js +17 -0
- package/elements/oj-text-area/index.js.map +1 -0
- package/elements/oj-text-area/index.ts +27 -0
- package/elements/oj-thematic-map/OjThematicMap.js +8 -0
- package/elements/oj-thematic-map/OjThematicMap.js.map +1 -0
- package/elements/oj-thematic-map/OjThematicMap.ts +12 -0
- package/elements/oj-thematic-map/OjThematicMapBase.js +119 -0
- package/elements/oj-thematic-map/OjThematicMapBase.js.map +1 -0
- package/elements/oj-thematic-map/OjThematicMapBase.ts +777 -0
- package/elements/oj-thematic-map/index.js +17 -0
- package/elements/oj-thematic-map/index.js.map +1 -0
- package/elements/oj-thematic-map/index.ts +27 -0
- package/elements/oj-time-axis/OjTimeAxis.js +8 -0
- package/elements/oj-time-axis/OjTimeAxis.js.map +1 -0
- package/elements/oj-time-axis/OjTimeAxis.ts +12 -0
- package/elements/oj-time-axis/OjTimeAxisBase.js +26 -0
- package/elements/oj-time-axis/OjTimeAxisBase.js.map +1 -0
- package/elements/oj-time-axis/OjTimeAxisBase.ts +176 -0
- package/elements/oj-time-axis/index.js +17 -0
- package/elements/oj-time-axis/index.js.map +1 -0
- package/elements/oj-time-axis/index.ts +27 -0
- package/elements/oj-timeline/OjTimeline.js +8 -0
- package/elements/oj-timeline/OjTimeline.js.map +1 -0
- package/elements/oj-timeline/OjTimeline.ts +12 -0
- package/elements/oj-timeline/OjTimelineBase.js +71 -0
- package/elements/oj-timeline/OjTimelineBase.js.map +1 -0
- package/elements/oj-timeline/OjTimelineBase.ts +715 -0
- package/elements/oj-timeline/index.js +17 -0
- package/elements/oj-timeline/index.js.map +1 -0
- package/elements/oj-timeline/index.ts +27 -0
- package/elements/oj-train/OjTrain.js +8 -0
- package/elements/oj-train/OjTrain.js.map +1 -0
- package/elements/oj-train/OjTrain.ts +12 -0
- package/elements/oj-train/OjTrainBase.js +20 -0
- package/elements/oj-train/OjTrainBase.js.map +1 -0
- package/elements/oj-train/OjTrainBase.ts +72 -0
- package/elements/oj-train/index.js +17 -0
- package/elements/oj-train/index.js.map +1 -0
- package/elements/oj-train/index.ts +27 -0
- package/elements/oj-tree-view/OjTreeView.js +80 -0
- package/elements/oj-tree-view/OjTreeView.js.map +1 -0
- package/elements/oj-tree-view/OjTreeView.ts +117 -0
- package/elements/oj-tree-view/OjTreeViewBase.js +35 -0
- package/elements/oj-tree-view/OjTreeViewBase.js.map +1 -0
- package/elements/oj-tree-view/OjTreeViewBase.ts +131 -0
- package/elements/oj-tree-view/index.js +17 -0
- package/elements/oj-tree-view/index.js.map +1 -0
- package/elements/oj-tree-view/index.ts +27 -0
- package/elements/oj-treemap/OjTreemap.js +8 -0
- package/elements/oj-treemap/OjTreemap.js.map +1 -0
- package/elements/oj-treemap/OjTreemap.ts +12 -0
- package/elements/oj-treemap/OjTreemapBase.js +110 -0
- package/elements/oj-treemap/OjTreemapBase.js.map +1 -0
- package/elements/oj-treemap/OjTreemapBase.ts +594 -0
- package/elements/oj-treemap/index.js +17 -0
- package/elements/oj-treemap/index.js.map +1 -0
- package/elements/oj-treemap/index.ts +27 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayout.js +8 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayout.js.map +1 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayout.ts +12 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.js +23 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.js.map +1 -0
- package/elements/oj-waterfall-layout/OjWaterfallLayoutBase.ts +87 -0
- package/elements/oj-waterfall-layout/index.js +17 -0
- package/elements/oj-waterfall-layout/index.js.map +1 -0
- package/elements/oj-waterfall-layout/index.ts +27 -0
- package/index.js +164 -0
- package/index.js.map +1 -0
- package/index.ts +440 -0
- package/lib/Expectation.js +189 -0
- package/lib/Expectation.js.map +1 -0
- package/lib/Expectation.ts +272 -0
- package/lib/OjFetch.js +83 -0
- package/lib/OjFetch.js.map +1 -0
- package/lib/OjFetch.ts +158 -0
- package/lib/ScreenshotManager.js +113 -0
- package/lib/ScreenshotManager.js.map +1 -0
- package/lib/ScreenshotManager.ts +195 -0
- package/lib/driver-manager.js +89 -0
- package/lib/driver-manager.js.map +1 -0
- package/lib/driver-manager.ts +330 -0
- package/lib/driver-override.js +120 -0
- package/lib/driver-override.js.map +1 -0
- package/lib/driver-override.ts +255 -0
- package/lib/input-utils.js +24 -0
- package/lib/input-utils.js.map +1 -0
- package/lib/input-utils.ts +50 -0
- package/lib/slot-proxy.js +25 -0
- package/lib/slot-proxy.js.map +1 -0
- package/lib/slot-proxy.ts +61 -0
- package/lib/stale-element.js +29 -0
- package/lib/stale-element.js.map +1 -0
- package/lib/stale-element.ts +44 -0
- package/package.json +19 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Define an interface for objects that (like the WebDriver instance) can take screen shots
|
|
6
|
+
*/
|
|
7
|
+
interface ScreenshotTaker {
|
|
8
|
+
takeScreenshot(): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The ScreenshotManager interface
|
|
13
|
+
*/
|
|
14
|
+
interface ScreenshotManager {
|
|
15
|
+
/**
|
|
16
|
+
* This function will set screenshot location based on test suite name and test name
|
|
17
|
+
* @param suiteName test case's suite name
|
|
18
|
+
* @param testName test case's name
|
|
19
|
+
*/
|
|
20
|
+
beforeTest(suiteName: string, testName: string): void
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* This function will do cleanup after test execution. It will puerge screenshot for passed test and generate final state
|
|
24
|
+
* screenshot for failed test
|
|
25
|
+
* @param passed boolean to check test state
|
|
26
|
+
*/
|
|
27
|
+
afterTest(passed: boolean): void
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* This function will take screenshot and save it on the file system
|
|
31
|
+
* @param screenshotTaker an screenshotTaker instance
|
|
32
|
+
* @param name screenshot image name
|
|
33
|
+
* @return a promise
|
|
34
|
+
* @example await screenshotManager.takeAndSaveScreenShot(driver, "before_click");
|
|
35
|
+
*/
|
|
36
|
+
takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* This implementation of ScreenshotManager Interface will not take any screenshot
|
|
41
|
+
*/
|
|
42
|
+
class NoOpScreenShotManager implements ScreenshotManager {
|
|
43
|
+
beforeTest(suiteName: string, testName: string): void { }
|
|
44
|
+
afterTest(passed: boolean): void { }
|
|
45
|
+
takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void> { return null }
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* This implementation of ScreenshotManager Interface will take screenshot
|
|
50
|
+
*/
|
|
51
|
+
class TakeScreenshotManager implements ScreenshotManager {
|
|
52
|
+
|
|
53
|
+
private _screenshotLocation:string = "";
|
|
54
|
+
private _screenshotsDir: string
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* This function will replace all invalid characters with underscore
|
|
58
|
+
* @param name string test name may having some invalid characters
|
|
59
|
+
* @private
|
|
60
|
+
*/
|
|
61
|
+
private replaceCharacters(name: string): string {
|
|
62
|
+
var output = name.replace(/[^a-z0-9]/ig, '_');
|
|
63
|
+
return output;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* This constructor will set screenshot root directory on the file system, like <report-root>/screenshots
|
|
68
|
+
* @param screenshotRoot screenshot root directory
|
|
69
|
+
*/
|
|
70
|
+
constructor(screenshotRoot: string) {
|
|
71
|
+
|
|
72
|
+
var mochawesomeReportDir = screenshotRoot;
|
|
73
|
+
try {
|
|
74
|
+
if (!fs.existsSync(mochawesomeReportDir)) fs.mkdirSync(mochawesomeReportDir);
|
|
75
|
+
} catch (err) {
|
|
76
|
+
console.error(err);
|
|
77
|
+
console.error(err.stack);
|
|
78
|
+
}
|
|
79
|
+
this._screenshotsDir = mochawesomeReportDir + path.sep + "screenshots";
|
|
80
|
+
try {
|
|
81
|
+
if (!fs.existsSync(this._screenshotsDir)) fs.mkdirSync(this._screenshotsDir);
|
|
82
|
+
} catch (err) {
|
|
83
|
+
console.error(err);
|
|
84
|
+
console.error(err.stack);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* This function will set screenshot location based on test suite name and test name
|
|
90
|
+
* @param suiteName test case's suite name
|
|
91
|
+
* @param testName test case's name
|
|
92
|
+
*/
|
|
93
|
+
beforeTest(suiteName: string, testName: string): void {
|
|
94
|
+
var suiteN = this.replaceCharacters(suiteName);
|
|
95
|
+
var testN = this.replaceCharacters(testName);
|
|
96
|
+
var suiteF = this._screenshotsDir + path.sep + suiteN;
|
|
97
|
+
var testF = suiteF + path.sep + testN;
|
|
98
|
+
this._screenshotLocation = testF;
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
if (!fs.existsSync(suiteF)) fs.mkdirSync(suiteF);
|
|
102
|
+
} catch (err) {
|
|
103
|
+
console.error(err);
|
|
104
|
+
console.error(err.stack);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
if (!fs.existsSync(testF)) fs.mkdirSync(testF);
|
|
108
|
+
} catch (err) {
|
|
109
|
+
console.error(err);
|
|
110
|
+
console.error(err.stack);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* This function will do cleanup after test execution. It will puerge screenshot for passed test and will generate final state
|
|
116
|
+
* screenshot for failed test
|
|
117
|
+
* @param passed boolean to check test state
|
|
118
|
+
*/
|
|
119
|
+
afterTest(passed: boolean): void {
|
|
120
|
+
|
|
121
|
+
if (passed) {
|
|
122
|
+
try {
|
|
123
|
+
|
|
124
|
+
var FOLDER_PATH = this._screenshotLocation;
|
|
125
|
+
if (fs.existsSync(FOLDER_PATH)) {
|
|
126
|
+
var files = fs.readdirSync(FOLDER_PATH);
|
|
127
|
+
files.forEach(element => {
|
|
128
|
+
fs.unlinkSync(FOLDER_PATH + path.sep + element);
|
|
129
|
+
});
|
|
130
|
+
fs.rmdirSync(FOLDER_PATH);
|
|
131
|
+
}
|
|
132
|
+
} catch (err) {
|
|
133
|
+
console.error(err);
|
|
134
|
+
console.error(err.stack);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* This function will take screenshot and save it on the file system
|
|
141
|
+
* @param screenshotTaker a screenshotTaker instance
|
|
142
|
+
* @param name screeshot image name
|
|
143
|
+
*/
|
|
144
|
+
async takeAndSaveScreenShot(screenshotTaker: ScreenshotTaker, name: string): Promise<void> {
|
|
145
|
+
var counter = 1;
|
|
146
|
+
var FOLDER_PATH = this._screenshotLocation;
|
|
147
|
+
if (fs.existsSync(FOLDER_PATH)) {
|
|
148
|
+
var files = fs.readdirSync(FOLDER_PATH);
|
|
149
|
+
files.forEach(element => {
|
|
150
|
+
if (element.includes(name)) counter++;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const screenshotImg = await screenshotTaker.takeScreenshot();
|
|
155
|
+
fs.writeFileSync(this._screenshotLocation + path.sep + name + counter + ".jpg", screenshotImg, 'base64');
|
|
156
|
+
|
|
157
|
+
} catch (err) {
|
|
158
|
+
console.error(err);
|
|
159
|
+
console.error(err.stack);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
//Below are the top-level methods of the ScreenshotManager module
|
|
167
|
+
|
|
168
|
+
var currentInstance: ScreenshotManager = new NoOpScreenShotManager();
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* This function will create an instance ScreenshotManager
|
|
172
|
+
* @param screenshotRoot screenshot root location
|
|
173
|
+
*/
|
|
174
|
+
export function create(screenshotRoot: string): ScreenshotManager {
|
|
175
|
+
if (screenshotRoot) {
|
|
176
|
+
return new TakeScreenshotManager(screenshotRoot);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
return new NoOpScreenShotManager();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* This function will get an active ScreenshotManager instance
|
|
185
|
+
* @return an active ScreenshotManager instance
|
|
186
|
+
*/
|
|
187
|
+
export function get(): ScreenshotManager { return currentInstance }
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* This function will set an active ScreenshotManager instance
|
|
191
|
+
* @param screenshotManager an active ScreenshotManager instance
|
|
192
|
+
*/
|
|
193
|
+
export function set(screenshotManager: ScreenshotManager): void { currentInstance = screenshotManager }
|
|
194
|
+
|
|
195
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriverManager = void 0;
|
|
4
|
+
const selenium_webdriver_1 = require("selenium-webdriver");
|
|
5
|
+
const defaultConfigName = "";
|
|
6
|
+
const defaultCapabilities = new selenium_webdriver_1.Capabilities({
|
|
7
|
+
autoWebview: true,
|
|
8
|
+
browserName: "chrome",
|
|
9
|
+
});
|
|
10
|
+
const defaultTimeouts = {
|
|
11
|
+
implicit: 0,
|
|
12
|
+
pageLoad: 30000,
|
|
13
|
+
script: 30000,
|
|
14
|
+
};
|
|
15
|
+
const configs = {};
|
|
16
|
+
let currentInstance = {
|
|
17
|
+
configName: null,
|
|
18
|
+
driver: null,
|
|
19
|
+
};
|
|
20
|
+
const quitDelay = 500;
|
|
21
|
+
let builder;
|
|
22
|
+
let releaseTimer = setTimeout(() => true, 0);
|
|
23
|
+
class DriverManager {
|
|
24
|
+
static setBuilder(b) {
|
|
25
|
+
if (builder) {
|
|
26
|
+
throw Error("DriverManager Builder instance has already been set, and cannot be set again");
|
|
27
|
+
}
|
|
28
|
+
builder = b;
|
|
29
|
+
}
|
|
30
|
+
static registerConfig(config, name) {
|
|
31
|
+
configs[name || defaultConfigName] = config;
|
|
32
|
+
}
|
|
33
|
+
static async getDriver(configName) {
|
|
34
|
+
clearTimeout(releaseTimer);
|
|
35
|
+
configName = configName || defaultConfigName;
|
|
36
|
+
if (configName === currentInstance.configName) {
|
|
37
|
+
return currentInstance.driver;
|
|
38
|
+
}
|
|
39
|
+
await quitCurrentDriver();
|
|
40
|
+
return createDriver(configName);
|
|
41
|
+
}
|
|
42
|
+
static async getCurrentDriver() {
|
|
43
|
+
return DriverManager.getDriver(currentInstance.configName);
|
|
44
|
+
}
|
|
45
|
+
static releaseDriver(driver) {
|
|
46
|
+
clearTimeout(releaseTimer);
|
|
47
|
+
releaseTimer = setTimeout(async () => {
|
|
48
|
+
await quitCurrentDriver();
|
|
49
|
+
}, quitDelay);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.DriverManager = DriverManager;
|
|
53
|
+
DriverManager.registerConfig({ capabilities: defaultCapabilities, timeouts: defaultTimeouts });
|
|
54
|
+
async function createDriver(configName) {
|
|
55
|
+
const config = configs[configName];
|
|
56
|
+
if (!config) {
|
|
57
|
+
throw Error(`No driver configuration exists for "${configName}"`);
|
|
58
|
+
}
|
|
59
|
+
const caps = new selenium_webdriver_1.Capabilities(configs[defaultConfigName].capabilities);
|
|
60
|
+
if (config.capabilities) {
|
|
61
|
+
caps.merge(config.capabilities);
|
|
62
|
+
}
|
|
63
|
+
const timeouts = Object.assign({}, configs[defaultConfigName].timeouts, config.timeouts);
|
|
64
|
+
if (!builder) {
|
|
65
|
+
builder = new selenium_webdriver_1.Builder();
|
|
66
|
+
}
|
|
67
|
+
const driver = builder.withCapabilities(caps).build();
|
|
68
|
+
currentInstance = { configName, driver };
|
|
69
|
+
await driver.manage().setTimeouts(timeouts);
|
|
70
|
+
return driver;
|
|
71
|
+
}
|
|
72
|
+
async function quitCurrentDriver() {
|
|
73
|
+
const driver = currentInstance.driver;
|
|
74
|
+
if (driver) {
|
|
75
|
+
try {
|
|
76
|
+
await driver.quit();
|
|
77
|
+
}
|
|
78
|
+
catch (ex) {
|
|
79
|
+
console.warn(ex);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
currentInstance = {
|
|
83
|
+
configName: null,
|
|
84
|
+
driver: null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=driver-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-manager.js","sourceRoot":"","sources":["../../../rt/src/test/webdriverjs/oraclejet-webdriver/lib/driver-manager.ts"],"names":[],"mappings":";;;AAAA,2DAI4B;AA2B5B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,mBAAmB,GAAG,IAAI,iCAAY,CAAC;IAC3C,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,QAAQ;CACtB,CAAC,CAAC;AACH,MAAM,eAAe,GAAa;IAChC,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,KAAK;CACd,CAAC;AACF,MAAM,OAAO,GAAiD,EAAE,CAAC;AACjE,IAAI,eAAe,GAA8C;IAC/D,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;CACb,CAAC;AAQF,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,IAAI,OAAgB,CAAC;AAKrB,IAAI,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAoF7C,MAAa,aAAa;IAiBjB,MAAM,CAAC,UAAU,CAAC,CAAU;QACjC,IAAI,OAAO,EAAE;YACX,MAAM,KAAK,CAAC,8EAA8E,CAAC,CAAC;SAC7F;QACD,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IAuCM,MAAM,CAAC,cAAc,CAAC,MAAiC,EAAE,IAAa;QAC3E,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,GAAG,MAAM,CAAC;IAC9C,CAAC;IAgCM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAmB;QAC/C,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,UAAU,GAAG,UAAU,IAAI,iBAAiB,CAAC;QAE7C,IAAI,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE;YAC7C,OAAO,eAAe,CAAC,MAAM,CAAC;SAC/B;QAED,MAAM,iBAAiB,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IASM,MAAM,CAAC,KAAK,CAAC,gBAAgB;QAClC,OAAO,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAOM,MAAM,CAAC,aAAa,CAAC,MAAiB;QAC3C,YAAY,CAAC,YAAY,CAAC,CAAC;QAI3B,YAAY,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC;CACF;AApID,sCAoIC;AACD,aAAa,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;AAU/F,KAAK,UAAU,YAAY,CAAC,UAAkB;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,KAAK,CAAC,uCAAuC,UAAU,GAAG,CAAC,CAAC;KACnE;IAED,MAAM,IAAI,GAAG,IAAI,iCAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,YAAY,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACjC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,IAAI,4BAAO,EAAE,CAAC;KACzB;IACD,MAAM,MAAM,GAAc,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,eAAe,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAIzC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAKD,KAAK,UAAU,iBAAiB;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IACtC,IAAI,MAAM,EAAE;QACV,IAAI;YACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;SACrB;QAAC,OAAO,EAAE,EAAE;YAEX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClB;gBAAS;YACR,eAAe,GAAG;gBAChB,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,IAAI;aACb,CAAC;SACH;KACF;AACH,CAAC"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Builder,
|
|
3
|
+
Capabilities,
|
|
4
|
+
WebDriver,
|
|
5
|
+
} from "selenium-webdriver";
|
|
6
|
+
|
|
7
|
+
interface Timeouts {
|
|
8
|
+
/**
|
|
9
|
+
* The timeout value for script execution. Default 30000
|
|
10
|
+
*/
|
|
11
|
+
script?: number;
|
|
12
|
+
/**
|
|
13
|
+
* The timeout value for page loading (and to be ready). Default 30000
|
|
14
|
+
*/
|
|
15
|
+
pageLoad?: number;
|
|
16
|
+
/**
|
|
17
|
+
* The timeout value for finding an element on the page. Default 0
|
|
18
|
+
*/
|
|
19
|
+
implicit?: number;
|
|
20
|
+
}
|
|
21
|
+
interface CapabilitiesConfiguration {
|
|
22
|
+
/**
|
|
23
|
+
* The WebDriver Capabilties for the configuration
|
|
24
|
+
*/
|
|
25
|
+
capabilities?: Capabilities;
|
|
26
|
+
/**
|
|
27
|
+
* The WebDriver timeout values for the configuration
|
|
28
|
+
*/
|
|
29
|
+
timeouts?: Timeouts;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const defaultConfigName = "";
|
|
33
|
+
const defaultCapabilities = new Capabilities({
|
|
34
|
+
autoWebview: true,
|
|
35
|
+
browserName: "chrome",
|
|
36
|
+
});
|
|
37
|
+
const defaultTimeouts: Timeouts = {
|
|
38
|
+
implicit: 0,
|
|
39
|
+
pageLoad: 30000,
|
|
40
|
+
script: 30000,
|
|
41
|
+
};
|
|
42
|
+
const configs: { [key: string]: CapabilitiesConfiguration } = {};
|
|
43
|
+
let currentInstance: { configName: string, driver: WebDriver } = {
|
|
44
|
+
configName: null,
|
|
45
|
+
driver: null,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The delay, in milliseconds, that the manager will wait after the driver is
|
|
50
|
+
* release to see if there are pending requests for a driver instance. If no
|
|
51
|
+
* requests exist, then the driver is closed, and subsequent requests will
|
|
52
|
+
* receive a new instance.
|
|
53
|
+
*/
|
|
54
|
+
const quitDelay = 500;
|
|
55
|
+
let builder: Builder;
|
|
56
|
+
// The NodeJS.Timer used to cleanup the driver instance if no subsequent test
|
|
57
|
+
// asks for the driver. The type (NodeJS.Timer) cannot be defined here because
|
|
58
|
+
// typedoc cannot resolve the NodeJS namespace, so we infer it by calling
|
|
59
|
+
// setTimeout instead.
|
|
60
|
+
let releaseTimer = setTimeout(() => true, 0);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Manage instances of [WebDriver]
|
|
64
|
+
* (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html)
|
|
65
|
+
* to be used by the tests. DriverManager
|
|
66
|
+
* allows a single place where the WebDriver instance can be configured and
|
|
67
|
+
* reused. Traditionally, tests instantiate the WebDriver instance on their own,
|
|
68
|
+
* passing configurations such as the browser to use:
|
|
69
|
+
* ```javascript
|
|
70
|
+
* let driver = new Builder().withCapabilities({
|
|
71
|
+
* browserName: "chrome"
|
|
72
|
+
* }).build()
|
|
73
|
+
* ```
|
|
74
|
+
* This boilerplate code then has to be copied to every test. Additionally, if
|
|
75
|
+
* the capabilities need to change (say, running against a different browser),
|
|
76
|
+
* that change must be applied to all test files.
|
|
77
|
+
*
|
|
78
|
+
* DriverManager addresses this problem by centralizing the place whereby
|
|
79
|
+
* the configuration is done, and persists that configuration for all
|
|
80
|
+
* subsequent requests for the WebDriver instance. The configuration only needs
|
|
81
|
+
* to be set once in a "setup" file, and tests retrieve the configured instance
|
|
82
|
+
* without needing to define anything else.
|
|
83
|
+
*
|
|
84
|
+
* A sample <code>mocha-setup.ts</code> file which configures DriverManager
|
|
85
|
+
* ```javascript
|
|
86
|
+
* import { DriverManager } from "@oracle/oraclejet-webdriver";
|
|
87
|
+
*
|
|
88
|
+
* DriverManager.registerConfig({
|
|
89
|
+
* capabilities: new Capabilities({
|
|
90
|
+
* browserName: "chrome"
|
|
91
|
+
* })
|
|
92
|
+
* })
|
|
93
|
+
* ```
|
|
94
|
+
* This setup test script should be run before any other tests.
|
|
95
|
+
* ```bash
|
|
96
|
+
* $ node node_modules/mocha/bin/mocha --require=ts-node/register mocha-setup.ts other-test.spec.ts ...
|
|
97
|
+
* ```
|
|
98
|
+
* Test files are agnostic of the driver configuration, and simply get the instance
|
|
99
|
+
* by calling <code>getDriver()</code>
|
|
100
|
+
* ```javascript
|
|
101
|
+
* import { DriverManager } from "@oracle/oraclejet-webdriver";
|
|
102
|
+
*
|
|
103
|
+
* describe("My test suite", function() {
|
|
104
|
+
* let driver: WebDriver;
|
|
105
|
+
*
|
|
106
|
+
* before(async function() {
|
|
107
|
+
* driver = await DriverManager.getDriver();
|
|
108
|
+
* })
|
|
109
|
+
* it("open a page to test", async function() {
|
|
110
|
+
* await driver.get("...")
|
|
111
|
+
* })
|
|
112
|
+
* after(async function() {
|
|
113
|
+
* await DriverManager.releaseDriver(driver);
|
|
114
|
+
* })
|
|
115
|
+
* })
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* ## Set default timeouts for WebDriver from Mocha.
|
|
119
|
+
* When Mocha is used to start the WebDriver tests, there are two sets of timeout
|
|
120
|
+
* values--one from Mocha and one from WebDriver. This causes some confusion as
|
|
121
|
+
* the command-line argument <code>--timeout=nnn</code> is typically the only one
|
|
122
|
+
* set and assumed to be the only timeout value in play. However, WebDriver has
|
|
123
|
+
* its own set of timeout values, whose defaults are sometimes longer than what's
|
|
124
|
+
* set for Mocha. When this happens, WebDriver may be waiting on a condition to
|
|
125
|
+
* timeout, but Mocha has errored the test because its own timeout was exceeded.
|
|
126
|
+
* To ensure that WebDriver timeout conditions are properly reported to the test
|
|
127
|
+
* runner (Mocha), its timeout values must be set to a value shorter than the
|
|
128
|
+
* runner's. This is typically done in the setup test.
|
|
129
|
+
*
|
|
130
|
+
* ### Set WebDriver timeout to 5 seconds sooner than Mocha
|
|
131
|
+
* ```javascript
|
|
132
|
+
* const mochaTimeout = this.timeouts();
|
|
133
|
+
* const wdTimeout = mochaTimeout - 5000;
|
|
134
|
+
* DriverManager.registerConfig({
|
|
135
|
+
* timeouts: {
|
|
136
|
+
* pageLoad: wdTimeout,
|
|
137
|
+
* script: wdTimeout,
|
|
138
|
+
* implicit: wdTimeout
|
|
139
|
+
* }
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
*/
|
|
144
|
+
export class DriverManager {
|
|
145
|
+
/**
|
|
146
|
+
* Optionally set the [Builder]
|
|
147
|
+
* (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_Builder.html)
|
|
148
|
+
* instance used by DriverManager to create WebDriver.
|
|
149
|
+
* The Builder allows different settings for thigns such as the remote server,
|
|
150
|
+
* proxies, and other runtime options often needed when running in distributed
|
|
151
|
+
* environments.
|
|
152
|
+
* The instance can be preconfigured with capabilities, and any additional
|
|
153
|
+
* capabilities from [[registerConfig]] will also be applied during the
|
|
154
|
+
* creation process. If no Builder is explicitly passed, a default one will
|
|
155
|
+
* be used.
|
|
156
|
+
* If setting a custom Builder, this function must be called before the first
|
|
157
|
+
* test calls [[getDriver]], and must only be called once per test run. If called
|
|
158
|
+
* multiple times or after [[getDriver]], an error will be thrown.
|
|
159
|
+
* @param b A builder instance
|
|
160
|
+
*/
|
|
161
|
+
public static setBuilder(b: Builder) {
|
|
162
|
+
if (builder) {
|
|
163
|
+
throw Error("DriverManager Builder instance has already been set, and cannot be set again");
|
|
164
|
+
}
|
|
165
|
+
builder = b;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Register a configuration for WebDriver instances. Configurations consist of
|
|
169
|
+
* [Capabilities]
|
|
170
|
+
* (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_Capabilities.html)
|
|
171
|
+
* and/or [Timeouts]
|
|
172
|
+
* (https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/capabilities_exports_Timeouts.html).
|
|
173
|
+
* This configuration is used by [[getDriver]] to retrieve a configured WebDriver
|
|
174
|
+
* instance.
|
|
175
|
+
* @param config The driver configuration
|
|
176
|
+
* @param name An optional name to assocaite with the config. If no name is given,
|
|
177
|
+
* the config will be the default.
|
|
178
|
+
*
|
|
179
|
+
* ### Register a default config
|
|
180
|
+
* ```javascript
|
|
181
|
+
* DriverManager.registerConfig(
|
|
182
|
+
* {
|
|
183
|
+
* capabilities: new Capabilities({
|
|
184
|
+
* browserName: "chrome"
|
|
185
|
+
* }),
|
|
186
|
+
* timeouts: {
|
|
187
|
+
* implicit: 5000
|
|
188
|
+
* }
|
|
189
|
+
* }
|
|
190
|
+
* );
|
|
191
|
+
* ```
|
|
192
|
+
* ### Register a Firefox config
|
|
193
|
+
* ```javascript
|
|
194
|
+
* DriverManager.registerConfig(
|
|
195
|
+
* {
|
|
196
|
+
* capabilities: new Capabilities({
|
|
197
|
+
* browserName: "firefox",
|
|
198
|
+
* hideAlerts: true
|
|
199
|
+
* })
|
|
200
|
+
* },
|
|
201
|
+
* "firefox-no-alerts"
|
|
202
|
+
* );
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
public static registerConfig(config: CapabilitiesConfiguration, name?: string): void {
|
|
206
|
+
configs[name || defaultConfigName] = config;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Get a
|
|
211
|
+
* [WebDriver](https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebDriver.html)
|
|
212
|
+
* instance for a given configuration. If no configName is given, the returned
|
|
213
|
+
* driver will use the default configuration.
|
|
214
|
+
* @see [[registerConfig]]
|
|
215
|
+
*
|
|
216
|
+
* ### Get driver with default capabilities
|
|
217
|
+
* ```javascript
|
|
218
|
+
* let driver = await DriverManager.getDriver();
|
|
219
|
+
* ```
|
|
220
|
+
* ### Configure and get Firefox driver
|
|
221
|
+
* ```javascript
|
|
222
|
+
* // mocha-setup.ts
|
|
223
|
+
* DriverManager.registerConfig(
|
|
224
|
+
* {
|
|
225
|
+
* browserName: "firefox"
|
|
226
|
+
* },
|
|
227
|
+
* "firefox-config");
|
|
228
|
+
* // test.spec.ts
|
|
229
|
+
* let driver = await DriverManager.getDriver("firefox-config");
|
|
230
|
+
* ```
|
|
231
|
+
* @param configName An optional configuration name, registered through
|
|
232
|
+
* [[registerConfig]], whose set will be applied to the driver instance. If no
|
|
233
|
+
* name is given, the default configuration with the "chrome" browser
|
|
234
|
+
* will be used. If the given configName doesn't exist, an error will be thrown.
|
|
235
|
+
* @return A Promise that resolves to a WebDriver instance, configured with
|
|
236
|
+
* custom capabilities for the given configName, or the default capabilities
|
|
237
|
+
* if none is specified.
|
|
238
|
+
*/
|
|
239
|
+
public static async getDriver(configName?: string): Promise<WebDriver> {
|
|
240
|
+
clearTimeout(releaseTimer);
|
|
241
|
+
configName = configName || defaultConfigName;
|
|
242
|
+
|
|
243
|
+
if (configName === currentInstance.configName) {
|
|
244
|
+
return currentInstance.driver;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
await quitCurrentDriver();
|
|
248
|
+
return createDriver(configName);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Gets the current driver instance, if one exists, otherwise create and
|
|
253
|
+
* return the default one. This method is useful for test setups which evaluate
|
|
254
|
+
* the outcome of the previous test to capture screenshots on failures. After-
|
|
255
|
+
* scripts call <code>getCurrentDriver</code> to get the instance of the driver
|
|
256
|
+
* that experienced the test failure, then capture the screenshot from it.
|
|
257
|
+
*/
|
|
258
|
+
public static async getCurrentDriver(): Promise<WebDriver> {
|
|
259
|
+
return DriverManager.getDriver(currentInstance.configName);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Release the WebDriver instance from use. Called when each test is done
|
|
264
|
+
* with its driver usage, typicall, in the Mocha <code>after</code> function.
|
|
265
|
+
* @param driver The WebDriver instance
|
|
266
|
+
*/
|
|
267
|
+
public static releaseDriver(driver: WebDriver): void {
|
|
268
|
+
clearTimeout(releaseTimer);
|
|
269
|
+
// Wait for the delay to quit the driver. If [getDriver] was called before
|
|
270
|
+
// the timeout expired, then it will have cleared the timeout so that the
|
|
271
|
+
// instance isn't closed.
|
|
272
|
+
releaseTimer = setTimeout(async () => {
|
|
273
|
+
await quitCurrentDriver();
|
|
274
|
+
}, quitDelay);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
DriverManager.registerConfig({ capabilities: defaultCapabilities, timeouts: defaultTimeouts });
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Create a WebDriver instance from the given configuration name. The config should
|
|
281
|
+
* already be registered via [registerConfig].
|
|
282
|
+
* @param configName The configuration name used to retrieve the configuration
|
|
283
|
+
* object for the driver instance
|
|
284
|
+
* @return A Promise which resolves to the configured WebDriver instance
|
|
285
|
+
* @private
|
|
286
|
+
*/
|
|
287
|
+
async function createDriver(configName: string) {
|
|
288
|
+
const config = configs[configName];
|
|
289
|
+
if (!config) {
|
|
290
|
+
throw Error(`No driver configuration exists for "${configName}"`);
|
|
291
|
+
}
|
|
292
|
+
// Merge default capabilities with custom ones
|
|
293
|
+
const caps = new Capabilities(configs[defaultConfigName].capabilities);
|
|
294
|
+
if (config.capabilities) {
|
|
295
|
+
caps.merge(config.capabilities);
|
|
296
|
+
}
|
|
297
|
+
// Merge default timeouts with custom ones
|
|
298
|
+
const timeouts = Object.assign({}, configs[defaultConfigName].timeouts, config.timeouts);
|
|
299
|
+
if (!builder) {
|
|
300
|
+
builder = new Builder();
|
|
301
|
+
}
|
|
302
|
+
const driver: WebDriver = builder.withCapabilities(caps).build();
|
|
303
|
+
currentInstance = { configName, driver };
|
|
304
|
+
// selenium-webdriver^3.60 has setTimeouts(),
|
|
305
|
+
// but @types/selenium-webdriver^3.0.8 (latest) has timeouts(). Need to cast
|
|
306
|
+
// here to avoid compilation failure.
|
|
307
|
+
await driver.manage().setTimeouts(timeouts);
|
|
308
|
+
|
|
309
|
+
return driver;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* @private
|
|
314
|
+
*/
|
|
315
|
+
async function quitCurrentDriver() {
|
|
316
|
+
const driver = currentInstance.driver;
|
|
317
|
+
if (driver) {
|
|
318
|
+
try {
|
|
319
|
+
await driver.quit();
|
|
320
|
+
} catch (ex) {
|
|
321
|
+
// Driver may have already been closed
|
|
322
|
+
console.warn(ex);
|
|
323
|
+
} finally {
|
|
324
|
+
currentInstance = {
|
|
325
|
+
configName: null,
|
|
326
|
+
driver: null,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|