@thinkwise/testwise 0.2.67 → 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 +35 -2
- 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 +18 -1
- 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 +40 -1
- package/controls/FormComboBox.ts +30 -0
- package/controls/GridColumnControl.ts +34 -3
- package/controls/InputFieldControl.ts +49 -0
- package/controls/LookupDropdown.ts +29 -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 +17 -4
- package/dist/components/filter/ExcelStyleFilterPopup.js +35 -23
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +2 -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 +17 -0
- package/dist/components/grid/Grid.js +18 -1
- package/dist/components/grid/Grid.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 +39 -0
- package/dist/controls/DateControl.js +18 -1
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/FormComboBox.d.ts +30 -0
- package/dist/controls/FormComboBox.js +8 -0
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/GridColumnControl.d.ts +30 -0
- package/dist/controls/GridColumnControl.js +12 -3
- package/dist/controls/GridColumnControl.js.map +1 -1
- package/dist/controls/InputFieldControl.d.ts +49 -0
- package/dist/controls/InputFieldControl.js +30 -0
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/LookupDropdown.d.ts +29 -0
- package/dist/controls/LookupDropdown.js +8 -0
- package/dist/controls/LookupDropdown.js.map +1 -1
- 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,6 +1,17 @@
|
|
|
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
16
|
private _objects: ExcelStyleFilterPopupObjects;
|
|
6
17
|
|
|
@@ -33,6 +44,26 @@ export class ExcelStyleFilterPopup {
|
|
|
33
44
|
await this._objects.checkboxSelectAllButton(fieldTestId).click();
|
|
34
45
|
}
|
|
35
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
|
+
|
|
36
67
|
public async clickCheckboxItem(fieldTestId: string, value: string): Promise<void> {
|
|
37
68
|
await this.waitForOpen();
|
|
38
69
|
|
|
@@ -51,11 +82,13 @@ export class ExcelStyleFilterPopup {
|
|
|
51
82
|
return this._objects.toTimeInput(fieldTestId);
|
|
52
83
|
}
|
|
53
84
|
|
|
54
|
-
public setFromTime = async (fieldTestId: string, value: string): Promise<void> =>
|
|
85
|
+
public setFromTime = async (fieldTestId: string, value: string): Promise<void> =>
|
|
86
|
+
this.fillAndEnter(fieldTestId, value);
|
|
55
87
|
|
|
56
88
|
public setToTime = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
|
|
57
89
|
|
|
58
|
-
public setFromDate = async (fieldTestId: string, value: string): Promise<void> =>
|
|
90
|
+
public setFromDate = async (fieldTestId: string, value: string): Promise<void> =>
|
|
91
|
+
this.fillAndEnter(fieldTestId, value);
|
|
59
92
|
|
|
60
93
|
public setToDate = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
|
|
61
94
|
|
|
@@ -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
|
|
package/components/grid/Grid.ts
CHANGED
|
@@ -4,6 +4,23 @@ import { escapeRegex } from '../../helpers/RegexHelper.js';
|
|
|
4
4
|
import { ExcelStyleFilterPopup } from '../index.js';
|
|
5
5
|
import { GridObjects } from './GridObjects.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a Thinkwise grid (list view) component. Provides row/cell navigation,
|
|
9
|
+
* filtering, sorting, and value-reading helpers.
|
|
10
|
+
*
|
|
11
|
+
* In generated subject classes, you interact with `Grid` indirectly through
|
|
12
|
+
* the typed `Components/` class (e.g. `EmployeeGridComponent`) which exposes
|
|
13
|
+
* named `IGridColumnControl` properties per column. Use `Grid` directly only
|
|
14
|
+
* for low-level operations not covered by the generated accessors.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Via generated subject (preferred):
|
|
18
|
+
* const names = await subject.grid.employeeNameColumn.getCellValues();
|
|
19
|
+
*
|
|
20
|
+
* // Via raw Grid helper:
|
|
21
|
+
* await subject.grid.clickRow(0);
|
|
22
|
+
* const count = await subject.grid.getRowCount();
|
|
23
|
+
*/
|
|
7
24
|
export class Grid {
|
|
8
25
|
private _gridObjects: GridObjects;
|
|
9
26
|
private _page: Page;
|
|
@@ -168,7 +185,7 @@ export class Grid {
|
|
|
168
185
|
await this._excelStyleFilterPopup.waitForOpen();
|
|
169
186
|
|
|
170
187
|
if (deselectAll) {
|
|
171
|
-
await this._excelStyleFilterPopup.
|
|
188
|
+
await this._excelStyleFilterPopup.deselectAll(columnId);
|
|
172
189
|
}
|
|
173
190
|
|
|
174
191
|
await this._excelStyleFilterPopup.clickCheckboxItem(columnId, valueToSelect);
|
package/components/maps/Maps.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { MapsObjects } from './MapsObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise maps component that displays geographical data on an
|
|
6
|
+
* interactive map.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `maps` property.
|
|
9
|
+
*/
|
|
4
10
|
export class Maps {
|
|
5
11
|
mapsObjects: MapsObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import type { Locator, Page } from '@playwright/test';
|
|
2
2
|
import { ListBarMenuComponentObjects } from './ListBarMenuComponentObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise list-bar hamburger menu used to navigate between
|
|
6
|
+
* subjects and module groups.
|
|
7
|
+
*
|
|
8
|
+
* Access via `page.components.listBarMenu` — no need to construct this yourself.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Navigate to the Employee subject via the menu:
|
|
12
|
+
* await page.components.listBarMenu.openListBarMenuItem('HR', 'Employee');
|
|
13
|
+
*/
|
|
4
14
|
export class ListBarMenuComponent {
|
|
5
15
|
private _objects: ListBarMenuComponentObjects;
|
|
6
16
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { PivotGridObjects } from './PivotGridObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise pivot-grid component that presents data in a
|
|
6
|
+
* cross-tabulated matrix view for analysis.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `pivotGrid` property.
|
|
9
|
+
*/
|
|
4
10
|
export class PivotGrid {
|
|
5
11
|
pivotGridObjects: PivotGridObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { PivotGridFieldListObjects } from './PivotGridFieldListObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise pivot-grid field list panel that lets users drag
|
|
6
|
+
* dimensions and measures into rows, columns, and value areas of the pivot.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed alongside `PivotGrid` as a
|
|
9
|
+
* typed `pivotGridFieldList` property.
|
|
10
|
+
*/
|
|
4
11
|
export class PivotGridFieldList {
|
|
5
12
|
pivotGridFieldListObjects: PivotGridFieldListObjects;
|
|
6
13
|
|
|
@@ -2,6 +2,18 @@ import type { Locator, Page } from '@playwright/test';
|
|
|
2
2
|
import { pollUntil } from '../../helpers/Poll.js';
|
|
3
3
|
import { AllRowsPopupObjects } from './AllRowsPopUpObjects.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Handles the "Apply to all rows or selected rows?" popup that Thinkwise
|
|
7
|
+
* shows for bulk operations (mass update, mass delete).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Select all rows and confirm:
|
|
11
|
+
* await subject.actionBar.clickDeleteAllRows();
|
|
12
|
+
* const popup = new AllRowsPopup(page);
|
|
13
|
+
* await popup.waitForOpen();
|
|
14
|
+
* await popup.allRowsRadioButton().click();
|
|
15
|
+
* await popup.confirmButton().click();
|
|
16
|
+
*/
|
|
5
17
|
export class AllRowsPopup {
|
|
6
18
|
private readonly deletePopup: boolean;
|
|
7
19
|
private _allRowsPopupObjects: AllRowsPopupObjects;
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { Locator, Page } from '@playwright/test';
|
|
2
2
|
import { PopUpComponentObjects } from './PopUpComponentObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise modal/popup dialog that appears for confirmations,
|
|
6
|
+
* warnings, and input prompts (e.g. "Are you sure?" dialogs, save conflicts).
|
|
7
|
+
*
|
|
8
|
+
* Access via `page.components.popUp` — no need to construct this yourself.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Confirm a delete prompt:
|
|
12
|
+
* await page.components.popUp.getActionButtonByText('Yes').click();
|
|
13
|
+
* const msg = await page.components.popUp.getContentText();
|
|
14
|
+
*/
|
|
4
15
|
export class PopUpComponent {
|
|
5
16
|
private _objects: PopUpComponentObjects;
|
|
6
17
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { PrefilterListObjects } from './PrefilterListObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise prefilter-list panel that shows available prefilters
|
|
6
|
+
* for a subject. Enables selecting and activating prefilters in tests.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `prefilterList` property.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* await subject.prefilterList.context.getByText('Active employees').click();
|
|
12
|
+
*/
|
|
4
13
|
export class PrefilterList {
|
|
5
14
|
prefilterListObjects: PrefilterListObjects;
|
|
6
15
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { PreviewObjects } from './PreviewObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise preview component that shows a read-only rendered
|
|
6
|
+
* preview of a report or document within a subject screen.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `preview` property.
|
|
9
|
+
*/
|
|
4
10
|
export class Preview {
|
|
5
11
|
previewObjects: PreviewObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { ReportBarObjects } from './ReportBarObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise report-bar component that provides controls for
|
|
6
|
+
* selecting and generating reports tied to a subject.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `reportBar` property.
|
|
9
|
+
*/
|
|
4
10
|
export class ReportBar {
|
|
5
11
|
reportBarObjects: ReportBarObjects;
|
|
6
12
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Locator } from '@playwright/test';
|
|
2
2
|
import { ReportTilesObjects } from './ReportTilesObjects.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Wraps the Thinkwise report-tiles component that displays available reports
|
|
6
|
+
* as clickable tiles on a dashboard-style screen.
|
|
7
|
+
*
|
|
8
|
+
* In generated subject classes this is exposed as a typed `reportTiles` property.
|
|
9
|
+
*/
|
|
4
10
|
export class ReportTiles {
|
|
5
11
|
reportTilesObjects: ReportTilesObjects;
|
|
6
12
|
|