@sap_oss/wdio-qmate-service 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -0
- package/.eslintrc.yml +33 -0
- package/.reuse/dep5 +29 -0
- package/LICENSE +201 -0
- package/LICENSES/Apache-2.0.txt +73 -0
- package/README.md +20 -0
- package/docs/contact.md +10 -0
- package/docs/doc.md +5188 -0
- package/docs/gettingStarted/selectors.md +168 -0
- package/docs/gettingStarted/setup.md +8 -0
- package/docs/index.md +14 -0
- package/docs/style/custom.css +24 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +171 -0
- package/lib/index.js.map +1 -0
- package/lib/reuse/authenticator/authConfig.d.ts +54 -0
- package/lib/reuse/authenticator/authConfig.js +55 -0
- package/lib/reuse/authenticator/authConfig.js.map +1 -0
- package/lib/reuse/authenticator/authHandler.d.ts +6 -0
- package/lib/reuse/authenticator/authHandler.js +37 -0
- package/lib/reuse/authenticator/authHandler.js.map +1 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.js +36 -0
- package/lib/reuse/authenticator/basicUrlAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/customAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/customAuthenticator.js +60 -0
- package/lib/reuse/authenticator/customAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/formAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/formAuthenticator.js +57 -0
- package/lib/reuse/authenticator/formAuthenticator.js.map +1 -0
- package/lib/reuse/authenticator/plainAuthenticator.d.ts +2 -0
- package/lib/reuse/authenticator/plainAuthenticator.js +20 -0
- package/lib/reuse/authenticator/plainAuthenticator.js.map +1 -0
- package/lib/reuse/data/authenticators.json +16 -0
- package/lib/reuse/helper/clientsideUI5scripts.d.ts +1 -0
- package/lib/reuse/helper/clientsideUI5scripts.js +388 -0
- package/lib/reuse/helper/clientsideUI5scripts.js.map +1 -0
- package/lib/reuse/helper/jsDocGen.d.ts +1 -0
- package/lib/reuse/helper/jsDocGen.js +45 -0
- package/lib/reuse/helper/jsDocGen.js.map +1 -0
- package/lib/reuse/index.d.ts +5 -0
- package/lib/reuse/index.js +89 -0
- package/lib/reuse/index.js.map +1 -0
- package/lib/reuse/modules/common/Common.d.ts +12 -0
- package/lib/reuse/modules/common/Common.js +21 -0
- package/lib/reuse/modules/common/Common.js.map +1 -0
- package/lib/reuse/modules/common/assertion.d.ts +65 -0
- package/lib/reuse/modules/common/assertion.js +91 -0
- package/lib/reuse/modules/common/assertion.js.map +1 -0
- package/lib/reuse/modules/common/constants/date.constants.d.ts +8 -0
- package/lib/reuse/modules/common/constants/date.constants.js +13 -0
- package/lib/reuse/modules/common/constants/date.constants.js.map +1 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.d.ts +9 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.js +14 -0
- package/lib/reuse/modules/common/constants/userInteraction.constants.js.map +1 -0
- package/lib/reuse/modules/common/date.d.ts +84 -0
- package/lib/reuse/modules/common/date.js +164 -0
- package/lib/reuse/modules/common/date.js.map +1 -0
- package/lib/reuse/modules/common/navigation.d.ts +26 -0
- package/lib/reuse/modules/common/navigation.js +56 -0
- package/lib/reuse/modules/common/navigation.js.map +1 -0
- package/lib/reuse/modules/common/types/date.types.d.ts +2 -0
- package/lib/reuse/modules/common/types/date.types.js +3 -0
- package/lib/reuse/modules/common/types/date.types.js.map +1 -0
- package/lib/reuse/modules/common/userInteraction.d.ts +104 -0
- package/lib/reuse/modules/common/userInteraction.js +199 -0
- package/lib/reuse/modules/common/userInteraction.js.map +1 -0
- package/lib/reuse/modules/nonUi5/NonUi5.d.ts +12 -0
- package/lib/reuse/modules/nonUi5/NonUi5.js +21 -0
- package/lib/reuse/modules/nonUi5/NonUi5.js.map +1 -0
- package/lib/reuse/modules/nonUi5/assertion.d.ts +62 -0
- package/lib/reuse/modules/nonUi5/assertion.js +127 -0
- package/lib/reuse/modules/nonUi5/assertion.js.map +1 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.d.ts +6 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js +11 -0
- package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js.map +1 -0
- package/lib/reuse/modules/nonUi5/element.d.ts +286 -0
- package/lib/reuse/modules/nonUi5/element.js +639 -0
- package/lib/reuse/modules/nonUi5/element.js.map +1 -0
- package/lib/reuse/modules/nonUi5/navigation.d.ts +17 -0
- package/lib/reuse/modules/nonUi5/navigation.js +44 -0
- package/lib/reuse/modules/nonUi5/navigation.js.map +1 -0
- package/lib/reuse/modules/nonUi5/userInteraction.d.ts +170 -0
- package/lib/reuse/modules/nonUi5/userInteraction.js +415 -0
- package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -0
- package/lib/reuse/modules/service/Service.d.ts +8 -0
- package/lib/reuse/modules/service/Service.js +17 -0
- package/lib/reuse/modules/service/Service.js.map +1 -0
- package/lib/reuse/modules/service/odata.d.ts +177 -0
- package/lib/reuse/modules/service/odata.js +347 -0
- package/lib/reuse/modules/service/odata.js.map +1 -0
- package/lib/reuse/modules/service/rest.d.ts +66 -0
- package/lib/reuse/modules/service/rest.js +168 -0
- package/lib/reuse/modules/service/rest.js.map +1 -0
- package/lib/reuse/modules/service/soap.d.ts +0 -0
- package/lib/reuse/modules/service/soap.js +2 -0
- package/lib/reuse/modules/service/soap.js.map +1 -0
- package/lib/reuse/modules/ui5/Ui5.d.ts +34 -0
- package/lib/reuse/modules/ui5/Ui5.js +41 -0
- package/lib/reuse/modules/ui5/Ui5.js.map +1 -0
- package/lib/reuse/modules/ui5/assertion.d.ts +183 -0
- package/lib/reuse/modules/ui5/assertion.js +493 -0
- package/lib/reuse/modules/ui5/assertion.js.map +1 -0
- package/lib/reuse/modules/ui5/confirmationDialog.d.ts +86 -0
- package/lib/reuse/modules/ui5/confirmationDialog.js +145 -0
- package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.d.ts +4 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.js +9 -0
- package/lib/reuse/modules/ui5/constants/mockserver.constants.js.map +1 -0
- package/lib/reuse/modules/ui5/control.d.ts +84 -0
- package/lib/reuse/modules/ui5/control.js +132 -0
- package/lib/reuse/modules/ui5/control.js.map +1 -0
- package/lib/reuse/modules/ui5/date.d.ts +48 -0
- package/lib/reuse/modules/ui5/date.js +153 -0
- package/lib/reuse/modules/ui5/date.js.map +1 -0
- package/lib/reuse/modules/ui5/element.d.ts +160 -0
- package/lib/reuse/modules/ui5/element.js +349 -0
- package/lib/reuse/modules/ui5/element.js.map +1 -0
- package/lib/reuse/modules/ui5/errorDialog.d.ts +39 -0
- package/lib/reuse/modules/ui5/errorDialog.js +65 -0
- package/lib/reuse/modules/ui5/errorDialog.js.map +1 -0
- package/lib/reuse/modules/ui5/footerBar.d.ts +153 -0
- package/lib/reuse/modules/ui5/footerBar.js +240 -0
- package/lib/reuse/modules/ui5/footerBar.js.map +1 -0
- package/lib/reuse/modules/ui5/mockserver.d.ts +154 -0
- package/lib/reuse/modules/ui5/mockserver.js +665 -0
- package/lib/reuse/modules/ui5/mockserver.js.map +1 -0
- package/lib/reuse/modules/ui5/navigation.d.ts +103 -0
- package/lib/reuse/modules/ui5/navigation.js +275 -0
- package/lib/reuse/modules/ui5/navigation.js.map +1 -0
- package/lib/reuse/modules/ui5/navigationBar.d.ts +48 -0
- package/lib/reuse/modules/ui5/navigationBar.js +141 -0
- package/lib/reuse/modules/ui5/navigationBar.js.map +1 -0
- package/lib/reuse/modules/ui5/qunit.d.ts +17 -0
- package/lib/reuse/modules/ui5/qunit.js +52 -0
- package/lib/reuse/modules/ui5/qunit.js.map +1 -0
- package/lib/reuse/modules/ui5/session.d.ts +117 -0
- package/lib/reuse/modules/ui5/session.js +374 -0
- package/lib/reuse/modules/ui5/session.js.map +1 -0
- package/lib/reuse/modules/ui5/table.d.ts +61 -0
- package/lib/reuse/modules/ui5/table.js +188 -0
- package/lib/reuse/modules/ui5/table.js.map +1 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.d.ts +2 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.js +3 -0
- package/lib/reuse/modules/ui5/types/mockserver.types.js.map +1 -0
- package/lib/reuse/modules/ui5/userInteraction.d.ts +304 -0
- package/lib/reuse/modules/ui5/userInteraction.js +690 -0
- package/lib/reuse/modules/ui5/userInteraction.js.map +1 -0
- package/lib/reuse/modules/util/Util.d.ts +22 -0
- package/lib/reuse/modules/util/Util.js +27 -0
- package/lib/reuse/modules/util/Util.js.map +1 -0
- package/lib/reuse/modules/util/browser.d.ts +167 -0
- package/lib/reuse/modules/util/browser.js +367 -0
- package/lib/reuse/modules/util/browser.js.map +1 -0
- package/lib/reuse/modules/util/console.d.ts +56 -0
- package/lib/reuse/modules/util/console.js +152 -0
- package/lib/reuse/modules/util/console.js.map +1 -0
- package/lib/reuse/modules/util/constants/formatter.constants.d.ts +11 -0
- package/lib/reuse/modules/util/constants/formatter.constants.js +16 -0
- package/lib/reuse/modules/util/constants/formatter.constants.js.map +1 -0
- package/lib/reuse/modules/util/data.d.ts +36 -0
- package/lib/reuse/modules/util/data.js +87 -0
- package/lib/reuse/modules/util/data.js.map +1 -0
- package/lib/reuse/modules/util/file.d.ts +55 -0
- package/lib/reuse/modules/util/file.js +159 -0
- package/lib/reuse/modules/util/file.js.map +1 -0
- package/lib/reuse/modules/util/formatter.d.ts +90 -0
- package/lib/reuse/modules/util/formatter.js +210 -0
- package/lib/reuse/modules/util/formatter.js.map +1 -0
- package/lib/reuse/modules/util/function.d.ts +48 -0
- package/lib/reuse/modules/util/function.js +161 -0
- package/lib/reuse/modules/util/function.js.map +1 -0
- package/lib/reuse/modules/util/system.d.ts +17 -0
- package/lib/reuse/modules/util/system.js +58 -0
- package/lib/reuse/modules/util/system.js.map +1 -0
- package/lib/reuse/modules/util/types/formatter.types.d.ts +2 -0
- package/lib/reuse/modules/util/types/formatter.types.js +3 -0
- package/lib/reuse/modules/util/types/formatter.types.js.map +1 -0
- package/lib/scripts/clientsideUI5scripts.d.ts +1 -0
- package/lib/scripts/clientsideUI5scripts.js +315 -0
- package/lib/scripts/clientsideUI5scripts.js.map +1 -0
- package/lib/scripts/dataExchange/dataExchange.d.ts +1 -0
- package/lib/scripts/dataExchange/dataExchange.js +224 -0
- package/lib/scripts/dataExchange/dataExchange.js.map +1 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.d.ts +63 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.js +211 -0
- package/lib/scripts/dataExchange/dataExchangeUtil.js.map +1 -0
- package/lib/scripts/hooks/after.d.ts +8 -0
- package/lib/scripts/hooks/after.js +30 -0
- package/lib/scripts/hooks/after.js.map +1 -0
- package/lib/scripts/hooks/before.d.ts +8 -0
- package/lib/scripts/hooks/before.js +38 -0
- package/lib/scripts/hooks/before.js.map +1 -0
- package/lib/scripts/hooks/beforeSession.d.ts +8 -0
- package/lib/scripts/hooks/beforeSession.js +37 -0
- package/lib/scripts/hooks/beforeSession.js.map +1 -0
- package/lib/scripts/hooks/onComplete.d.ts +9 -0
- package/lib/scripts/hooks/onComplete.js +31 -0
- package/lib/scripts/hooks/onComplete.js.map +1 -0
- package/lib/scripts/hooks/onPrepare.d.ts +6 -0
- package/lib/scripts/hooks/onPrepare.js +36 -0
- package/lib/scripts/hooks/onPrepare.js.map +1 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.d.ts +2 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.js +193 -0
- package/lib/scripts/hooks/utils/addLocatorCommands.js.map +1 -0
- package/lib/scripts/hooks/utils/browserLog.d.ts +2 -0
- package/lib/scripts/hooks/utils/browserLog.js +39 -0
- package/lib/scripts/hooks/utils/browserLog.js.map +1 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.d.ts +9 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.js +46 -0
- package/lib/scripts/hooks/utils/dataExchangeCommands.js.map +1 -0
- package/lib/scripts/hooks/utils/decryption.d.ts +13 -0
- package/lib/scripts/hooks/utils/decryption.js +90 -0
- package/lib/scripts/hooks/utils/decryption.js.map +1 -0
- package/lib/scripts/hooks/utils/lib.d.ts +4 -0
- package/lib/scripts/hooks/utils/lib.js +330 -0
- package/lib/scripts/hooks/utils/lib.js.map +1 -0
- package/lib/scripts/hooks/utils/locatorCommands.d.ts +10 -0
- package/lib/scripts/hooks/utils/locatorCommands.js +216 -0
- package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -0
- package/lib/scripts/locators/qmateLocator.d.ts +1 -0
- package/lib/scripts/locators/qmateLocator.js +1384 -0
- package/lib/scripts/locators/qmateLocator.js.map +1 -0
- package/lib/scripts/locators/uiveri5Locator.d.ts +1 -0
- package/lib/scripts/locators/uiveri5Locator.js +21 -0
- package/lib/scripts/locators/uiveri5Locator.js.map +1 -0
- package/mkdocs.yml +53 -0
- package/package.json +152 -0
- package/test/.eslintrc.yml +6 -0
- package/test/authenticator/package.json +13 -0
- package/test/authenticator/staticLogin/configCustom.js +22 -0
- package/test/authenticator/staticLogin/configCustomViaConfig.js +20 -0
- package/test/authenticator/staticLogin/configFiori.js +19 -0
- package/test/authenticator/staticLogin/configPlain.js +17 -0
- package/test/authenticator/staticLogin/configSapCloud.js +18 -0
- package/test/authenticator/staticLogin/html/custom.html +10 -0
- package/test/authenticator/staticLogin/html/fiori.html +10 -0
- package/test/authenticator/staticLogin/html/home.html +7 -0
- package/test/authenticator/staticLogin/html/sapCloud.html +10 -0
- package/test/authenticator/staticLogin/specs/custom.spec.js +6 -0
- package/test/authenticator/staticLogin/specs/customViaConfig.spec.js +10 -0
- package/test/authenticator/staticLogin/specs/fiori.spec.js +6 -0
- package/test/authenticator/staticLogin/specs/plain.spec.js +64 -0
- package/test/authenticator/staticLogin/specs/sapCloud.spec.js +6 -0
- package/test/authenticator/staticLogin/staticServerConfig.js +20 -0
- package/test/authenticator/systemLogin/configCustom.js +26 -0
- package/test/authenticator/systemLogin/configFiori.js +24 -0
- package/test/authenticator/systemLogin/configPlain.js +22 -0
- package/test/authenticator/systemLogin/configSapCloud.js +24 -0
- package/test/authenticator/systemLogin/specs/custom.spec.js +13 -0
- package/test/authenticator/systemLogin/specs/fiori.spec.js +12 -0
- package/test/authenticator/systemLogin/specs/plain.spec.js +21 -0
- package/test/authenticator/systemLogin/specs/sapCloud.spec.js +13 -0
- package/test/core/README.md +17 -0
- package/test/core/dataExchange/config.export.js +56 -0
- package/test/core/dataExchange/config.import.js +47 -0
- package/test/core/dataExchange/config.js +52 -0
- package/test/core/dataExchange/config.parallel.group.js +61 -0
- package/test/core/dataExchange/config.parallel.js +58 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/dummy1.txt +0 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/Limit-Purchase-Order.json +29 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/ServicePurchaseOrder.2Items.json +67 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchaseRequisition_HI.json +31 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/LimitPurchaseOrder.json +29 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderItems.json +58 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderWithScheduline.json +27 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServiceAndMaterialPurchaseOrder.json +65 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder.json +39 -0
- package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder2Items.json +67 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/data.json +5 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/dummy1.txt +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/dummy2.txt +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/empty.json +0 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/purchaseRequisition.json +31 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/supplierInvoice.json +17 -0
- package/test/core/dataExchange/data/my/folder/data/qs9/webUser.json +6 -0
- package/test/core/dataExchange/data/ui/moreDataFolder/anotherUser.json +6 -0
- package/test/core/dataExchange/data/ui/user.json +6 -0
- package/test/core/dataExchange/data/ui/webUser.json +6 -0
- package/test/core/dataExchange/specs/export.fast.spec.js +48 -0
- package/test/core/dataExchange/specs/export.slow.spec.js +50 -0
- package/test/core/dataExchange/specs/export.spec.js +103 -0
- package/test/core/dataExchange/specs/import.spec.js +144 -0
- package/test/core/dataExchange/specs/importExport.spec.js +196 -0
- package/test/core/dataExchange/utils.js +160 -0
- package/test/core/functional/README.md +30 -0
- package/test/core/functional/chaining/chaining.test.js +137 -0
- package/test/core/functional/chaining/test.conf.js +31 -0
- package/test/core/functional/locators/ancestorProperties.test.js +99 -0
- package/test/core/functional/locators/childProperties.test.js +40 -0
- package/test/core/functional/locators/descendantProperties.test.js +107 -0
- package/test/core/functional/locators/domProperties.test.js +60 -0
- package/test/core/functional/locators/elementProperties.test.js +114 -0
- package/test/core/functional/locators/mixedProperties.test.js +170 -0
- package/test/core/functional/locators/parentProperties.test.js +47 -0
- package/test/core/functional/locators/siblingProperties.test.js +120 -0
- package/test/core/functional/locators/test.locator.conf.js +38 -0
- package/test/core/functional/locators/utils.js +6 -0
- package/test/core/functional/nativeBrowser/runInBrowser.test.js +111 -0
- package/test/core/functional/nativeBrowser/test.conf.js +31 -0
- package/test/core/functional/nonUi5/basic.test.js +10 -0
- package/test/core/functional/nonUi5/getWithDomElement.test.js +51 -0
- package/test/core/functional/nonUi5/getWithDomElements.test.js +141 -0
- package/test/core/functional/nonUi5/test.conf.js +32 -0
- package/test/core/functional/ui5Properties/getAggregations.test.js +102 -0
- package/test/core/functional/ui5Properties/getAssociations.test.js +24 -0
- package/test/core/functional/ui5Properties/getBindingInfos.test.js +71 -0
- package/test/core/functional/ui5Properties/getProperties.test.js +226 -0
- package/test/core/functional/ui5Properties/test.conf.js +16 -0
- package/test/core/functional/uiveri5/sample.test.js +61 -0
- package/test/core/functional/uiveri5/test.conf.js +31 -0
- package/test/core/package-lock.json +0 -0
- package/test/core/package.json +12 -0
- package/test/core/testIntegration/config.js +17 -0
- package/test/core/testIntegration/configMultiCombo.js +17 -0
- package/test/core/testIntegration/configTable.js +18 -0
- package/test/core/testIntegration/filters1.spec.js +1849 -0
- package/test/core/testIntegration/multicombobox.spec.js +134 -0
- package/test/core/testIntegration/table.spec.js +80 -0
- package/test/helper/configurations/base.conf.js +43 -0
- package/test/helper/configurations/chrome.conf.js +47 -0
- package/test/helper/configurations/chrome.headless.conf.js +45 -0
- package/test/helper/configurations/sauce.labs.conf.js +37 -0
- package/test/helper/configurations/sauce.labs.tunnel.conf.js +39 -0
- package/test/helper/sleeper.js +19 -0
- package/test/helper/utils.js +15 -0
- package/test/helper/website/buttons.html +85 -0
- package/test/helper/website/checkBox.html +83 -0
- package/test/helper/website/dragAndDropFailing.html +83 -0
- package/test/helper/website/dragAndDropWdioExample.html +41 -0
- package/test/helper/website/dropdown.html +78 -0
- package/test/helper/website/forms.html +82 -0
- package/test/helper/website/hiddenAndVisible.html +60 -0
- package/test/helper/website/main.css +36 -0
- package/test/helper/website/scrollPage.html +261 -0
- package/test/helper/website/style.css +52 -0
- package/test/helper/website/tables.html +140 -0
- package/test/helper/website/waitForElements.html +73 -0
- package/test/reuse/common/assertion/expectDefined.spec.js +11 -0
- package/test/reuse/common/assertion/expectEqual.spec.js +52 -0
- package/test/reuse/common/assertion/expectFalse.spec.js +9 -0
- package/test/reuse/common/assertion/expectTrue.spec.js +9 -0
- package/test/reuse/common/assertion/expectUndefined.spec.js +11 -0
- package/test/reuse/common/assertion/expectUnequal.spec.js +25 -0
- package/test/reuse/common/assertion/expectUrlToBe.spec.js +27 -0
- package/test/reuse/common/assertion/test.assertion.conf.js +59 -0
- package/test/reuse/common/date/calculate.spec.js +163 -0
- package/test/reuse/common/date/getNextMonth.spec.js +105 -0
- package/test/reuse/common/date/getNextYear.spec.js +72 -0
- package/test/reuse/common/date/getPreviousMonth.spec.js +71 -0
- package/test/reuse/common/date/getPreviousYear.spec.js +72 -0
- package/test/reuse/common/date/getSpecific.spec.js +63 -0
- package/test/reuse/common/date/getToday.spec.js +78 -0
- package/test/reuse/common/date/getTomorrow.spec.js +72 -0
- package/test/reuse/common/date/test.date.conf.js +19 -0
- package/test/reuse/common/date/utils.js +6 -0
- package/test/reuse/common/navigation/navigateToUrl.spec.js +28 -0
- package/test/reuse/common/navigation/navigateToUrlAndRetry.spec.js +27 -0
- package/test/reuse/common/navigation/test.navigation.conf.js +25 -0
- package/test/reuse/common/userInteraction/clearAndFillActive.spec.js +100 -0
- package/test/reuse/common/userInteraction/clearAndFillActiveAndRetry.spec.js +106 -0
- package/test/reuse/common/userInteraction/fillActive.spec.js +230 -0
- package/test/reuse/common/userInteraction/fillActiveAndRetry.spec.js +172 -0
- package/test/reuse/common/userInteraction/pressKey.spec.js +105 -0
- package/test/reuse/common/userInteraction/test.userInteraction.conf.js +53 -0
- package/test/reuse/nonUi5/assertion/expectAttributeToBe.spec.js +45 -0
- package/test/reuse/nonUi5/assertion/expectAttributeToContain.spec.js +43 -0
- package/test/reuse/nonUi5/assertion/expectToBeNotVisible.spec.js +37 -0
- package/test/reuse/nonUi5/assertion/expectToBeVisible.spec.js +63 -0
- package/test/reuse/nonUi5/assertion/expectValueToBe.spec.js +25 -0
- package/test/reuse/nonUi5/assertion/test.assertion.conf.js +60 -0
- package/test/reuse/nonUi5/assertion/test.assertion.sauceLabs.conf.js +64 -0
- package/test/reuse/nonUi5/element/getAllDisplayed.spec.js +39 -0
- package/test/reuse/nonUi5/element/getAttributeValue.spec.js +58 -0
- package/test/reuse/nonUi5/element/getByChild.spec.js +70 -0
- package/test/reuse/nonUi5/element/getByClass.spec.js +64 -0
- package/test/reuse/nonUi5/element/getByCss.spec.js +65 -0
- package/test/reuse/nonUi5/element/getByCssContainingText.spec.js +83 -0
- package/test/reuse/nonUi5/element/getById.spec.js +35 -0
- package/test/reuse/nonUi5/element/getByName.spec.js +30 -0
- package/test/reuse/nonUi5/element/getByParent.spec.js +71 -0
- package/test/reuse/nonUi5/element/getByXPath.spec.js +30 -0
- package/test/reuse/nonUi5/element/getValue.spec.js +51 -0
- package/test/reuse/nonUi5/element/highlight.spec.js +18 -0
- package/test/reuse/nonUi5/element/isPresent.spec.js +39 -0
- package/test/reuse/nonUi5/element/isPresentByCss.spec.js +73 -0
- package/test/reuse/nonUi5/element/isPresentByXPath.spec.js +31 -0
- package/test/reuse/nonUi5/element/setInnerHTML.spec.js +23 -0
- package/test/reuse/nonUi5/element/test.element.conf.js +55 -0
- package/test/reuse/nonUi5/element/test.element.sauceLabs.conf.js +58 -0
- package/test/reuse/nonUi5/element/waitForAll.spec.js +24 -0
- package/test/reuse/nonUi5/element/waitToBeClickable.spec.js +24 -0
- package/test/reuse/nonUi5/element/waitToBePresent.spec.js +32 -0
- package/test/reuse/nonUi5/element/waitToBeVisible.spec.js +36 -0
- package/test/reuse/nonUi5/navigation/navigateToApplication.spec.js +13 -0
- package/test/reuse/nonUi5/navigation/test.navigation.conf.js +14 -0
- package/test/reuse/nonUi5/userInteraction/checkAttributeAndValue.spec.js +135 -0
- package/test/reuse/nonUi5/userInteraction/clear.spec.js +43 -0
- package/test/reuse/nonUi5/userInteraction/clearAndFill.spec.js +51 -0
- package/test/reuse/nonUi5/userInteraction/clearAndFillAndRetry.spec.js +58 -0
- package/test/reuse/nonUi5/userInteraction/clearAndRetry.spec.js +43 -0
- package/test/reuse/nonUi5/userInteraction/click.spec.js +60 -0
- package/test/reuse/nonUi5/userInteraction/clickAndRetry.spec.js +60 -0
- package/test/reuse/nonUi5/userInteraction/clickElementInSvg.spec.js +24 -0
- package/test/reuse/nonUi5/userInteraction/doubleClick.spec.js +22 -0
- package/test/reuse/nonUi5/userInteraction/dragAndDrop.spec.js +40 -0
- package/test/reuse/nonUi5/userInteraction/fill.spec.js +37 -0
- package/test/reuse/nonUi5/userInteraction/fillAndRetry.spec.js +39 -0
- package/test/reuse/nonUi5/userInteraction/mouseOverElement.spec.js +36 -0
- package/test/reuse/nonUi5/userInteraction/moveCursorAndClick.spec.js +24 -0
- package/test/reuse/nonUi5/userInteraction/rightClick.spec.js +13 -0
- package/test/reuse/nonUi5/userInteraction/scrollToElement.spec.js +35 -0
- package/test/reuse/nonUi5/userInteraction/test.userInteraction.conf.js +72 -0
- package/test/reuse/nonUi5/userInteraction/test.userInteraction.sauceLabs.conf.js +78 -0
- package/test/reuse/service/rest/db.json +8 -0
- package/test/reuse/service/rest/delete.spec.js +20 -0
- package/test/reuse/service/rest/get.spec.js +19 -0
- package/test/reuse/service/rest/init.spec.js +35 -0
- package/test/reuse/service/rest/patch.spec.js +29 -0
- package/test/reuse/service/rest/post.spec.js +37 -0
- package/test/reuse/service/rest/test.rest.conf.js +18 -0
- package/test/reuse/ui5/assertion/expectAttributeToBe.spec.js +106 -0
- package/test/reuse/ui5/assertion/expectAttributeToContain.spec.js +78 -0
- package/test/reuse/ui5/assertion/expectBindingContextPathToBe.spec.js +103 -0
- package/test/reuse/ui5/assertion/expectBindingPathToBe.spec.js +164 -0
- package/test/reuse/ui5/assertion/expectMessageToastTextToBe.spec.js +43 -0
- package/test/reuse/ui5/assertion/expectTextToBe.spec.js +39 -0
- package/test/reuse/ui5/assertion/expectToBeEnabled.spec.js +90 -0
- package/test/reuse/ui5/assertion/expectToBeNotEnabled.spec.js +62 -0
- package/test/reuse/ui5/assertion/expectToBeNotVisible.spec.js +52 -0
- package/test/reuse/ui5/assertion/expectToBeVisible.spec.js +69 -0
- package/test/reuse/ui5/assertion/expectToBeVisibleInViewport.spec.js +49 -0
- package/test/reuse/ui5/assertion/expectValidationError.spec.js +54 -0
- package/test/reuse/ui5/assertion/expectValidationSuccess.spec.js +53 -0
- package/test/reuse/ui5/assertion/expectValueToBe.spec.js +57 -0
- package/test/reuse/ui5/assertion/expectValueToBeDefined.spec.js +35 -0
- package/test/reuse/ui5/assertion/test.assertion.conf.js +28 -0
- package/test/reuse/ui5/assertion/test.assertion.sauceLab.conf.js +37 -0
- package/test/reuse/ui5/confirmationDialog/clickCancel.spec.js +88 -0
- package/test/reuse/ui5/confirmationDialog/clickCreate.spec.js +3 -0
- package/test/reuse/ui5/confirmationDialog/clickDelete.spec.js +89 -0
- package/test/reuse/ui5/confirmationDialog/clickNo.spec.js +96 -0
- package/test/reuse/ui5/confirmationDialog/clickOk.spec.js +66 -0
- package/test/reuse/ui5/confirmationDialog/clickRevokeApproval.spec.js +3 -0
- package/test/reuse/ui5/confirmationDialog/clickYes.spec.js +70 -0
- package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.conf.js +20 -0
- package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.sauceLab.conf.js +29 -0
- package/test/reuse/ui5/control/execute.spec.js +29 -0
- package/test/reuse/ui5/control/getAggregationProperty.spec.js +29 -0
- package/test/reuse/ui5/control/getAssociationProperty.spec.js +1 -0
- package/test/reuse/ui5/control/getBindingContextPathProperty.spec.js +30 -0
- package/test/reuse/ui5/control/getProperty.spec.js +30 -0
- package/test/reuse/ui5/control/getPropertyBinding.spec.js +30 -0
- package/test/reuse/ui5/control/test.control.conf.js +19 -0
- package/test/reuse/ui5/control/test.control.sauceLab.conf.js +30 -0
- package/test/reuse/ui5/date/fillRange.spec.js +53 -0
- package/test/reuse/ui5/date/pick.spec.js +136 -0
- package/test/reuse/ui5/date/pickRange.spec.js +143 -0
- package/test/reuse/ui5/date/test.date.conf.js +14 -0
- package/test/reuse/ui5/date/test.date.sauceLab.conf.js +26 -0
- package/test/reuse/ui5/element/getAllDisplayed.spec.js +71 -0
- package/test/reuse/ui5/element/getBindingValue.spec.js +78 -0
- package/test/reuse/ui5/element/getByChild.spec.js +124 -0
- package/test/reuse/ui5/element/getByParent.spec.js +134 -0
- package/test/reuse/ui5/element/getByText.spec.js +67 -0
- package/test/reuse/ui5/element/getDisplayed.spec.js +82 -0
- package/test/reuse/ui5/element/getId.spec.js +72 -0
- package/test/reuse/ui5/element/getPropertyValue.spec.js +91 -0
- package/test/reuse/ui5/element/highlight.spec.js +46 -0
- package/test/reuse/ui5/element/isVisible.spec.js +68 -0
- package/test/reuse/ui5/element/test.element.conf.js +22 -0
- package/test/reuse/ui5/element/test.element.sauceLab.conf.js +33 -0
- package/test/reuse/ui5/errorDialog/clickClose.spec.js +31 -0
- package/test/reuse/ui5/errorDialog/expectToBeVisible.spec.js +30 -0
- package/test/reuse/ui5/errorDialog/test.errorDialog.conf.js +13 -0
- package/test/reuse/ui5/errorDialog/test.errorDialog.sauceLab.conf.js +26 -0
- package/test/reuse/ui5/formatter/addRemoveLeadingZeros.spec.js +18 -0
- package/test/reuse/ui5/formatter/extractNumberFromString.spec.js +34 -0
- package/test/reuse/ui5/formatter/formatDate.spec.js +103 -0
- package/test/reuse/ui5/formatter/test.formatter.conf.js +14 -0
- package/test/reuse/ui5/formatter/test.formatter.sauceLab.conf.js +24 -0
- package/test/reuse/ui5/mockserver_qunit/Component.js +23 -0
- package/test/reuse/ui5/mockserver_qunit/LICENSE.txt +957 -0
- package/test/reuse/ui5/mockserver_qunit/NOTICE.txt +1 -0
- package/test/reuse/ui5/mockserver_qunit/controller/App.controller.js +37 -0
- package/test/reuse/ui5/mockserver_qunit/controller/BaseController.js +30 -0
- package/test/reuse/ui5/mockserver_qunit/controller/Home.controller.js +27 -0
- package/test/reuse/ui5/mockserver_qunit/controller/NotFound.controller.js +34 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/Employee.controller.js +64 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/EmployeeList.controller.js +22 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/Resume.controller.js +83 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverview.controller.js +11 -0
- package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverviewContent.controller.js +192 -0
- package/test/reuse/ui5/mockserver_qunit/i18n/i18n.properties +42 -0
- package/test/reuse/ui5/mockserver_qunit/index.html +21 -0
- package/test/reuse/ui5/mockserver_qunit/initMockServer.js +16 -0
- package/test/reuse/ui5/mockserver_qunit/localService/metadata.xml +61 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Employees.json +155 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Resumes.json +65 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockserver.js +146 -0
- package/test/reuse/ui5/mockserver_qunit/localService/mockserverLoadAllData.js +75 -0
- package/test/reuse/ui5/mockserver_qunit/manifest.json +169 -0
- package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServer.html +63 -0
- package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServerAllData.html +68 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/config.js +92 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/qunitExecution/specs/runQUnitTests.spec.js +14 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/data/setup.json +11 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/specs/testDisplayNotFound.spec.js +71 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Employees.json +204 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Resumes.json +114 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/setup.json +11 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/testShowEmployeeList.json +1 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/specs/testShowEmployeeList.spec.js +118 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/constants.js +25 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockDataMapper.js +23 -0
- package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockHelper.js +222 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/allTests.js +6 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/unitTests.qunit.html +38 -0
- package/test/reuse/ui5/mockserver_qunit/test/unit/utils/Conversions.js +13 -0
- package/test/reuse/ui5/mockserver_qunit/view/App.view.xml +9 -0
- package/test/reuse/ui5/mockserver_qunit/view/Home.view.xml +12 -0
- package/test/reuse/ui5/mockserver_qunit/view/NotFound.view.xml +11 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/Employee.view.xml +52 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/EmployeeList.view.xml +24 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/Resume.view.xml +35 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeHobbies.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeNotes.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeProjects.view.xml +3 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverview.view.xml +13 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewContent.view.xml +43 -0
- package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewTop.view.xml +3 -0
- package/test/reuse/ui5/navigation/closePopups.spec.js +16 -0
- package/test/reuse/ui5/navigation/expectUnsupportedNavigationPopup.spec.js +81 -0
- package/test/reuse/ui5/navigation/navigateToApplication.spec.js +148 -0
- package/test/reuse/ui5/navigation/navigateToApplicationAndRetry.spec.js +153 -0
- package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParams.spec.js +63 -0
- package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParamsAndRetry.spec.js +64 -0
- package/test/reuse/ui5/navigation/navigateToSystemAndApplication.spec.js +45 -0
- package/test/reuse/ui5/navigation/navigateToSystemAndApplicationAndRetry.spec.js +43 -0
- package/test/reuse/ui5/navigation/test.navigation.conf.js +17 -0
- package/test/reuse/ui5/navigation/test.navigation.sauceLab.conf.js +33 -0
- package/test/reuse/ui5/navigation/test.navigation.static.conf.js +34 -0
- package/test/reuse/ui5/navigation/test.navigation.static.sauceLab.conf.js +41 -0
- package/test/reuse/ui5/navigation/website/main.css +36 -0
- package/test/reuse/ui5/navigation/website/main.html +50 -0
- package/test/reuse/ui5/navigationBar/clickBack.spec.js +38 -0
- package/test/reuse/ui5/navigationBar/clickUserIcon.spec.js +36 -0
- package/test/reuse/ui5/navigationBar/expectPageTitle.spec.js +22 -0
- package/test/reuse/ui5/navigationBar/expectShellHeader.spec.js +22 -0
- package/test/reuse/ui5/navigationBar/test.navigationBar.conf.js +17 -0
- package/test/reuse/ui5/navigationBar/test.navigationBar.sauceLab.conf.js +28 -0
- package/test/reuse/ui5/session/login.spec.js +78 -0
- package/test/reuse/ui5/session/loginFiori.spec.js +52 -0
- package/test/reuse/ui5/session/loginSapCloud.spec.js +51 -0
- package/test/reuse/ui5/session/logout.spec.js +48 -0
- package/test/reuse/ui5/session/switchUser.spec.js +48 -0
- package/test/reuse/ui5/session/test.session.conf.js +20 -0
- package/test/reuse/ui5/session/test.session.sauceLab.conf.js +29 -0
- package/test/reuse/ui5/table/clickSettingsButton.spec.js +58 -0
- package/test/reuse/ui5/table/sortColumnAscending.spec.js +84 -0
- package/test/reuse/ui5/table/sortColumnDescending.spec.js +84 -0
- package/test/reuse/ui5/table/test.table.conf.js +14 -0
- package/test/reuse/ui5/table/test.table.sauceLab.conf.js +25 -0
- package/test/reuse/ui5/table/test.table.sauceLab.tunnel.conf.js +25 -0
- package/test/reuse/ui5/userInteraction/clear.spec.js +75 -0
- package/test/reuse/ui5/userInteraction/clearAndFill.spec.js +157 -0
- package/test/reuse/ui5/userInteraction/clearAndFillAndRetry.spec.js +132 -0
- package/test/reuse/ui5/userInteraction/clearAndFillSmartFieldInput.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/clearAndRetry.spec.js +57 -0
- package/test/reuse/ui5/userInteraction/click.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/clickAndRetry.spec.js +52 -0
- package/test/reuse/ui5/userInteraction/clickSelectArrow.spec.js +87 -0
- package/test/reuse/ui5/userInteraction/clickSelectArrowAndRetry.spec.js +147 -0
- package/test/reuse/ui5/userInteraction/clickTab.spec.js +59 -0
- package/test/reuse/ui5/userInteraction/doubleClick.spec.js +73 -0
- package/test/reuse/ui5/userInteraction/dragAndDrop.spec.js +34 -0
- package/test/reuse/ui5/userInteraction/fill.spec.js +114 -0
- package/test/reuse/ui5/userInteraction/fillAndRetry.spec.js +120 -0
- package/test/reuse/ui5/userInteraction/mouseOverElement.spec.js +55 -0
- package/test/reuse/ui5/userInteraction/openF4Help.spec.js +56 -0
- package/test/reuse/ui5/userInteraction/rightClick.spec.js +72 -0
- package/test/reuse/ui5/userInteraction/scrollToElement.spec.js +89 -0
- package/test/reuse/ui5/userInteraction/searchFor.spec.js +155 -0
- package/test/reuse/ui5/userInteraction/selectBox.spec.js +128 -0
- package/test/reuse/ui5/userInteraction/selectCombobox.spec.js +115 -0
- package/test/reuse/ui5/userInteraction/selectMultiComboBox.spec.js +155 -0
- package/test/reuse/ui5/userInteraction/test.userInteraction.conf.js +35 -0
- package/test/reuse/ui5/userInteraction/test.userInteraction.sauceLab.conf.js +46 -0
- package/test/reuse/util/browser/back.spec.js +32 -0
- package/test/reuse/util/browser/clearBrowser.spec.js +35 -0
- package/test/reuse/util/browser/executeScript.spec.js +49 -0
- package/test/reuse/util/browser/getBaseUrl.spec.js +13 -0
- package/test/reuse/util/browser/getBrowserName.spec.js +18 -0
- package/test/reuse/util/browser/getCurrentUrl.spec.js +34 -0
- package/test/reuse/util/browser/getCurrentWindow.spec.js +42 -0
- package/test/reuse/util/browser/getUI5Version.spec.js +31 -0
- package/test/reuse/util/browser/logCurrentUrl.spec.js +23 -0
- package/test/reuse/util/browser/refresh.spec.js +52 -0
- package/test/reuse/util/browser/setBaseUrl.spec.js +13 -0
- package/test/reuse/util/browser/switchToDefaultContent.spec.js +34 -0
- package/test/reuse/util/browser/switchToIframe.spec.js +29 -0
- package/test/reuse/util/browser/switchToNewWindow.spec.js +142 -0
- package/test/reuse/util/browser/switchToWindow.spec.js +57 -0
- package/test/reuse/util/browser/test.browser.conf.js +27 -0
- package/test/reuse/util/data/data/test.json +3 -0
- package/test/reuse/util/data/data/test.secure.json +11 -0
- package/test/reuse/util/data/decrypt.spec.js +15 -0
- package/test/reuse/util/data/getData.spec.js +15 -0
- package/test/reuse/util/data/getSecureData.spec.js +57 -0
- package/test/reuse/util/data/test.data.conf.js +22 -0
- package/test/reuse/util/file/file.spec.js +90 -0
- package/test/reuse/util/file/pdfParser.spec.js +55 -0
- package/test/reuse/util/file/test.file.conf.js +15 -0
- package/test/reuse/util/file/testFiles/sample.pdf +198 -0
- package/test/reuse/util/file/testFiles/test.txt +5 -0
- package/test/reuse/util/file/testFiles/test2.txt +2 -0
- package/test/reuse/util/formatter/addRemoveLeadingZeros.spec.js +38 -0
- package/test/reuse/util/formatter/extractNumberFromString.spec.js +67 -0
- package/test/reuse/util/formatter/formatDate.spec.js +150 -0
- package/test/reuse/util/formatter/sliceStringAfter.spec.js +62 -0
- package/test/reuse/util/formatter/sliceStringAt.spec.js +62 -0
- package/test/reuse/util/formatter/stringifyJSON.spec.js +24 -0
- package/test/reuse/util/formatter/test.formatter.conf.js +20 -0
- package/test/reuse/util/formatter/trimString.spec.js +37 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression testing of data import, checks if data loaded into browser.params.import
|
|
3
|
+
* match the actual data in the files.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// using chai assertion framework in this spec (instead of the default which is "jest"),
|
|
7
|
+
// since jest is not available inside the outer "describe" block
|
|
8
|
+
const { assert } = require("chai");
|
|
9
|
+
|
|
10
|
+
const utils = require("../utils.js");
|
|
11
|
+
|
|
12
|
+
describe("Import Data", function () {
|
|
13
|
+
|
|
14
|
+
// load the actual files for comparison against data imported by import, export module in
|
|
15
|
+
// importExportData.js
|
|
16
|
+
// Refer to config.import.js
|
|
17
|
+
// params : {
|
|
18
|
+
// import: { // Verzeichnis Pfad
|
|
19
|
+
// myFolder1: "./data/my/folder/data/qs9",
|
|
20
|
+
// myFolder2: "data/another/folder/data/anotherFolder",
|
|
21
|
+
// myMissingFolder: "./data/my/folder/missing",
|
|
22
|
+
// // Eine Datei Pfad (Best Practice should be the same as the script) .....
|
|
23
|
+
// yourPrefixSpecName: "./data/my/folder/data/qs9/data.json",
|
|
24
|
+
// missingFile: "./data/my/folder/missingFile.json",
|
|
25
|
+
// invalidJsonFile: "./data/my/folder/invalid.json",
|
|
26
|
+
// uiUser: "./data/my/folder/data/qs9/webUser.json",
|
|
27
|
+
// emptyObject: "./data/my/folder/data/qs9/empty.json"
|
|
28
|
+
// },
|
|
29
|
+
// }
|
|
30
|
+
const myFolder1 = "./data/my/folder/data/qs9";
|
|
31
|
+
const myFolder2 = "data/another/folder/data/anotherFolder";
|
|
32
|
+
const yourPrefixSpecName = "./data/my/folder/data/qs9/data.json";
|
|
33
|
+
const uiUser = "./data/my/folder/data/qs9/webUser.json";
|
|
34
|
+
|
|
35
|
+
// regression test to check that data has been imported in
|
|
36
|
+
// beforeSession hook
|
|
37
|
+
// check if data is available in "describe" and not in "it" block
|
|
38
|
+
assert(browser.params.import.myFolder1, "myFolder1 not imported");
|
|
39
|
+
assert(browser.params.import.myFolder2, "myFolder2 not imported");
|
|
40
|
+
|
|
41
|
+
it("step 1: check presence of import config params", async function () {
|
|
42
|
+
|
|
43
|
+
// folders and valid json files should be loaded
|
|
44
|
+
// missing or inaccessible folders, non-json files, and invalid json files
|
|
45
|
+
// should not be loaded
|
|
46
|
+
await common.assertion.expectDefined(browser.params.import.myFolder1);
|
|
47
|
+
await common.assertion.expectDefined(browser.params.import.myFolder2);
|
|
48
|
+
await common.assertion.expectUndefined(browser.params.import.myMissingFolder);
|
|
49
|
+
await common.assertion.expectDefined(browser.params.import.yourPrefixSpecName);
|
|
50
|
+
await common.assertion.expectUndefined(browser.params.import.missingFile);
|
|
51
|
+
await common.assertion.expectUndefined(browser.params.import.invalidJsonFile);
|
|
52
|
+
await common.assertion.expectDefined(browser.params.import.uiUser);
|
|
53
|
+
await common.assertion.expectEqual(browser.params.import.emptyObject === null, true);
|
|
54
|
+
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("step 2: check if files in 'myFolder1' folder are read", async function () {
|
|
58
|
+
// check if json files and subfolders in myFolder1 (i.e. "./data/my/folder/data/qs9")
|
|
59
|
+
// are read and added to browser.params.import.myFolder1
|
|
60
|
+
await utils.checkImportFolder(myFolder1, "myFolder1");
|
|
61
|
+
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("step 3: check if files in 'myFolder2' folder are read", async function () {
|
|
65
|
+
// check if json files and subfolders in myFolder2 (i.e. "data/another/folder/data/anotherFolder")
|
|
66
|
+
// are read and added to browser.params.import.myFolder2
|
|
67
|
+
await utils.checkImportFolder(myFolder2, "myFolder2");
|
|
68
|
+
|
|
69
|
+
});
|
|
70
|
+
it("step 4: check imported data from 'myFolder1'", async function () {
|
|
71
|
+
// check if json data in file purchaseRequisition.json in myFolder1 (i.e. "./data/my/folder/data/qs9")
|
|
72
|
+
// has been read and added to browser.params.import.myFolder1.purchaseRequisition
|
|
73
|
+
await utils.checkImportedData(myFolder1, ["myFolder1"], "purchaseRequisition");
|
|
74
|
+
|
|
75
|
+
});
|
|
76
|
+
it("step 5: check imported data from 'myFolder2'", async function () {
|
|
77
|
+
// check if json data in file purchaseRequisition_HI.json in myFolder2 (i.e. "data/another/folder/data/anotherFolder")
|
|
78
|
+
// has been read and added to browser.params.import.myFolder2.purchaseRequisition_HI
|
|
79
|
+
await utils.checkImportedData(myFolder2, ["myFolder2"], "purchaseRequisition_HI");
|
|
80
|
+
|
|
81
|
+
});
|
|
82
|
+
it("step 6: check imported data for file 'yourPrefixSpecName'", async function () {
|
|
83
|
+
// check if json data in file pointed to by "yourPrefixSpecName" (i.e. "./data/my/folder/data/qs9/data.json")
|
|
84
|
+
// has been read and added to browser.params.import.yourPrefixSpecName
|
|
85
|
+
await utils.checkImportedDataFromFile(yourPrefixSpecName, "yourPrefixSpecName");
|
|
86
|
+
|
|
87
|
+
});
|
|
88
|
+
it("step 7: check imported data for file 'uiUser'", async function () {
|
|
89
|
+
// check if json data in file pointed to by "uiUser" (i.e. "./data/my/folder/data/qs9/webUser.json")
|
|
90
|
+
// has been read and added to browser.params.import.uiUser
|
|
91
|
+
await utils.checkImportedDataFromFile(uiUser, "uiUser");
|
|
92
|
+
|
|
93
|
+
});
|
|
94
|
+
it("step 8: check invalid json is not loaded", async function () {
|
|
95
|
+
await common.assertion.expectUndefined(browser.params.import["invalidJsonFile"]);
|
|
96
|
+
|
|
97
|
+
});
|
|
98
|
+
it("step 9: check missing file is not loaded", async function () {
|
|
99
|
+
await common.assertion.expectUndefined(browser.params.import["missingFile"]);
|
|
100
|
+
|
|
101
|
+
});
|
|
102
|
+
it("step 10: check missing folder is not loaded", async function () {
|
|
103
|
+
await common.assertion.expectUndefined(browser.params.import["missingFolder"]);
|
|
104
|
+
|
|
105
|
+
});
|
|
106
|
+
it("step 11: check files in subfolder are loaded", async function () {
|
|
107
|
+
// check if data in LimitPurchaseOrder.json in subfolder "data/another/folder/data/anotherFolder/subfolder" has
|
|
108
|
+
// been read and is available in browser.params.import.myFolder2.subfolder.LimitPurchaseOrder
|
|
109
|
+
await utils.checkImportedData(myFolder2, ["myFolder2", "subfolder"], "LimitPurchaseOrder");
|
|
110
|
+
|
|
111
|
+
// check if data in PurchaseOrderWithScheduline.json in subfolder "data/another/folder/data/anotherFolder/subfolder" has
|
|
112
|
+
// been read and is available in browser.params.import.myFolder2.subfolder.PurchaseOrderWithScheduline
|
|
113
|
+
await utils.checkImportedData(myFolder2, ["myFolder2", "subfolder"], "PurchaseOrderWithScheduline");
|
|
114
|
+
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("step 12: check if JSON file with array is loaded", async function () {
|
|
118
|
+
// check if data in PurchaseOrderItems.json in subfolder "data/another/folder/data/anotherFolder/subfolder" has
|
|
119
|
+
// been read and is available in browser.params.import.myFolder2.subfolder.PurchaseOrderItems
|
|
120
|
+
await utils.checkImportedData(myFolder2, ["myFolder2", "subfolder"], "PurchaseOrderItems");
|
|
121
|
+
|
|
122
|
+
// check if this is an array
|
|
123
|
+
const poItems = browser.params.import.myFolder2.subfolder.PurchaseOrderItems;
|
|
124
|
+
await common.assertion.expectEqual(Array.isArray(poItems), true);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("step 13: check if subfolders with special characters in their names are loaded", async function () {
|
|
128
|
+
|
|
129
|
+
await common.assertion.expectDefined(browser.params.import.myFolder2["purchase-orders"]);
|
|
130
|
+
|
|
131
|
+
});
|
|
132
|
+
it("step 14: check files with special characters in their names are loaded", async function () {
|
|
133
|
+
// check if data in Limit-Purchase-Order.json in subfolder "data/another/folder/data/anotherFolder/purchase-orders" has
|
|
134
|
+
// been read and is available in browser.params.import.myFolder2["purchase-orders"]["Limit-Purchase-Order"]
|
|
135
|
+
await utils.checkImportedData(myFolder2, ["myFolder2", "purchase-orders"], "Limit-Purchase-Order");
|
|
136
|
+
|
|
137
|
+
// check if data in ServicePurchaseOrder.2Items.json in subfolder "data/another/folder/data/anotherFolder/purchase-orders" has
|
|
138
|
+
// been read and is available in browser.params.import.myFolder2["purchase-orders"]["ServicePurchaseOrder.2Items"]
|
|
139
|
+
|
|
140
|
+
await utils.checkImportedData(myFolder2, ["myFolder2", "purchase-orders"], "ServicePurchaseOrder.2Items");
|
|
141
|
+
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
});
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression testing
|
|
3
|
+
* Use imported data to fill forms, and export test data
|
|
4
|
+
*/
|
|
5
|
+
const formUtils = {
|
|
6
|
+
textSelector: {
|
|
7
|
+
"elementProperties": {
|
|
8
|
+
"viewName": "sap.m.sample.InputTypes.V",
|
|
9
|
+
"metadata": "sap.m.Input",
|
|
10
|
+
"type": "Text"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
emailSelector: {
|
|
14
|
+
"elementProperties": {
|
|
15
|
+
"viewName": "sap.m.sample.InputTypes.V",
|
|
16
|
+
"metadata": "sap.m.Input",
|
|
17
|
+
"type": "Email"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
telephoneSelector: {
|
|
21
|
+
"elementProperties": {
|
|
22
|
+
"viewName": "sap.m.sample.InputTypes.V",
|
|
23
|
+
"metadata": "sap.m.Input",
|
|
24
|
+
"type": "Tel"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
numberSelector: {
|
|
28
|
+
"elementProperties": {
|
|
29
|
+
"viewName": "sap.m.sample.InputTypes.V",
|
|
30
|
+
"metadata": "sap.m.Input",
|
|
31
|
+
"type": "Number"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
urlSelector: {
|
|
35
|
+
"elementProperties": {
|
|
36
|
+
"viewName": "sap.m.sample.InputTypes.V",
|
|
37
|
+
"metadata": "sap.m.Input",
|
|
38
|
+
"type": "Url"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
fillForm: async function (description, userData) {
|
|
42
|
+
await ui5.element.waitForAll(this.textSelector);
|
|
43
|
+
await ui5.userInteraction.fill(this.textSelector, description);
|
|
44
|
+
await ui5.userInteraction.fill(this.emailSelector, userData.email);
|
|
45
|
+
await ui5.userInteraction.fill(this.telephoneSelector, userData.telephone);
|
|
46
|
+
await ui5.userInteraction.fill(this.numberSelector, userData.amount);
|
|
47
|
+
await ui5.userInteraction.fill(this.urlSelector, userData.website);
|
|
48
|
+
},
|
|
49
|
+
clearForm: async function () {
|
|
50
|
+
await ui5.userInteraction.clear(this.textSelector);
|
|
51
|
+
await ui5.userInteraction.clear(this.emailSelector);
|
|
52
|
+
await ui5.userInteraction.clear(this.telephoneSelector);
|
|
53
|
+
await ui5.userInteraction.clear(this.numberSelector);
|
|
54
|
+
await ui5.userInteraction.clear(this.urlSelector);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
describe("Import and Export using UI", function () {
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
// config params
|
|
63
|
+
// import: { //import data
|
|
64
|
+
// myUserPrefix: "./data/ui/user.json",
|
|
65
|
+
// userDataFolder: "./data/ui",
|
|
66
|
+
// uiUser: "./data/ui/webUser.json",
|
|
67
|
+
// },
|
|
68
|
+
// export: { //Export
|
|
69
|
+
// exportData: "./data/ui/export/exportedUser.json",
|
|
70
|
+
// webUser : "./data/ui/export/exportedWebUser.json"
|
|
71
|
+
// },
|
|
72
|
+
it("step 1: use data loaded into myUserPrefix", async function () {
|
|
73
|
+
|
|
74
|
+
// uses data from file pointed to by myUserPrefix
|
|
75
|
+
// myUserPrefix: "./data/ui/user.json",
|
|
76
|
+
await ui5.navigation.navigateToApplication("", false);
|
|
77
|
+
const acceptCookiesButton = {
|
|
78
|
+
"elementProperties": {
|
|
79
|
+
"viewName": "sap.ui.documentation.sdk.view.App",
|
|
80
|
+
"metadata": "sap.m.Button",
|
|
81
|
+
"text": [{
|
|
82
|
+
"path": "i18n>COOKIE_SETTINGS_DIALOG_FUNCTIONAL_COOKIES_ACCEPT_ALL"
|
|
83
|
+
}]
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
await ui5.userInteraction.click(acceptCookiesButton);
|
|
88
|
+
} catch (e) {
|
|
89
|
+
// ignore, no cookie dialog
|
|
90
|
+
}
|
|
91
|
+
await nonUi5.element.switchToIframe("iframe[id='sampleFrame']");
|
|
92
|
+
|
|
93
|
+
const userData = browser.params.import.myUserPrefix;
|
|
94
|
+
await common.assertion.expectDefined(userData);
|
|
95
|
+
|
|
96
|
+
await common.assertion.expectDefined(userData.email);
|
|
97
|
+
await common.assertion.expectDefined(userData.telephone);
|
|
98
|
+
await common.assertion.expectDefined(userData.amount);
|
|
99
|
+
await common.assertion.expectDefined(userData.website);
|
|
100
|
+
|
|
101
|
+
await formUtils.fillForm("Data from myUserPrefix", userData);
|
|
102
|
+
|
|
103
|
+
await formUtils.clearForm();
|
|
104
|
+
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("step 2: use data loaded from file in subfolder moreDataFolder - anotherUser.json", async function () {
|
|
108
|
+
|
|
109
|
+
// file anotherUser.json is in subfolder "moreDataFolder" within directory pointed to by userDataFolder
|
|
110
|
+
// userDataFolder: "./data/ui",
|
|
111
|
+
const userDataFolder = browser.params.import.userDataFolder;
|
|
112
|
+
await common.assertion.expectDefined(userDataFolder);
|
|
113
|
+
const moreDataFolder = browser.params.import.userDataFolder.moreDataFolder;
|
|
114
|
+
await common.assertion.expectDefined(moreDataFolder);
|
|
115
|
+
const anotherUser = browser.params.import.userDataFolder.moreDataFolder.anotherUser;
|
|
116
|
+
await common.assertion.expectDefined(anotherUser);
|
|
117
|
+
|
|
118
|
+
await common.assertion.expectDefined(anotherUser.email);
|
|
119
|
+
await common.assertion.expectDefined(anotherUser.telephone);
|
|
120
|
+
await common.assertion.expectDefined(anotherUser.amount);
|
|
121
|
+
await common.assertion.expectDefined(anotherUser.website);
|
|
122
|
+
|
|
123
|
+
await formUtils.fillForm("Data from anotherUser.json in moreDataFolder", anotherUser);
|
|
124
|
+
|
|
125
|
+
await formUtils.clearForm();
|
|
126
|
+
|
|
127
|
+
});
|
|
128
|
+
it("step 3: use data loaded into uiUser", async function () {
|
|
129
|
+
|
|
130
|
+
// uses data from file pointed to by reference
|
|
131
|
+
// uiUser: "./data/ui/webUser.json"
|
|
132
|
+
const userData = browser.params.import.uiUser;
|
|
133
|
+
await common.assertion.expectDefined(userData);
|
|
134
|
+
|
|
135
|
+
await common.assertion.expectDefined(userData.email);
|
|
136
|
+
await common.assertion.expectDefined(userData.telephone);
|
|
137
|
+
await common.assertion.expectDefined(userData.amount);
|
|
138
|
+
await common.assertion.expectDefined(userData.website);
|
|
139
|
+
|
|
140
|
+
await formUtils.fillForm("Data from uiUser", userData);
|
|
141
|
+
|
|
142
|
+
await formUtils.clearForm();
|
|
143
|
+
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it("step 4: export data into file pointed to by exportData param", async function () {
|
|
147
|
+
|
|
148
|
+
const dateAdded = (new Date()).toISOString();
|
|
149
|
+
const userData = {
|
|
150
|
+
"exportedOn": dateAdded,
|
|
151
|
+
"description": "Should be in file export/exportedUser.json",
|
|
152
|
+
"email": "joe.exported@example.com",
|
|
153
|
+
"telephone": "11-2233445566",
|
|
154
|
+
"amount": 458,
|
|
155
|
+
"website": "http://www.exportedUser.test"
|
|
156
|
+
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// assign the data to export param so that it gets written to file pointed to by "exportData"
|
|
160
|
+
// exportData: "./data/ui/export/exportedUser.json",
|
|
161
|
+
browser.params.export.exportData = userData;
|
|
162
|
+
|
|
163
|
+
await common.assertion.expectDefined(browser.params.export.exportData.description);
|
|
164
|
+
await common.assertion.expectDefined(browser.params.export.exportData.email);
|
|
165
|
+
await common.assertion.expectDefined(browser.params.export.exportData.telephone);
|
|
166
|
+
await common.assertion.expectDefined(browser.params.export.exportData.amount);
|
|
167
|
+
await common.assertion.expectDefined(browser.params.export.exportData.website);
|
|
168
|
+
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("step 5: export data into file pointed to by webUser param", async function () {
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
const dateAdded = (new Date()).toISOString();
|
|
175
|
+
const userData = {
|
|
176
|
+
"exportedOn": dateAdded,
|
|
177
|
+
"description": "Should be in file export/exportedWebUser.json",
|
|
178
|
+
"email": "joe.webuser@example.com",
|
|
179
|
+
"telephone": "333-000-111-222",
|
|
180
|
+
"amount": 4.79,
|
|
181
|
+
"website": "http://www.webuser.test"
|
|
182
|
+
|
|
183
|
+
};
|
|
184
|
+
// assign the data to export param so that it gets written to file pointed to by "refUser"
|
|
185
|
+
// webUser : "./data/ui/export/exportedWebUser.json"
|
|
186
|
+
browser.params.export.webUser = userData;
|
|
187
|
+
|
|
188
|
+
await common.assertion.expectDefined(browser.params.export.webUser.description);
|
|
189
|
+
await common.assertion.expectDefined(browser.params.export.webUser.email);
|
|
190
|
+
await common.assertion.expectDefined(browser.params.export.webUser.telephone);
|
|
191
|
+
await common.assertion.expectDefined(browser.params.export.webUser.amount);
|
|
192
|
+
await common.assertion.expectDefined(browser.params.export.webUser.website);
|
|
193
|
+
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
});
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
const fs = require("fs-extra");
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const dataExchangeUtil = require("../../../lib/scripts/dataExchange/dataExchangeUtil");
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Utility functions for regression testing of import and export of data.
|
|
8
|
+
* These read data from folders and files, and check against imported data.
|
|
9
|
+
* Or make data from file available for export.
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
const utilsMethods = {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @function checkImportFolder - check if json files and subfolders in specified folderPath
|
|
16
|
+
* have been imported under the specified key.
|
|
17
|
+
* @param {string} folderPath - the folder to read
|
|
18
|
+
* @param {string} paramName - the key to check against
|
|
19
|
+
* @example const myFolder1 = "./data/my/folder/data/qs9";
|
|
20
|
+
* await utils.checkImportFolder(myFolder1, "myFolder1");
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
checkImportFolder: async function (folderPath, paramName) {
|
|
24
|
+
folderPath = dataExchangeUtil.getFileAbsPath(folderPath);
|
|
25
|
+
let files = [];
|
|
26
|
+
try {
|
|
27
|
+
files = await fs.readdir(folderPath, { withFileTypes: true });
|
|
28
|
+
} catch (err) {
|
|
29
|
+
console.error(err);
|
|
30
|
+
await common.assertion.expectEqual(true, false);
|
|
31
|
+
}
|
|
32
|
+
// filter out json files
|
|
33
|
+
const jsonFiles = files.filter((file) => !file.isDirectory() && file.name.match(/\.json$/) !== null);
|
|
34
|
+
const jsonFilePrefixes = jsonFiles.map(file => file.name.replace(/^(.*)\.json$/, "$1"));
|
|
35
|
+
const nonJsonFiles = files.filter((file) => !file.isDirectory() && file.name.match(/\.json$/) === null);
|
|
36
|
+
const nonJsonFilePrefixes = nonJsonFiles.map(file => file.name.replace(/^(.*)\.*$/, "$1"));
|
|
37
|
+
|
|
38
|
+
// get the subfolders
|
|
39
|
+
let subfolders = files.filter((file) => file.isDirectory());
|
|
40
|
+
subfolders = subfolders.map(file => file.name);
|
|
41
|
+
|
|
42
|
+
// check if the json files have been loaded into browser.params.import
|
|
43
|
+
const browserParamKeys = Object.keys(browser.params.import[paramName]);
|
|
44
|
+
|
|
45
|
+
for (let i = 0; i < jsonFilePrefixes.length; i++) {
|
|
46
|
+
const prefix = jsonFilePrefixes[i];
|
|
47
|
+
await common.assertion.expectUnequal(browserParamKeys.indexOf(prefix), -1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// check if non json files are absent in browser.params.import
|
|
51
|
+
for (let i = 0; i < nonJsonFilePrefixes.length; i++) {
|
|
52
|
+
const prefix = nonJsonFilePrefixes[i];
|
|
53
|
+
await common.assertion.expectEqual(browserParamKeys.indexOf(prefix), -1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//check if subfolders are present
|
|
57
|
+
for (let i = 0; i < subfolders.length; i++) {
|
|
58
|
+
const folder = subfolders[i];
|
|
59
|
+
await common.assertion.expectUnequal(browserParamKeys.indexOf(folder), -1);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @function checkImportedData - check if data from json file specified by jsonFilePrefix under
|
|
65
|
+
* folderPath has been added using the params key. In the example below data from
|
|
66
|
+
* "./data/my/folder/data/qs9/subfolder/LimitPurchaseOrder.json" is checked if present in
|
|
67
|
+
* browser.params.import.myFolder1.subfolder.LimitPurchaseOrder
|
|
68
|
+
* @param {string} folderPath - the folder path
|
|
69
|
+
* @param {string[]} params - array of keys
|
|
70
|
+
* @param {string} jsonFilePrefix - the prefix of json file.
|
|
71
|
+
* @example const myFolder1 = "./data/my/folder/data/qs9";
|
|
72
|
+
* await utils.checkImportedData(myFolder1, ["myFolder1","subfolder"], "LimitPurchaseOrder");
|
|
73
|
+
*/
|
|
74
|
+
checkImportedData: async function (folderPath, params, jsonFilePrefix) {
|
|
75
|
+
folderPath = dataExchangeUtil.getFileAbsPath(folderPath);
|
|
76
|
+
|
|
77
|
+
//include subfolders
|
|
78
|
+
params.forEach((param, idx) => {
|
|
79
|
+
if (idx > 0) folderPath = path.resolve(folderPath, param);
|
|
80
|
+
});
|
|
81
|
+
const fileWithPath = path.resolve(folderPath, jsonFilePrefix + ".json");
|
|
82
|
+
let data;
|
|
83
|
+
try {
|
|
84
|
+
data = await dataExchangeUtil.readJson(fileWithPath);
|
|
85
|
+
} catch (err) {
|
|
86
|
+
console.error(err);
|
|
87
|
+
await common.assertion.expectEqual(true, false);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let importedData = browser.params.import;
|
|
91
|
+
params.forEach(param => {
|
|
92
|
+
importedData = importedData[param] || {};
|
|
93
|
+
});
|
|
94
|
+
//check if the json files have been loaded into browser.params.import
|
|
95
|
+
importedData = importedData[jsonFilePrefix];
|
|
96
|
+
//can't find a method in ui5.assertion to check if two JSON objects match
|
|
97
|
+
// await common.assertion.expectEqual(importedData, data);
|
|
98
|
+
await expect(importedData).toEqual(data);
|
|
99
|
+
|
|
100
|
+
},
|
|
101
|
+
/**
|
|
102
|
+
* @function checkImportedDataFromFile - check if data from specified file is available under
|
|
103
|
+
* the specified key
|
|
104
|
+
* @param {string} fileWithPath - file with path
|
|
105
|
+
* @param {string} paramName - the key to use
|
|
106
|
+
* @example const yourPrefixSpecName = "./data/my/folder/data/qs9/data.json";
|
|
107
|
+
* await await utils.checkImportedDataFromFile(yourPrefixSpecName, "yourPrefixSpecName");
|
|
108
|
+
*/
|
|
109
|
+
checkImportedDataFromFile: async function (fileWithPath, paramName) {
|
|
110
|
+
fileWithPath = dataExchangeUtil.getFileAbsPath(fileWithPath);
|
|
111
|
+
|
|
112
|
+
let data;
|
|
113
|
+
try {
|
|
114
|
+
data = await dataExchangeUtil.readJson(fileWithPath);
|
|
115
|
+
} catch (err) {
|
|
116
|
+
console.error(err);
|
|
117
|
+
await common.assertion.expectEqual(true, false);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
//check if the json files have been loaded into browser.params.import
|
|
121
|
+
const importedData = browser.params.import[paramName];
|
|
122
|
+
// await common.assertion.expectEqual(importedData, data);
|
|
123
|
+
await expect(importedData).toEqual(data);
|
|
124
|
+
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @function exportData - copy data in json file specified by jsonFilePrefix, in specifed folderPath
|
|
129
|
+
* to browser.params.export under key specified by exportParamName
|
|
130
|
+
* @param {string} folderPath - the folder path
|
|
131
|
+
* @param {string} jsonFilePrefix - the json file prefix
|
|
132
|
+
* @param {string} exportParamName - the key to use. In the example below, browser.params.export.exportMoreData
|
|
133
|
+
* will have data from "./data/my/folder/data/anotherFolder/subfolder/ServicePurchaseOrder.json", which
|
|
134
|
+
* at the end of the test run will be written to "./data/my/folder/path/in/moreDataFile.json"
|
|
135
|
+
* @example const exportMoreData = "./data/my/folder/path/in/moreDataFile.json";
|
|
136
|
+
* const subfolder = "./data/my/folder/data/anotherFolder/subfolder";
|
|
137
|
+
* await utils.exportData(subfolder, "ServicePurchaseOrder", "exportMoreData");
|
|
138
|
+
*/
|
|
139
|
+
exportData: async function (folderPath, jsonFilePrefix, exportParamName) {
|
|
140
|
+
folderPath = dataExchangeUtil.getFileAbsPath(folderPath);
|
|
141
|
+
|
|
142
|
+
const fileWithPath = path.resolve(folderPath, jsonFilePrefix + ".json");
|
|
143
|
+
let data;
|
|
144
|
+
try {
|
|
145
|
+
data = await dataExchangeUtil.readJson(fileWithPath);
|
|
146
|
+
} catch (err) {
|
|
147
|
+
console.error(err);
|
|
148
|
+
await common.assertion.expectEqual(true, false);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// assign data to browser.params.export, so that it gets written to export file
|
|
152
|
+
// at end of test.
|
|
153
|
+
// make sure any other data previously in browser.params.export
|
|
154
|
+
// against the specified key are not lost,
|
|
155
|
+
// unless you really don't want them
|
|
156
|
+
browser.params.export[exportParamName] = { ...browser.params.export[exportParamName], ...data };
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
module.exports = utilsMethods;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Functional tests
|
|
2
|
+
|
|
3
|
+
### Main goals of *tests/qmate/functional* test folder is to cover [Qmate WDIO API](../../documentation/topics/locators.md) with tests:
|
|
4
|
+
|
|
5
|
+
- Test locators and how we can access locators via `browser.uiControl()` and `browser.uiControls()`.
|
|
6
|
+
- Test all methods (custom commands) from [scripts/hooks/utils/addLocatorCommands.js](../../scripts/hooks/utils/locatorCommands.js) (`getUi5Aggregation()`, `getProperties()` etc.)
|
|
7
|
+
- Test corner cases (provide wrong 'elementProperties', try to enter a value to a label, try to click non-clickable element etc.) to check error handling inside custom commands
|
|
8
|
+
|
|
9
|
+
#### /locators:
|
|
10
|
+
|
|
11
|
+
- Test only selectors (locators) - `uiControl()` method
|
|
12
|
+
- Try all combinations of `elementProperties`, `ancestorProperties`, `descendantProperties` etc.
|
|
13
|
+
|
|
14
|
+
#### /ui5Properties:
|
|
15
|
+
|
|
16
|
+
- Test custom commands: `getUi5Aggregation()`, `getUi5Properties()` etc. on both element and browser levels
|
|
17
|
+
|
|
18
|
+
#### /chaining:
|
|
19
|
+
|
|
20
|
+
- Test chaining (work on both browser and element levels):
|
|
21
|
+
```js
|
|
22
|
+
const list = await browser.uiControl(ui5ControlProperties);
|
|
23
|
+
const firstIitem = await list.uiControl(ui5ControlProperties2, 0);
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### /nonUi5:
|
|
27
|
+
- access UI elements via DOM properties (id, class, li etc.)
|
|
28
|
+
|
|
29
|
+
#### /nativeBrowser:
|
|
30
|
+
- test method `controlActionInBrowser`
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
describe("webdriver.io page", function () {
|
|
3
|
+
|
|
4
|
+
this.beforeAll(async () => {
|
|
5
|
+
await browser.url("#/categories");
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
it("step 0:click on item Accessories - Use array controls", async function () {
|
|
9
|
+
const ui5ControlProperties = {
|
|
10
|
+
"elementProperties": { "metadata": "sap.m.List", "items": [{ "path": "/ProductCategories" }] },
|
|
11
|
+
"parentProperties": { "metadata": "sap.m.Page", "title": [{ "path": "i18n>homeTitle" }] }
|
|
12
|
+
};
|
|
13
|
+
const ui5ControlProperties2 = {
|
|
14
|
+
"elementProperties": {
|
|
15
|
+
"metadata": "sap.m.StandardListItem",
|
|
16
|
+
"title": [{ "path": "CategoryName" }],
|
|
17
|
+
"bindingContextPath": "/ProductCategories*"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const list = await browser.uiControl(ui5ControlProperties);
|
|
22
|
+
const allItems = await list.uiControls(ui5ControlProperties2);
|
|
23
|
+
|
|
24
|
+
expect(allItems).toBeInstanceOf(Array);
|
|
25
|
+
await expect(allItems[0]).toBeDisplayed();
|
|
26
|
+
await allItems[0].click();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("step 1:navigate back to main page", async function () {
|
|
30
|
+
const ui5ControlProperties = {
|
|
31
|
+
"elementProperties": {
|
|
32
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
33
|
+
"metadata": "sap.ui.core.Icon",
|
|
34
|
+
"id": "*page-navButton-iconBtn"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const backToListBtn = await browser.uiControl(ui5ControlProperties);
|
|
38
|
+
await expect(backToListBtn).toBeClickable();
|
|
39
|
+
await backToListBtn.click();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("step 2:click on item Accessories - Use control and index", async function () {
|
|
43
|
+
const ui5ControlProperties = {
|
|
44
|
+
"elementProperties": { "metadata": "sap.m.List", "items": [{ "path": "/ProductCategories" }] },
|
|
45
|
+
"parentProperties": { "metadata": "sap.m.Page", "title": [{ "path": "i18n>homeTitle" }] }
|
|
46
|
+
};
|
|
47
|
+
const ui5ControlProperties2 = {
|
|
48
|
+
"elementProperties": {
|
|
49
|
+
"metadata": "sap.m.StandardListItem",
|
|
50
|
+
"title": [{ "path": "CategoryName" }],
|
|
51
|
+
"bindingContextPath": "/ProductCategories*"
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const list = await browser.uiControl(ui5ControlProperties);
|
|
55
|
+
const item1 = await list.uiControl(ui5ControlProperties2, 0);
|
|
56
|
+
const item2 = await list.uiControl(ui5ControlProperties2, 1);
|
|
57
|
+
// expect(ui5ControlProperties2).toBeInstanceOf(Object); use check for item1?
|
|
58
|
+
await expect(await item1.getAttribute("id")).not.toBeNull();
|
|
59
|
+
await expect(await item2.getAttribute("id")).not.toBeNull();
|
|
60
|
+
await item2.click();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("step 3:click on item Accessories - Use control and index", async function () {
|
|
64
|
+
const ui5ControlProperties = {
|
|
65
|
+
"elementProperties": {
|
|
66
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
67
|
+
"metadata": "sap.m.Page",
|
|
68
|
+
"id": "*page"
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const ui5ControlProperties2 = {
|
|
72
|
+
"elementProperties": {
|
|
73
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
74
|
+
"metadata": "sap.m.ObjectListItem",
|
|
75
|
+
"bindingContextPath": "/Products*'HT-1114')"
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const ui5ControlProperties3 = {
|
|
79
|
+
"elementProperties": {
|
|
80
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
81
|
+
"metadata": "sap.m.Button",
|
|
82
|
+
"id": "*page-navButton"
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const productList = await browser.uiControl(ui5ControlProperties);
|
|
86
|
+
const item = await productList.uiControl(ui5ControlProperties2);
|
|
87
|
+
const backButton = await productList.uiControl(ui5ControlProperties3);
|
|
88
|
+
await expect(await item.getAttribute("id")).not.toBeNull();
|
|
89
|
+
await item.click();
|
|
90
|
+
await expect(backButton).toBeDisplayedInViewport();
|
|
91
|
+
await expect(await backButton.getAttribute("id")).not.toBeNull();
|
|
92
|
+
await backButton.click();
|
|
93
|
+
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("step 4:fill search field in Categories - Use control and index", async function () {
|
|
97
|
+
const ui5ControlProperties = {
|
|
98
|
+
"elementProperties": {
|
|
99
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
100
|
+
"metadata": "sap.m.Toolbar",
|
|
101
|
+
"id": "*searchBar33343"
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const ui5ControlProperties2 = {
|
|
105
|
+
"elementProperties": {
|
|
106
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
107
|
+
"metadata": "sap.m.SearchField",
|
|
108
|
+
"id": "*searchField"
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const list = await browser.uiControl(ui5ControlProperties);
|
|
112
|
+
const item1 = await list.uiControl(ui5ControlProperties2, 0);
|
|
113
|
+
await expect(await item1.getAttribute("id")).not.toBeNull();
|
|
114
|
+
// item1.setValue("ABCDEF"); async code without await
|
|
115
|
+
// await common.userInteraction.pressEnter(); // we cannot use reuse
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("step 5:fill wrong element and catch error - Use control and index", async function () {
|
|
119
|
+
const ui5ControlProperties = {
|
|
120
|
+
"elementProperties": {
|
|
121
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
122
|
+
"metadata": "sap.m.Toolbar",
|
|
123
|
+
"id": "*searchBar33343"
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const ui5ControlWrongProperties = {
|
|
127
|
+
"elementProperties": {
|
|
128
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
129
|
+
"metadata": ".m.SearchField",
|
|
130
|
+
"id": "*"
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
const list = await browser.uiControl(ui5ControlProperties);
|
|
134
|
+
await expect(list.uiControl(ui5ControlWrongProperties, 0))
|
|
135
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
136
|
+
});
|
|
137
|
+
});
|