@thinkwise/testwise 0.2.62 → 0.2.99
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/Testwise.ts +35 -0
- package/artifact-builder/ArtifactManager.ts +25 -2
- package/artifact-builder/ComponentClassModelBuilder.ts +148 -0
- package/artifact-builder/InterfaceGenerator.ts +31 -33
- package/artifact-builder/ModelDataBuilder.ts +18 -20
- package/artifact-builder/ModelDataRefiner.ts +23 -3
- package/artifact-builder/SchemaGenerator.ts +45 -35
- package/artifact-builder/ScreenInterfaceRefiner.ts +25 -10
- package/artifact-builder/SelectorBuilder.ts +30 -24
- package/artifact-builder/SubjectClassModelBuilder.ts +209 -0
- package/artifact-builder/SubjectComponentGenerator.ts +67 -246
- package/artifact-builder/SubjectGenerator.ts +117 -230
- package/artifact-builder/SubjectRegistration.ts +41 -32
- package/artifact-builder/TsFileModel.ts +94 -0
- package/artifact-builder/TsFileSerializer.ts +247 -0
- package/artifact-builder/helpers/DataRetriever.ts +64 -27
- package/artifact-builder/helpers/NamingHandler.ts +23 -78
- package/artifact-builder/helpers/PipelinePaths.ts +123 -0
- package/artifact-builder/helpers/Stopwatch.ts +10 -0
- package/artifact-builder/helpers/index.ts +1 -0
- package/artifact-builder/index.ts +4 -0
- package/components/BaseComponentObjects.ts +17 -0
- package/components/action-bar/ActionBar.ts +35 -47
- package/components/action-bar/ActionBarObjects.ts +2 -0
- package/components/action-bar/CustomActionBar.ts +6 -0
- package/components/cardlist/Cardlist.ts +6 -0
- package/components/chart/Chart.ts +6 -0
- package/components/combined-filter/CombinedFilter.ts +9 -0
- package/components/cube-view-bar/CubeViewBar.ts +6 -0
- package/components/export/ExportComponent.ts +12 -0
- package/components/filter/ExcelStyleFilterPopup.ts +83 -10
- package/components/filter/ExcelStyleFilterPopupObjects.ts +29 -3
- package/components/filter/FilterForm.ts +10 -0
- package/components/filter/FilterPopup.ts +30 -9
- package/components/filter/FilterPopupObjects.ts +10 -3
- package/components/filter/FindForm.ts +7 -0
- package/components/filter/ManagePrefilterPopup.ts +11 -0
- package/components/form/Form.ts +16 -0
- package/components/grid/Grid.ts +50 -14
- package/components/grid/GridObjects.ts +0 -15
- package/components/maps/Maps.ts +6 -0
- package/components/menu/ListBarMenuComponent.ts +10 -0
- package/components/pivot-grid/PivotGrid.ts +6 -0
- package/components/pivot-grid/PivotGridFieldList.ts +7 -0
- package/components/pop-up/AllRowsPopUp.ts +12 -0
- package/components/pop-up/PopUpComponent.ts +11 -0
- package/components/prefilter-list/PrefilterList.ts +9 -0
- package/components/preview/Preview.ts +6 -0
- package/components/report-bar/ReportBar.ts +6 -0
- package/components/report-tiles/ReportTiles.ts +6 -0
- package/components/scheduler/Scheduler.ts +6 -0
- package/components/snackbar/SnackBar.ts +12 -0
- package/components/splitter/Splitter.ts +6 -0
- package/components/tab/BaseTab.ts +5 -0
- package/components/tab/DetailTabPage.ts +11 -0
- package/components/tab/Tab.ts +10 -0
- package/components/task/TaskBar.ts +13 -3
- package/components/task/TaskTiles.ts +12 -3
- package/components/topbar/TopBar.ts +10 -0
- package/components/tree-view/TreeView.ts +9 -0
- package/controls/DateControl.ts +47 -9
- package/controls/DateControlObjects.ts +15 -0
- package/controls/FormComboBox.ts +43 -26
- package/controls/FormComboBoxObjects.ts +27 -0
- package/controls/GridColumnControl.ts +35 -4
- package/controls/GridColumnControlObjects.ts +1 -1
- package/controls/InputFieldControl.ts +61 -15
- package/controls/InputFieldControlObjects.ts +19 -0
- package/controls/LookupDropdown.ts +59 -31
- package/controls/LookupDropdownObjects.ts +19 -0
- package/dist/Testwise.js +35 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
- package/dist/artifact-builder/ArtifactManager.js +24 -2
- package/dist/artifact-builder/ArtifactManager.js.map +1 -1
- package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
- package/dist/artifact-builder/InterfaceGenerator.js +27 -26
- package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
- package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
- package/dist/artifact-builder/ModelDataBuilder.js +13 -5
- package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
- package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
- package/dist/artifact-builder/ModelDataRefiner.js +18 -3
- package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
- package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
- package/dist/artifact-builder/SchemaGenerator.js +38 -26
- package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
- package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
- package/dist/artifact-builder/SelectorBuilder.js +29 -14
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
- package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
- package/dist/artifact-builder/SubjectGenerator.js +81 -165
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
- package/dist/artifact-builder/SubjectRegistration.js +29 -14
- package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
- package/dist/artifact-builder/TsFileModel.d.ts +86 -0
- package/dist/artifact-builder/TsFileModel.js +2 -0
- package/dist/artifact-builder/TsFileModel.js.map +1 -0
- package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
- package/dist/artifact-builder/TsFileSerializer.js +225 -0
- package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
- package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
- package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
- package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
- package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
- package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
- package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
- package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
- package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
- package/dist/artifact-builder/helpers/index.d.ts +1 -0
- package/dist/artifact-builder/helpers/index.js +1 -0
- package/dist/artifact-builder/helpers/index.js.map +1 -1
- package/dist/artifact-builder/index.d.ts +4 -0
- package/dist/artifact-builder/index.js +4 -0
- package/dist/artifact-builder/index.js.map +1 -1
- package/dist/components/BaseComponentObjects.d.ts +17 -0
- package/dist/components/BaseComponentObjects.js +17 -0
- package/dist/components/BaseComponentObjects.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +21 -24
- package/dist/components/action-bar/ActionBar.js +31 -24
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
- package/dist/components/action-bar/ActionBarObjects.js +1 -0
- package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
- package/dist/components/action-bar/CustomActionBar.js +6 -0
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +6 -0
- package/dist/components/cardlist/Cardlist.js +6 -0
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +6 -0
- package/dist/components/chart/Chart.js +6 -0
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
- package/dist/components/combined-filter/CombinedFilter.js +9 -0
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/export/ExportComponent.d.ts +12 -0
- package/dist/components/export/ExportComponent.js +12 -0
- package/dist/components/export/ExportComponent.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +25 -2
- package/dist/components/filter/ExcelStyleFilterPopup.js +60 -6
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +8 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +15 -2
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FilterForm.d.ts +10 -0
- package/dist/components/filter/FilterForm.js +10 -0
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +22 -4
- package/dist/components/filter/FilterPopup.js +17 -9
- package/dist/components/filter/FilterPopup.js.map +1 -1
- package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
- package/dist/components/filter/FilterPopupObjects.js +5 -2
- package/dist/components/filter/FilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FindForm.d.ts +7 -0
- package/dist/components/filter/FindForm.js +7 -0
- package/dist/components/filter/FindForm.js.map +1 -1
- package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
- package/dist/components/form/Form.d.ts +16 -0
- package/dist/components/form/Form.js +16 -0
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +20 -1
- package/dist/components/grid/Grid.js +35 -25
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/GridObjects.d.ts +0 -4
- package/dist/components/grid/GridObjects.js +0 -6
- package/dist/components/grid/GridObjects.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +6 -0
- package/dist/components/maps/Maps.js +6 -0
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
- package/dist/components/pivot-grid/PivotGrid.js +6 -0
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
- package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
- package/dist/components/pop-up/PopUpComponent.js +11 -0
- package/dist/components/pop-up/PopUpComponent.js.map +1 -1
- package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
- package/dist/components/prefilter-list/PrefilterList.js +9 -0
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +6 -0
- package/dist/components/preview/Preview.js +6 -0
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +6 -0
- package/dist/components/report-bar/ReportBar.js +6 -0
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
- package/dist/components/report-tiles/ReportTiles.js +6 -0
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +6 -0
- package/dist/components/scheduler/Scheduler.js +6 -0
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/snackbar/SnackBar.d.ts +12 -0
- package/dist/components/snackbar/SnackBar.js +12 -0
- package/dist/components/snackbar/SnackBar.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +6 -0
- package/dist/components/splitter/Splitter.js +6 -0
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +5 -0
- package/dist/components/tab/BaseTab.js +5 -0
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +11 -0
- package/dist/components/tab/DetailTabPage.js +11 -0
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +10 -0
- package/dist/components/tab/Tab.js +10 -0
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +12 -2
- package/dist/components/task/TaskBar.js +13 -3
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +11 -2
- package/dist/components/task/TaskTiles.js +12 -3
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +10 -0
- package/dist/components/topbar/TopBar.js +10 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +9 -0
- package/dist/components/tree-view/TreeView.js +9 -0
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +40 -2
- package/dist/controls/DateControl.js +24 -7
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/DateControlObjects.d.ts +8 -1
- package/dist/controls/DateControlObjects.js +8 -1
- package/dist/controls/DateControlObjects.js.map +1 -1
- package/dist/controls/FormComboBox.d.ts +30 -0
- package/dist/controls/FormComboBox.js +19 -16
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/FormComboBoxObjects.d.ts +12 -1
- package/dist/controls/FormComboBoxObjects.js +15 -1
- package/dist/controls/FormComboBoxObjects.js.map +1 -1
- package/dist/controls/GridColumnControl.d.ts +30 -0
- package/dist/controls/GridColumnControl.js +13 -4
- package/dist/controls/GridColumnControl.js.map +1 -1
- package/dist/controls/GridColumnControlObjects.js +1 -1
- package/dist/controls/GridColumnControlObjects.js.map +1 -1
- package/dist/controls/InputFieldControl.d.ts +50 -3
- package/dist/controls/InputFieldControl.js +40 -11
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/InputFieldControlObjects.d.ts +10 -1
- package/dist/controls/InputFieldControlObjects.js +10 -1
- package/dist/controls/InputFieldControlObjects.js.map +1 -1
- package/dist/controls/LookupDropdown.d.ts +29 -0
- package/dist/controls/LookupDropdown.js +36 -25
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/controls/LookupDropdownObjects.d.ts +10 -0
- package/dist/controls/LookupDropdownObjects.js +11 -0
- package/dist/controls/LookupDropdownObjects.js.map +1 -0
- package/dist/enums/ElementTypes.d.ts +18 -0
- package/dist/enums/ElementTypes.js +18 -0
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/enums/ExportFormat.d.ts +8 -0
- package/dist/enums/ExportFormat.js +8 -0
- package/dist/enums/ExportFormat.js.map +1 -1
- package/dist/enums/LogLevel.d.ts +17 -0
- package/dist/enums/LogLevel.js +17 -1
- package/dist/enums/LogLevel.js.map +1 -1
- package/dist/enums/index.d.ts +1 -0
- package/dist/enums/index.js +1 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/helpers/ConfigChecker.d.ts +13 -0
- package/dist/helpers/ConfigChecker.js +13 -0
- package/dist/helpers/ConfigChecker.js.map +1 -1
- package/dist/helpers/Ensure.d.ts +13 -0
- package/dist/helpers/Ensure.js +13 -0
- package/dist/helpers/Ensure.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +13 -3
- package/dist/helpers/FlightTracker.js +103 -17
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +35 -1
- package/dist/helpers/LoginHelper.js +46 -11
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/helpers/PathResolver.d.ts +22 -0
- package/dist/helpers/PathResolver.js +22 -0
- package/dist/helpers/PathResolver.js.map +1 -1
- package/dist/helpers/Poll.d.ts +13 -1
- package/dist/helpers/Poll.js +12 -0
- package/dist/helpers/Poll.js.map +1 -1
- package/dist/helpers/RegexHelper.d.ts +15 -0
- package/dist/helpers/RegexHelper.js +15 -3
- package/dist/helpers/RegexHelper.js.map +1 -1
- package/dist/helpers/SubjectNavigator.d.ts +26 -0
- package/dist/helpers/SubjectNavigator.js +51 -0
- package/dist/helpers/SubjectNavigator.js.map +1 -0
- package/dist/helpers/UserSimulationHelper.d.ts +14 -0
- package/dist/helpers/UserSimulationHelper.js +14 -0
- package/dist/helpers/UserSimulationHelper.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +6 -20
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IComponentObjects.d.ts +12 -0
- package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
- package/dist/interfaces/IComponentSchemaMeta.js +2 -0
- package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
- package/dist/interfaces/IProperty.d.ts +13 -0
- package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
- package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
- package/dist/interfaces/ISeedSubjectDraft.js +2 -0
- package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
- package/dist/interfaces/ISubject.d.ts +13 -0
- package/dist/interfaces/ISubjectDetail.d.ts +11 -0
- package/dist/interfaces/ISubjectDetail.js +2 -0
- package/dist/interfaces/ISubjectDetail.js.map +1 -0
- package/dist/mcp/ArtifactResolver.d.ts +152 -0
- package/dist/mcp/ArtifactResolver.js +232 -0
- package/dist/mcp/ArtifactResolver.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/page-extensions/GlobalComponents.d.ts +30 -0
- package/dist/page-extensions/GlobalComponents.js +30 -0
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
- package/dist/page-extensions/GoToDeepLink.js +9 -0
- package/dist/page-extensions/GoToDeepLink.js.map +1 -1
- package/dist/page-extensions/LoginFeatures.d.ts +8 -0
- package/dist/page-extensions/LoginFeatures.js +8 -0
- package/dist/page-extensions/LoginFeatures.js.map +1 -1
- package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
- package/dist/page-extensions/SubjectRegistry.js +31 -0
- package/dist/page-extensions/SubjectRegistry.js.map +1 -1
- package/dist/page-extensions/UserSimulation.d.ts +21 -0
- package/dist/page-extensions/UserSimulation.js +21 -0
- package/dist/page-extensions/UserSimulation.js.map +1 -1
- package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
- package/dist/page-extensions/WaitEventHandler.js +20 -0
- package/dist/page-extensions/WaitEventHandler.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +23 -2
- package/dist/page-overrides/ClickOverride.js +34 -50
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/page-overrides/FillOverride.d.ts +23 -0
- package/dist/page-overrides/FillOverride.js +46 -66
- package/dist/page-overrides/FillOverride.js.map +1 -1
- package/dist/services/ConfigBuilder.d.ts +24 -0
- package/dist/services/ConfigBuilder.js +24 -0
- package/dist/services/ConfigBuilder.js.map +1 -1
- package/dist/services/IndiciumApi.service.d.ts +26 -0
- package/dist/services/IndiciumApi.service.js +40 -5
- package/dist/services/IndiciumApi.service.js.map +1 -1
- package/dist/services/Logger.d.ts +13 -0
- package/dist/services/Logger.js +39 -0
- package/dist/services/Logger.js.map +1 -1
- package/dist/types/Components.d.ts +18 -1
- package/dist/types/Components.js +0 -1
- package/dist/types/Components.js.map +1 -1
- package/dist/types/LocatorType.d.ts +5 -0
- package/dist/types/LocatorType.js +2 -0
- package/dist/types/LocatorType.js.map +1 -0
- package/dist/types/PollTypes.d.ts +8 -0
- package/dist/types/Test.d.ts +18 -0
- package/dist/types/Universal.d.ts +12 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/enums/ElementTypes.ts +18 -0
- package/enums/ExportFormat.ts +8 -0
- package/enums/LogLevel.ts +17 -1
- package/enums/index.ts +1 -0
- package/helpers/ConfigChecker.ts +13 -0
- package/helpers/Ensure.ts +13 -0
- package/helpers/FlightTracker.ts +109 -20
- package/helpers/GlobalWaitEventHandler.ts +13 -0
- package/helpers/LoginHelper.ts +49 -12
- package/helpers/PathResolver.ts +22 -0
- package/helpers/Poll.ts +13 -1
- package/helpers/RegexHelper.ts +15 -3
- package/helpers/SubjectNavigator.ts +57 -0
- package/helpers/UserSimulationHelper.ts +14 -0
- package/helpers/index.ts +1 -0
- package/index.ts +1 -0
- package/interfaces/IComponentObjects.ts +12 -0
- package/interfaces/IComponentSchemaMeta.ts +17 -0
- package/interfaces/IProperty.ts +13 -0
- package/interfaces/IRegisteredSubjects.ts +12 -0
- package/interfaces/ISeedSubjectDraft.ts +17 -0
- package/interfaces/ISubject.ts +13 -0
- package/interfaces/ISubjectDetail.ts +12 -0
- package/mcp/ArtifactResolver.ts +296 -0
- package/mcp/index.ts +2 -0
- package/package.json +20 -8
- package/page-extensions/GlobalComponents.ts +30 -0
- package/page-extensions/GoToDeepLink.ts +9 -0
- package/page-extensions/LoginFeatures.ts +8 -0
- package/page-extensions/SubjectRegistry.ts +32 -0
- package/page-extensions/UserSimulation.ts +21 -0
- package/page-extensions/WaitEventHandler.ts +20 -0
- package/page-overrides/ClickOverride.ts +36 -55
- package/page-overrides/FillOverride.ts +59 -73
- package/promptCredentials.js +1 -1
- package/scripts/Testwise.template.json +1 -1
- package/scripts/diagram.js +2267 -0
- package/scripts/main.js +84 -63
- package/scripts/postinstall.js +55 -42
- package/scripts/setup.js +91 -37
- package/scripts/sync.js +767 -748
- package/services/ConfigBuilder.ts +24 -0
- package/services/IndiciumApi.service.ts +44 -6
- package/services/Logger.ts +40 -0
- package/templates/copilot-instructions.md +130 -0
- package/templates/mcp.json +9 -0
- package/templates/testwise-test-expert.agent.md +453 -0
- package/tests/tsconfig.json +12 -0
- package/tsconfig.json +6 -2
- package/types/Components.ts +17 -2
- package/types/LocatorType.ts +5 -0
- package/types/PollTypes.ts +8 -0
- package/types/Test.ts +18 -0
- package/types/Universal.ts +12 -0
- package/types/index.ts +2 -0
- package/dist/interfaces/IStoredTestResults.d.ts +0 -5
- package/dist/interfaces/IStoredTestResults.js +0 -2
- package/dist/interfaces/IStoredTestResults.js.map +0 -1
- package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
- package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
- package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
- package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
- package/dist/templates/test-artifacts/screens/index.js +0 -2
- package/dist/templates/test-artifacts/screens/index.js.map +0 -1
- package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
- package/dist/templates/test-artifacts/subjects/index.js +0 -2
- package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
- package/interfaces/IStoredTestResults.ts +0 -6
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import type { Locator, Page } from '@playwright/test';
|
|
2
2
|
import type { IComponentObjects } from '../interfaces/IComponentObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for every `*Objects` locator class in `components/` and
|
|
6
|
+
* `controls/`.
|
|
7
|
+
*
|
|
8
|
+
* **What it does:** Sets up two universal locators that every component needs:
|
|
9
|
+
* - `context` — the scoped root `Locator` passed in from the component. All
|
|
10
|
+
* descendant locator lookups are chained from this, so the component only
|
|
11
|
+
* sees elements within its own section of the page.
|
|
12
|
+
* - `mainHeader` — a `main header` locator used as a presence anchor to
|
|
13
|
+
* confirm the screen is fully rendered before asserting.
|
|
14
|
+
*
|
|
15
|
+
* **For contributors:** When adding a new component, create
|
|
16
|
+
* `<Name>Objects.ts` that extends this class. Put ALL selector logic (every
|
|
17
|
+
* `getByTestId`, `locator`, `getByRole`, etc.) in the `Objects` class. The
|
|
18
|
+
* companion `<Name>.ts` should only contain interaction logic and must never
|
|
19
|
+
* contain raw locator strings.
|
|
20
|
+
*/
|
|
4
21
|
export abstract class BaseComponentObjects implements IComponentObjects {
|
|
5
22
|
context: Locator;
|
|
6
23
|
mainHeader: Locator;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { Locator, Page } from '@playwright/test';
|
|
2
2
|
import { ActionBarObjects, ActionBarOverflowableObjects } from './ActionBarObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Internal helper used by `ActionBar` to group and expose action button
|
|
6
|
+
* interactions. Handles overflow menus where actions are hidden behind a
|
|
7
|
+
* "more" button.
|
|
8
|
+
*/
|
|
4
9
|
class ActionBarActions {
|
|
5
10
|
private _objects: ActionBarOverflowableObjects;
|
|
6
11
|
|
|
@@ -84,66 +89,49 @@ class ActionBarActions {
|
|
|
84
89
|
public getCubeViewButtons = (): Locator => this._objects.cubeViewButtons();
|
|
85
90
|
public getCubeViewButtonById = (id: string): Locator => this._objects.cubeViewButtonById(id);
|
|
86
91
|
public getCubeViewButtonByLabel = (label: string): Locator => this._objects.cubeViewButtonByLabel(label);
|
|
92
|
+
|
|
93
|
+
// Generic item lookup for ids not covered by the typed getters above
|
|
94
|
+
public getItemByTestId = (testId: string): Locator => this._objects.itemByTestId(testId);
|
|
87
95
|
}
|
|
88
96
|
|
|
97
|
+
/**
|
|
98
|
+
* Wraps the Thinkwise action-bar toolbar that sits above a grid or form and
|
|
99
|
+
* contains buttons for CRUD operations (New, Edit, Save, Delete, Refresh)
|
|
100
|
+
* plus any custom task actions defined in the Thinkwise model.
|
|
101
|
+
*
|
|
102
|
+
* In generated subject classes this is exposed as a typed `actionBar` property.
|
|
103
|
+
* Overflow actions (hidden under a "more" button) are accessible via `actionBar.overflowMenu`.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* await subject.actionBar.getButtonByText('New').click();
|
|
107
|
+
* await subject.actionBar.getButtonByText('Save').click();
|
|
108
|
+
* // For overflow actions:
|
|
109
|
+
* await subject.actionBar.overflowMenu.getButtonByText('Export').click();
|
|
110
|
+
*/
|
|
89
111
|
export class ActionBar extends ActionBarActions {
|
|
90
112
|
private _actionBarObjects: ActionBarObjects;
|
|
91
|
-
|
|
113
|
+
public overflowMenu: ActionBarActions;
|
|
92
114
|
|
|
93
115
|
constructor(actionBarContext: Locator) {
|
|
94
116
|
super(actionBarContext);
|
|
95
117
|
this._actionBarObjects = new ActionBarObjects(actionBarContext.page(), actionBarContext);
|
|
96
|
-
|
|
118
|
+
|
|
119
|
+
const overflowInstance = new ActionBarOverflow(actionBarContext.page());
|
|
120
|
+
this.overflowMenu = new Proxy(overflowInstance, {
|
|
121
|
+
get: (target, prop, receiver) => {
|
|
122
|
+
const value = Reflect.get(target, prop, receiver);
|
|
123
|
+
if (typeof value === 'function') {
|
|
124
|
+
return (...args: unknown[]) =>
|
|
125
|
+
wrapWithOverflowOpen(this, () => (value as (...args: unknown[]) => Locator).apply(target, args));
|
|
126
|
+
}
|
|
127
|
+
return value;
|
|
128
|
+
}
|
|
129
|
+
}) as ActionBarActions;
|
|
97
130
|
}
|
|
98
131
|
|
|
99
132
|
public openOverflowMenu = async (): Promise<void> => {
|
|
100
133
|
await this._actionBarObjects.overflowMenuButton().click();
|
|
101
134
|
};
|
|
102
|
-
|
|
103
|
-
overflowMenu = {
|
|
104
|
-
getFilterButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getFilterButton()),
|
|
105
|
-
|
|
106
|
-
getQuickFilterButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getQuickFilterButton()),
|
|
107
|
-
|
|
108
|
-
getClearAllFiltersButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getClearAllFiltersButton()),
|
|
109
|
-
|
|
110
|
-
getSortButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getSortButton()),
|
|
111
|
-
|
|
112
|
-
getRestoreSortOrderButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getRestoreSortOrderButton()),
|
|
113
|
-
|
|
114
|
-
getImportButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getImportButton()),
|
|
115
|
-
|
|
116
|
-
getExportButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportButton()),
|
|
117
|
-
|
|
118
|
-
getExportImmediatelyButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportImmediatelyButton()),
|
|
119
|
-
|
|
120
|
-
getMassUpdateButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getMassUpdateButton()),
|
|
121
|
-
|
|
122
|
-
getUpScreenTypeButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpScreenTypeButton()),
|
|
123
|
-
|
|
124
|
-
getUpDetailSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpDetailSettingsButton()),
|
|
125
|
-
|
|
126
|
-
getUpManagePrefiltersButton: () =>
|
|
127
|
-
wrapWithOverflowOpen(this, () => this._overflowMenu.getUpManagePrefiltersButton()),
|
|
128
|
-
|
|
129
|
-
getUpGridSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpGridSettingsButton()),
|
|
130
|
-
|
|
131
|
-
getCubeSortButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubeSortButton()),
|
|
132
|
-
|
|
133
|
-
getCubePivotSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubePivotSettingsButton()),
|
|
134
|
-
|
|
135
|
-
getCubeChartSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubeChartSettingsButton()),
|
|
136
|
-
|
|
137
|
-
getExportPivotButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportPivotButton()),
|
|
138
|
-
|
|
139
|
-
getDeleteCubeViewButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getDeleteCubeViewButton()),
|
|
140
|
-
|
|
141
|
-
getSaveAsCubeViewButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getSaveAsCubeViewButton()),
|
|
142
|
-
|
|
143
|
-
getCollapseAllButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCollapseAllButton()),
|
|
144
|
-
|
|
145
|
-
getExpandAllButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExpandAllButton())
|
|
146
|
-
};
|
|
147
135
|
}
|
|
148
136
|
|
|
149
137
|
export class ActionBarOverflow extends ActionBarActions {
|
|
@@ -97,6 +97,8 @@ export class ActionBarOverflowableObjects extends BaseComponentObjects {
|
|
|
97
97
|
// Prefilter buttons: data-testid like: "prefilter-actionbar-group-other__<something>"
|
|
98
98
|
public prefilterButtonById = (id: string) =>
|
|
99
99
|
this.context.getByTestId(new RegExp(`^prefilter-actionbar-group-${id}$`));
|
|
100
|
+
|
|
101
|
+
public itemByTestId = (testId: string) => this.context.getByTestId(testId);
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
export class ActionBarObjects extends ActionBarOverflowableObjects {
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { ActionBar } from './ActionBar.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Extension point for a customised action bar that behaves identically to
|
|
5
|
+
* `ActionBar` but can be subclassed to add subject-specific button helpers.
|
|
6
|
+
* Used in generated subject classes when the pipeline detects a custom action
|
|
7
|
+
* bar configuration.
|
|
8
|
+
*/
|
|
3
9
|
export class CustomActionBar extends ActionBar {
|
|
4
10
|
// What should this do differently?
|
|
5
11
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { CardlistObjects } from './CardlistObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise card-list component that displays data as a grid of
|
|
6
|
+
* visual cards instead of a traditional table.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `cardlist` property.
|
|
9
|
+
*/
|
|
4
10
|
export class Cardlist {
|
|
5
11
|
cardlistObjects: CardlistObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { ChartObjects } from './ChartObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise chart component that renders data as bar, line, or pie
|
|
6
|
+
* charts within a subject screen.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `chart` property.
|
|
9
|
+
*/
|
|
4
10
|
export class Chart {
|
|
5
11
|
chartObjects: ChartObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { CombinedFilterObjects } from './CombinedFIlterObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise combined-filter component that merges the filter form
|
|
6
|
+
* and prefilter list into a single collapsible panel alongside a grid.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `combinedFilter` property.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* await subject.combinedFilter.context.waitFor({ state: 'visible' });
|
|
12
|
+
*/
|
|
4
13
|
export class CombinedFilter {
|
|
5
14
|
combinedFilterObjects: CombinedFilterObjects;
|
|
6
15
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { CubeViewBarObjects } from './CubeViewBarObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise cube-view-bar component that provides navigation and
|
|
6
|
+
* filter controls for OLAP cube / pivot analysis screens.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `cubeViewBar` property.
|
|
9
|
+
*/
|
|
4
10
|
export class CubeViewBar {
|
|
5
11
|
cubeViewBarObjects: CubeViewBarObjects;
|
|
6
12
|
|
|
@@ -5,6 +5,18 @@ import { ExportComponentObjects } from './ExportComponentObjects.js';
|
|
|
5
5
|
|
|
6
6
|
// ToDo: Expand on the selectColumns to select by columnId/testId, or what makes sense to empower the end-user
|
|
7
7
|
// ToDo: Make changes to completeExport be able to parse based on the data type selected
|
|
8
|
+
/**
|
|
9
|
+
* Drives the Thinkwise data-export panel: choose rows (all or selected),
|
|
10
|
+
* select columns, pick a format (CSV, XLSX, XLS), download, and optionally
|
|
11
|
+
* parse the downloaded CSV back into a JavaScript array for assertions.
|
|
12
|
+
*
|
|
13
|
+
* Access via `page.components.export` — no need to construct this yourself.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* await page.components.export.exportAllRows();
|
|
17
|
+
* await page.components.export.selectFormat(ExportFormat.XLSX);
|
|
18
|
+
* await page.components.export.completeExport();
|
|
19
|
+
*/
|
|
8
20
|
export class ExportComponent {
|
|
9
21
|
private _page: Page;
|
|
10
22
|
private _objects: ExportComponentObjects;
|
|
@@ -1,28 +1,101 @@
|
|
|
1
1
|
import type { Locator, Page } from '@playwright/test';
|
|
2
2
|
import { ExcelStyleFilterPopupObjects } from './ExcelStyleFilterPopupObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Excel-style column filter popup in a Thinkwise grid.
|
|
6
|
+
* This popup opens when a user right-clicks a column header and allows
|
|
7
|
+
* filtering by selecting individual cell values, much like Excel's auto-filter.
|
|
8
|
+
*
|
|
9
|
+
* Used internally by `GridColumnControl.filterByColumnValueExcelStyle()`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Via GridColumnControl (preferred):
|
|
13
|
+
* await subject.grid.statusColumn.filterByColumnValueExcelStyle('Active');
|
|
14
|
+
*/
|
|
4
15
|
export class ExcelStyleFilterPopup {
|
|
5
|
-
private
|
|
16
|
+
private _objects: ExcelStyleFilterPopupObjects;
|
|
6
17
|
|
|
7
18
|
constructor(page: Page) {
|
|
8
|
-
this.
|
|
19
|
+
this._objects = new ExcelStyleFilterPopupObjects(page);
|
|
9
20
|
}
|
|
10
21
|
|
|
11
|
-
async waitForOpen(): Promise<void> {
|
|
12
|
-
await this.
|
|
22
|
+
public async waitForOpen(): Promise<void> {
|
|
23
|
+
await (await this._objects.popup().all()).filter(async (element) => await element.isVisible());
|
|
13
24
|
}
|
|
14
25
|
|
|
15
|
-
intervalFilters(): Locator {
|
|
16
|
-
return this.
|
|
26
|
+
public intervalFilters(): Locator {
|
|
27
|
+
return this._objects.intervalFilters();
|
|
17
28
|
}
|
|
18
29
|
|
|
19
|
-
fromDateInput(fieldTestId: string): Locator {
|
|
20
|
-
return this.
|
|
30
|
+
public fromDateInput(fieldTestId: string): Locator {
|
|
31
|
+
return this._objects.fromDateInput(fieldTestId);
|
|
21
32
|
}
|
|
22
33
|
|
|
23
|
-
|
|
34
|
+
public toDateInput(fieldTestId: string): Locator {
|
|
35
|
+
return this._objects.toDateInput(fieldTestId);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public async waitForClose(): Promise<void> {
|
|
39
|
+
await (await this._objects.popup().all()).filter(async (element) => !(await element.isVisible()));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public async clickSelectAll(fieldTestId: string): Promise<void> {
|
|
43
|
+
await this.waitForOpen();
|
|
44
|
+
await this._objects.checkboxSelectAllButton(fieldTestId).click();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public async deselectAll(fieldTestId: string): Promise<void> {
|
|
48
|
+
const selectAllCheckbox = await this._objects.checkboxSelectAllButton(fieldTestId);
|
|
49
|
+
await this.waitForOpen();
|
|
50
|
+
|
|
51
|
+
// Everything is already deselected
|
|
52
|
+
if ((await selectAllCheckbox.locator('[data-testid="CheckBoxOutlineBlankIcon"]').count()) > 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Some things are selected - first click will select everything
|
|
57
|
+
if ((await selectAllCheckbox.locator('[data-testid="CheckBoxIndeterminateIcon"]').count()) > 0) {
|
|
58
|
+
await selectAllCheckbox.click();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Everything is selected
|
|
62
|
+
if ((await selectAllCheckbox.locator('[data-testid="CheckBoxIcon"]').count()) > 0) {
|
|
63
|
+
await selectAllCheckbox.click();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public async clickCheckboxItem(fieldTestId: string, value: string): Promise<void> {
|
|
68
|
+
await this.waitForOpen();
|
|
69
|
+
|
|
70
|
+
await this._objects.checkboxItemButtons(fieldTestId).filter({ hasText: value }).click();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public checkboxItem(fieldTestId: string, value: string): Locator {
|
|
74
|
+
return this._objects.checkboxItemCheckboxes(fieldTestId).filter({ hasText: value });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public fromTimeInput(fieldTestId: string): Locator {
|
|
78
|
+
return this._objects.fromTimeInput(fieldTestId);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public toTimeInput(fieldTestId: string): Locator {
|
|
82
|
+
return this._objects.toTimeInput(fieldTestId);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public setFromTime = async (fieldTestId: string, value: string): Promise<void> =>
|
|
86
|
+
this.fillAndEnter(fieldTestId, value);
|
|
87
|
+
|
|
88
|
+
public setToTime = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
|
|
89
|
+
|
|
90
|
+
public setFromDate = async (fieldTestId: string, value: string): Promise<void> =>
|
|
91
|
+
this.fillAndEnter(fieldTestId, value);
|
|
92
|
+
|
|
93
|
+
public setToDate = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
|
|
94
|
+
|
|
95
|
+
private async fillAndEnter(fieldTestId: string, value: string): Promise<void> {
|
|
96
|
+
const input = this._objects.fromDateInput(fieldTestId);
|
|
97
|
+
|
|
24
98
|
await this.waitForOpen();
|
|
25
|
-
const input = this._excelStyleFilterPopupObjects.fromDateInput(fieldTestId);
|
|
26
99
|
await input.fill(value);
|
|
27
100
|
await input.press('Enter');
|
|
28
101
|
}
|
|
@@ -5,11 +5,10 @@ export class ExcelStyleFilterPopupObjects extends BaseComponentObjects {
|
|
|
5
5
|
private _page: Page;
|
|
6
6
|
|
|
7
7
|
constructor(page: Page) {
|
|
8
|
-
super(page
|
|
8
|
+
super(page);
|
|
9
9
|
this._page = page;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
public anchor = () => this._page.locator('[data-testid^="date-time-excel-filter__"]').first();
|
|
11
|
+
public popup = () => this._page.locator('[data-testid*="-excel-filter__"]');
|
|
13
12
|
|
|
14
13
|
public intervalFilters = () => this._page.getByTestId('excel-style-filter-popup__interval-filters');
|
|
15
14
|
|
|
@@ -17,4 +16,31 @@ export class ExcelStyleFilterPopupObjects extends BaseComponentObjects {
|
|
|
17
16
|
this._page
|
|
18
17
|
.getByTestId(`date-time-excel-filter__${fieldTestId}__from`)
|
|
19
18
|
.getByTestId(`form-field__${fieldTestId}__date__input`);
|
|
19
|
+
|
|
20
|
+
public toDateInput = (fieldTestId: string) =>
|
|
21
|
+
this._page
|
|
22
|
+
.getByTestId(`date-time-excel-filter__${fieldTestId}__to`)
|
|
23
|
+
.getByTestId(`form-field__${fieldTestId}__date__input`);
|
|
24
|
+
|
|
25
|
+
public checkboxList = (fieldTestId: string) =>
|
|
26
|
+
this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list"]`);
|
|
27
|
+
|
|
28
|
+
public checkboxSelectAllButton = (fieldTestId: string) =>
|
|
29
|
+
this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-select-all-checkbox"]`);
|
|
30
|
+
|
|
31
|
+
public checkboxItemButtons = (fieldTestId: string) =>
|
|
32
|
+
this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-button__"]`);
|
|
33
|
+
|
|
34
|
+
public checkboxItemCheckboxes = (fieldTestId: string) =>
|
|
35
|
+
this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-checkbox__"]`);
|
|
36
|
+
|
|
37
|
+
public fromTimeInput = (fieldTestId: string) =>
|
|
38
|
+
this._page
|
|
39
|
+
.getByTestId(`date-time-excel-filter__${fieldTestId}__from`)
|
|
40
|
+
.getByTestId(`form-field__${fieldTestId}__time__input`);
|
|
41
|
+
|
|
42
|
+
public toTimeInput = (fieldTestId: string) =>
|
|
43
|
+
this._page
|
|
44
|
+
.getByTestId(`date-time-excel-filter__${fieldTestId}__to`)
|
|
45
|
+
.getByTestId(`form-field__${fieldTestId}__time__input`);
|
|
20
46
|
}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { FilterFormObjects } from './FilterFormObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise filter form that appears in the filter panel alongside
|
|
6
|
+
* a grid. Provides access to the filter form's context locator for scoped
|
|
7
|
+
* assertions and interactions.
|
|
8
|
+
*
|
|
9
|
+
* In generated subject classes this is exposed as a typed component property.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* await subject.filterForm.context.waitFor({ state: 'visible' });
|
|
13
|
+
*/
|
|
4
14
|
export class FilterForm {
|
|
5
15
|
filterFormObjects: FilterFormObjects;
|
|
6
16
|
|
|
@@ -2,6 +2,19 @@ import type { Locator, Page } from '@playwright/test';
|
|
|
2
2
|
import { PopUpComponent } from '../pop-up/PopUpComponent.js';
|
|
3
3
|
import { FilterPopupObjects } from './FilterPopupObjects.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Wraps the Thinkwise interval/range filter popup that appears when filtering
|
|
7
|
+
* date, time, or numeric columns with a "between" style filter.
|
|
8
|
+
*
|
|
9
|
+
* Extends `PopUpComponent` so all base popup actions (confirm, cancel) work
|
|
10
|
+
* here too. The `IntervalType` union type controls which date/time variant
|
|
11
|
+
* of the popup is targeted.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Open the filter popup, set a date range, and confirm:
|
|
15
|
+
* await subject.grid.hireDateColumn.openExcelStyleFilterPopup();
|
|
16
|
+
* // Then interact with the resulting FilterPopup instance.
|
|
17
|
+
*/
|
|
5
18
|
export type IntervalType =
|
|
6
19
|
| 'date'
|
|
7
20
|
| 'date-and-time'
|
|
@@ -93,6 +106,10 @@ export class FilterPopup {
|
|
|
93
106
|
return this._filterPopupObjects.fieldInput(fieldId);
|
|
94
107
|
}
|
|
95
108
|
|
|
109
|
+
public fieldInputChip(fieldId: string, value: string): Locator {
|
|
110
|
+
return this._filterPopupObjects.fieldInputChip(fieldId, value);
|
|
111
|
+
}
|
|
112
|
+
|
|
96
113
|
public valueInput(fieldId: string, part: string): Locator {
|
|
97
114
|
return this._filterPopupObjects.valueInput(fieldId, part);
|
|
98
115
|
}
|
|
@@ -138,21 +155,25 @@ export class FilterPopup {
|
|
|
138
155
|
await this._filterPopupObjects.timeOperatorControl().click();
|
|
139
156
|
}
|
|
140
157
|
|
|
141
|
-
public intervalSelector(
|
|
142
|
-
return this._filterPopupObjects.intervalSelector(
|
|
158
|
+
public intervalSelector(colId: string): Locator {
|
|
159
|
+
return this._filterPopupObjects.intervalSelector(colId);
|
|
143
160
|
}
|
|
144
161
|
|
|
145
|
-
public intervalSelectorInput(
|
|
146
|
-
return this._filterPopupObjects.intervalSelectorInput(
|
|
162
|
+
public intervalSelectorInput(colId: string): Locator {
|
|
163
|
+
return this._filterPopupObjects.intervalSelectorInput(colId);
|
|
147
164
|
}
|
|
148
165
|
|
|
149
|
-
public async openInterval(
|
|
166
|
+
public async openInterval(colId: string, options?: { rowIndex?: number }): Promise<void> {
|
|
150
167
|
await this.waitForOpen();
|
|
151
|
-
|
|
168
|
+
if (options?.rowIndex !== undefined) {
|
|
169
|
+
await this._filterPopupObjects.intervalSelectorInputByRowIndex(options.rowIndex, colId).click();
|
|
170
|
+
} else {
|
|
171
|
+
await this._filterPopupObjects.intervalSelectorInput(colId).click();
|
|
172
|
+
}
|
|
152
173
|
}
|
|
153
174
|
|
|
154
|
-
public async setInterval(
|
|
155
|
-
await this.openInterval(
|
|
175
|
+
public async setInterval(colId: string, kind: IntervalType, options?: { rowIndex?: number }): Promise<void> {
|
|
176
|
+
await this.openInterval(colId, options);
|
|
156
177
|
await this.pickAutocomplete(kind);
|
|
157
178
|
}
|
|
158
179
|
|
|
@@ -170,7 +191,7 @@ export class FilterPopup {
|
|
|
170
191
|
const emptyRow = this._filterPopupObjects.emptySelectFieldRow();
|
|
171
192
|
|
|
172
193
|
if (await emptyRow.count()) {
|
|
173
|
-
await this._filterPopupObjects.emptySelectFieldRowButton().
|
|
194
|
+
await this._filterPopupObjects.emptySelectFieldRowButton().press('Enter');
|
|
174
195
|
} else {
|
|
175
196
|
await this._filterPopupObjects.selectFieldButton().click();
|
|
176
197
|
}
|
|
@@ -23,6 +23,9 @@ export class FilterPopupObjects extends BaseComponentObjects {
|
|
|
23
23
|
|
|
24
24
|
public fieldInput = (fieldId: string) => this.context.getByTestId(`form-field__${fieldId}__input`);
|
|
25
25
|
|
|
26
|
+
public fieldInputChip = (fieldId: string, value: string) =>
|
|
27
|
+
this.context.getByTestId(`form-field__${fieldId}__input`).getByTestId(`autocomplete-tag-${value}`);
|
|
28
|
+
|
|
26
29
|
public prefilterNameInput = () => this.context.getByTestId('prefilter__name__input');
|
|
27
30
|
|
|
28
31
|
public saveAsOption = () => this._page.getByRole('menuitem', { name: 'Save' });
|
|
@@ -43,11 +46,15 @@ export class FilterPopupObjects extends BaseComponentObjects {
|
|
|
43
46
|
public timeOperatorControl = () =>
|
|
44
47
|
this.context.getByTestId('form-field__event-time__operator__control').getByRole('button', { name: 'Open' });
|
|
45
48
|
|
|
46
|
-
public intervalSelector = (
|
|
49
|
+
public intervalSelector = (colId: string) => this.context.locator(`[data-testid$="__${colId}__select-interval"]`);
|
|
50
|
+
|
|
51
|
+
public intervalSelectorInput = (colId: string) => this.intervalSelector(colId).getByTestId('select-interval__input');
|
|
52
|
+
|
|
53
|
+
public intervalSelectorByRowIndex = (rowIndex: number, colId: string) =>
|
|
47
54
|
this.context.getByTestId(`advanced-filter-grid__row${rowIndex}__${colId}__select-interval`);
|
|
48
55
|
|
|
49
|
-
public
|
|
50
|
-
this.
|
|
56
|
+
public intervalSelectorInputByRowIndex = (rowIndex: number, colId: string) =>
|
|
57
|
+
this.intervalSelectorByRowIndex(rowIndex, colId).getByTestId('select-interval__input');
|
|
51
58
|
|
|
52
59
|
public autocompleteOption = (key: AutocompleteKey) => this._page.getByTestId(`autocomplete-option-${key}`);
|
|
53
60
|
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Placeholder for the Thinkwise "Find" form — a search dialog used to
|
|
3
|
+
* quickly locate records by keyword across multiple fields.
|
|
4
|
+
*
|
|
5
|
+
* This component is under development. Check back for typed interaction
|
|
6
|
+
* helpers in a future release.
|
|
7
|
+
*/
|
|
1
8
|
export class FindForm {
|
|
2
9
|
// do stuff
|
|
3
10
|
}
|
|
@@ -2,6 +2,17 @@ import type { Locator, Page } from '@playwright/test';
|
|
|
2
2
|
import { PopUpComponent } from '../pop-up/PopUpComponent.js';
|
|
3
3
|
import { ManagePrefilterPopupObjects } from './ManagePrefilterPopupObjects.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Wraps the Thinkwise "Manage Prefilter" popup that lets users create, edit,
|
|
7
|
+
* and delete personal prefilters from within a running test.
|
|
8
|
+
*
|
|
9
|
+
* Access via `page.components.managePrefilterPopup` — no need to construct
|
|
10
|
+
* this yourself. Extends `PopUpComponent` so all base popup methods are also
|
|
11
|
+
* available.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* await page.components.managePrefilterPopup.dialog().waitFor({ state: 'visible' });
|
|
15
|
+
*/
|
|
5
16
|
export class ManagePrefilterPopup extends PopUpComponent {
|
|
6
17
|
private readonly _page: Page;
|
|
7
18
|
private _managePrefilterPopupObjects: ManagePrefilterPopupObjects;
|
package/components/form/Form.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { FormObjects } from './FormObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps a Thinkwise form screen component. Provides locator helpers for
|
|
6
|
+
* finding fields by value and by column ID.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes, you interact with `Form` indirectly through
|
|
9
|
+
* the typed `Components/` class (e.g. `EmployeeFormComponent`) which exposes
|
|
10
|
+
* named, typed control properties. Use `Form` directly only when you need
|
|
11
|
+
* raw field lookups not covered by the generated accessors.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Via generated subject (preferred):
|
|
15
|
+
* await subject.form.firstNameField.fill('Jane');
|
|
16
|
+
*
|
|
17
|
+
* // Via raw Form helper:
|
|
18
|
+
* const field = subject.form.getFieldByColId('first_name');
|
|
19
|
+
*/
|
|
4
20
|
export class Form {
|
|
5
21
|
private _objects: FormObjects;
|
|
6
22
|
|