@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,168 @@
|
|
|
1
|
+
# Selectors
|
|
2
|
+
To perform any action on an element (e.g. clicking a button), you need to specify the element at which the action is being executed. This differs from the web technology you are using. Read the following instructions, depending on the UI technology of the application to be tested.
|
|
3
|
+
|
|
4
|
+
## UI5
|
|
5
|
+
|
|
6
|
+
### Supported Selector Properties
|
|
7
|
+
The supported properties for any UI5 based application are the following:
|
|
8
|
+
```js
|
|
9
|
+
const selector = {
|
|
10
|
+
"elementProperties": { ... },
|
|
11
|
+
"ancestorProperties": { ... },
|
|
12
|
+
"parentProperties": { ... },
|
|
13
|
+
"siblingProperties": { ... },
|
|
14
|
+
"prevSiblingProperties": { ... },
|
|
15
|
+
"nextSiblingProperties": { ... },
|
|
16
|
+
"childProperties": { ... },
|
|
17
|
+
"descendantProperties": { ... }
|
|
18
|
+
};
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The selector consists of one **mandatory** selector called **elementProperties**, representing the target element where the action should be applied to and seven optional selectors:
|
|
22
|
+
|
|
23
|
+
- **ancestorProperties, parentProperties**: While the `parentProperties` can be used only as direct parent of the element, the `ancestorProperties` can be used for any level of ancestry (parent, grandparent, grand-grand etc.).
|
|
24
|
+
|
|
25
|
+
- **childProperties, descendantProperties** : The difference between them is, that the `childProperties` can be used only as direct child of the element, whereas the `descendantProperties` can be use for any level of descendance (child, grandson, grand-grand etc.).
|
|
26
|
+
|
|
27
|
+
- **siblingProperties, prevSiblingProperties, nextSiblingProperties**: The `siblingProperties` can be any sibling, whereas the `prevSiblingProperties` can be only the direct previous sibling and `nextSiblingProperties` can be only the direct next sibling.
|
|
28
|
+
|
|
29
|
+
You have to define at least one property in ```elementProperties```. This could be ```metadata``` or any other property of the [Overview](#Overview) below.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Sample
|
|
33
|
+
```js
|
|
34
|
+
"elementProperties":{
|
|
35
|
+
"metadata": "sap.m.Button",
|
|
36
|
+
"<ui5Property>": "*Any UI5 Property/Aggregation/Association"
|
|
37
|
+
"id": "*myId",
|
|
38
|
+
"viewName": "*myView*Name",
|
|
39
|
+
"viewId": "*id*viewId",
|
|
40
|
+
"bindingContextPath": "/ProductCategories(nodeKey=guid't12321-123213-34rer332', enabled='true', category='LT')"
|
|
41
|
+
"text": [{"path": "oDataModelName>companyChangedManually"}, {"path": "*enabled"}],
|
|
42
|
+
"tooltip": [{"path": "i18n>welcomeDescription"}]
|
|
43
|
+
"domProperties": {
|
|
44
|
+
"nodeName": "li",
|
|
45
|
+
"class": "*sapMButton"
|
|
46
|
+
"tooltip": "*text*"
|
|
47
|
+
},
|
|
48
|
+
"ancestorProperties": {
|
|
49
|
+
"metadata":"sap.m.ColumnListItem",
|
|
50
|
+
"ancestorProperties": {
|
|
51
|
+
"metadata": "sap.m.Table",
|
|
52
|
+
"items": {"path": "oDataModelName>PurchaseOrderItems"},
|
|
53
|
+
"siblingProperties": {...},
|
|
54
|
+
...
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
"descendantProperties": {"metadata":"sap.m.Icon"},
|
|
58
|
+
"siblingProperties": {"metadata":"sap.m.Input"},
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
!!! tip
|
|
62
|
+
For most of the cases it will be sufficient to provide only the elementProperties. Spotlight will generate the minimal unique selector for you.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### Overview
|
|
66
|
+
The following properties apply to all selector types (elementProperties, ancestorProperties, parentProperties, siblingProperties, prevSiblingProperties, nextSiblingProperties, childProperties, descendantProperties).
|
|
67
|
+
|
|
68
|
+
| Property | Description | Sample | Format | Remark |
|
|
69
|
+
| -------- | ----------- | -------| ------ | ------ |
|
|
70
|
+
| ``metadata`` | the control type | ``"metadata": "sap.m.Button"``, ``"metadata": "sap.m.Input"`` | string: ``"property": "value"`` | |
|
|
71
|
+
| ``<ui5Property>`` | UI5 properties including aggregations and associations, as defined in the official [UI5 API](https://sapui5.hana.ondemand.com/#/api) | ``"text": "Amount"``, ``"tooltip": "Amount"``, ``"title": "Currency"``, ``"enabled": true`` | string: ``"property": "value"``, numeric: ``"property": 123``, boolean: ``"property": true`` | |
|
|
72
|
+
| ``id`` | the ID of the control | ``"id": "myButtonId"``, ``"id": "my*Id*"`` | string: ``"property": "value"`` | |
|
|
73
|
+
| ``viewName`` | the view name | ``"viewName": "myViewName"``, ``"viewName": "*view*"``| string: ``"property": "value"`` | |
|
|
74
|
+
| ``viewId`` | the view ID | ``"viewId": "*myViewId*"`` | string: ``"property": "value"`` | |
|
|
75
|
+
| ``bindingContextPath`` | the binding context path | ``"bindingContextPath": "/odata/entity('1')"``, ``"bindingContextPath": "/odata/entity(*)*"`` | string: ``"property": "value"`` | |
|
|
76
|
+
| binding property paths | the binding property paths of the model (for all types of properties: UI properties, aggregations, associations) | ``"text":[{"path": "oDataModelName>companyChangedManually"}]``, ``"title": {"path": "oDataModelName>companyChangedTitle"}``, ``"items": {"path": "oDataModelName>PurchaseOrderItems"}``, ``"enabled": [{"path": "company*Enabled*"}]``, | json: ``"items": {"path": ...}``, array: ``"items": [{"path": ...}, {"path": ...} ...]`` | model name is optional |
|
|
77
|
+
| i18n keys | the binding properties path for i18n | ``"tooltip": [{"path": "i18n>welcomeDescription"}]``, ``"tooltip": {"path": "i18n>welcomeDescription"}``, ``"tooltip": [{"path": "*i18n*welcomeDescription"}]`` | json: ``"items": {"path": ...}``, array: ``"items": [{"path": ...}, {"path": ...} ...]`` | i18n is a model, and therefore all the above mentioned rules (as described in *binding property paths*) apply |
|
|
78
|
+
| ``domProperties`` | the properties of the DOM | ``"domProperties": {"nodeName": "div", "class": "buttonNU* class2*", "id": "my*Id*"}`` | string: ``"property": "value"``, numeric: ``"property": 123``, boolean: ``"property": true`` | can be used if the UI5 Virtual DOM is not sufficient |
|
|
79
|
+
|
|
80
|
+
!!! info
|
|
81
|
+
Wildcards are supported for all properties, aggregation and associations
|
|
82
|
+
```js
|
|
83
|
+
"text": "my*text*"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Nested Properties
|
|
87
|
+
In case you need to specify the element based on its surrounding, you can define nested properties.
|
|
88
|
+
```javascript
|
|
89
|
+
"elementProperties": {
|
|
90
|
+
...
|
|
91
|
+
"ancestorProperties": {
|
|
92
|
+
"metadata": "sap.m.ColumnListItem",
|
|
93
|
+
"ancestorProperties": {
|
|
94
|
+
"metadata": "sap.m.Table",
|
|
95
|
+
"items": { "path": "oDataModelName>PurchaseOrderItems" },
|
|
96
|
+
"siblingProperties": {...},
|
|
97
|
+
...
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
```
|
|
102
|
+
!!! info
|
|
103
|
+
Nesting is enabled infinitely for *ancestorProperties*, *siblingProperties* and *descendantProperties*. Be cautious, the more level of nesting you add the slower your script will be.
|
|
104
|
+
|
|
105
|
+
### Usage of Selectors
|
|
106
|
+
For almost every UI5 action we provide, you can pass the selector directly to the function like:
|
|
107
|
+
```javascript
|
|
108
|
+
it("Step 01: click on 'Save' button", async function () {
|
|
109
|
+
const selector = {
|
|
110
|
+
"elementProperties": {
|
|
111
|
+
"metadata": "sap.m.Button",
|
|
112
|
+
"text": "Save"
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
await ui5.userInteraction.click(selector);
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Non UI5
|
|
120
|
+
|
|
121
|
+
### Defining the element
|
|
122
|
+
For all non UI5 applications you can define the element in different ways. We provide all common functionalities to get an element by its ID, Class or any other CSS attribute. Hence, you can not pass any selector directly to the function performing an action. Instead, you have to define the element first with one of the provided methods.
|
|
123
|
+
```javascript
|
|
124
|
+
// Get an element by its ID
|
|
125
|
+
const elem = await nonUi5.element.getById("button-abc");
|
|
126
|
+
|
|
127
|
+
// Get an element by its class (pass an index if there are more than one elements with the same class)
|
|
128
|
+
const elem = await nonUi5.element.getByClass(".button", 0);
|
|
129
|
+
|
|
130
|
+
// Get an element by its attribute value of "title"
|
|
131
|
+
const elem = await nonUi5.element.getByCss("input[title='name']");
|
|
132
|
+
|
|
133
|
+
// Get an element by its class and text value
|
|
134
|
+
const elem = await nonUi5.element.getByCssContainingText(".button", "Save");
|
|
135
|
+
```
|
|
136
|
+
!!! info
|
|
137
|
+
To get a complete overview about all possible methods, please see [nonUi5.element](https://pages.github.tools.sap/sProcurement/wdio-qmate-service-ts/doc/#nonUi5.element).
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
### Getting the attributes with Spotlight
|
|
141
|
+
The [Spotlight Chrome Extension](https://github.tools.sap/sProcurement/qmate-spotlight) also supports non UI5 applications to generate unique selectors. It is possible to use one of the alternatives generated from spotlight or to define them manually.
|
|
142
|
+
|
|
143
|
+
### Getting the attributes manually
|
|
144
|
+
To get the properties of an element manually, please follow the steps below:
|
|
145
|
+
|
|
146
|
+
1. Open the dev-tools <kbd>F12</kbd> and switch to the *Elements* Tab.
|
|
147
|
+
|
|
148
|
+
2. Select the element (<kbd>right click</kbd> ➜ <kbd>inspect</kbd>)
|
|
149
|
+
|
|
150
|
+
3. Find any attribute or set of attributes to identify the element
|
|
151
|
+
clearly.
|
|
152
|
+
|
|
153
|
+
4. To verify the uniqueness of the element, switch to the *Console* tab of the dev-tools and type in the following command using your found attribute/s:
|
|
154
|
+
```bash
|
|
155
|
+
$$("[<attr>='<attrValue>']");
|
|
156
|
+
```
|
|
157
|
+
!!! warning
|
|
158
|
+
If there are more than one elements found, try to find another attribute or add some more attributes until you will find a single element (you can still pass an index to the reuse function if you are not able to find a unique selector).
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
### Usage
|
|
162
|
+
To perform the action, pass the defined element to the action function.
|
|
163
|
+
```javascript
|
|
164
|
+
it("Step 01: click on 'Save' button", async function () {
|
|
165
|
+
const elem = await nonUi5.element.getByCss(".saveButton");
|
|
166
|
+
await nonUi5.userInteraction.click(elem);
|
|
167
|
+
});
|
|
168
|
+
```
|
package/docs/index.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Qmate Service
|
|
2
|
+
**Qmate Service** is a custom [WebdriverIO](https://webdriver.io/) service built in TypeScript for testing web applications and APIs.
|
|
3
|
+
|
|
4
|
+
## Main features
|
|
5
|
+
The main features of this service are:
|
|
6
|
+
|
|
7
|
+
- [x] Supporting UI5 and OPA Selectors
|
|
8
|
+
- [x] Reuse API with useful functions for UI5 and any other type of web application
|
|
9
|
+
- [x] REST & OData API testing
|
|
10
|
+
- [x] Dynamic test data handling
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
[Reuse API](doc.md){ .md-button }
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[data-md-color-scheme="qmate-light"] {
|
|
2
|
+
--md-primary-fg-color: #2c4164;
|
|
3
|
+
--md-primary-bg-color: rgb(134, 170, 247);
|
|
4
|
+
--md-footer-bg-color: #eee;
|
|
5
|
+
--md-footer-bg-color--dark: #ddd;
|
|
6
|
+
--md-footer-fg-color: #777;
|
|
7
|
+
--md-footer-fg-color--light: #777;
|
|
8
|
+
--md-footer-fg-color--lighter: #999;
|
|
9
|
+
--md-accent-fg-color: #e4457a;
|
|
10
|
+
--md-typeset-a-color: #e4457a;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
[data-md-color-scheme="slate"] {
|
|
14
|
+
--md-primary-fg-color: rgb(134, 170, 247);
|
|
15
|
+
--md-primary-bg-color: #293851;
|
|
16
|
+
--md-footer-bg-color: #222e43;
|
|
17
|
+
--md-footer-bg-color--dark: #1c2533;
|
|
18
|
+
--md-accent-fg-color: #e4457a;
|
|
19
|
+
--md-default-bg-color: #293851;
|
|
20
|
+
--md-code-bg-color: #222e43;
|
|
21
|
+
--md-footer-fg-color--light: #576783;
|
|
22
|
+
--md-footer-fg-color--lighter: #3e4e6a;
|
|
23
|
+
}
|
|
24
|
+
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
"use strict";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const beforeSession_1 = __importDefault(require("./scripts/hooks/beforeSession"));
|
|
17
|
+
const before_1 = __importDefault(require("./scripts/hooks/before"));
|
|
18
|
+
const onPrepare_1 = __importDefault(require("./scripts/hooks/onPrepare"));
|
|
19
|
+
const onComplete_1 = __importDefault(require("./scripts/hooks/onComplete"));
|
|
20
|
+
const after_1 = __importDefault(require("./scripts/hooks/after"));
|
|
21
|
+
const pj = require("../package.json");
|
|
22
|
+
module.exports = class CustomWorkerService {
|
|
23
|
+
/**
|
|
24
|
+
* `serviceOptions` contains all options specific to the service
|
|
25
|
+
* e.g. if defined as follows:
|
|
26
|
+
*
|
|
27
|
+
* ```
|
|
28
|
+
* services: [['custom', { foo: 'bar' }]]
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* the `serviceOptions` parameter will be: `{ foo: 'bar' }`
|
|
32
|
+
*/
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
constructor(serviceOptions, capabilities, config, browser) { }
|
|
35
|
+
/**
|
|
36
|
+
* Gets executed once before all workers get launched.
|
|
37
|
+
* @param {Object} config wdio configuration object
|
|
38
|
+
* @param {Array.<Object>} capabilities list of capabilities details
|
|
39
|
+
*/
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
onPrepare(config, capabilities) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const logo = ` __
|
|
44
|
+
____ _____ ___ ____ _/ /____
|
|
45
|
+
/ __ \`/ __ \`__ \\/ __ \`/ __/ _ \\
|
|
46
|
+
/ /_/ / / / / / / /_/ / /_/ __/
|
|
47
|
+
\\__, /_/ /_/ /_/\__,_/\\__/\\___/
|
|
48
|
+
/_/ \x1b[3m service v.${pj.version}\x1b[0m
|
|
49
|
+
`;
|
|
50
|
+
console.log(logo);
|
|
51
|
+
try {
|
|
52
|
+
yield (0, onPrepare_1.default)(config, capabilities);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(`onPrepare hook failed: ${e}`);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets executed just before initializing the webdriver session and test framework. It allows you
|
|
61
|
+
* to manipulate configurations depending on the capability or spec.
|
|
62
|
+
* @param {Object} config wdio configuration object
|
|
63
|
+
* @param {Array.<Object>} capabilities list of capabilities details
|
|
64
|
+
* @param {Array.<String>} specs List of spec file paths that are to be run
|
|
65
|
+
*/
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
beforeSession(config, capabilities, specs) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
try {
|
|
70
|
+
yield (0, beforeSession_1.default)(config, capabilities, specs);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
if (specs && specs[0]) {
|
|
74
|
+
// `specs` variable is an array, but includes only one current spec
|
|
75
|
+
console.error(`qmateLoader() in 'beforeSession' hook failed for spec '${specs[0]}'. ${e}`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error(`qmateLoader() in 'beforeSession' hook failed. ${e}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets executed before test execution begins. At this point you can access to all global
|
|
85
|
+
* variables like `browser`. It is the perfect place to define custom commands.
|
|
86
|
+
* @param {Array.<Object>} capabilities list of capabilities details
|
|
87
|
+
* @param {Array.<String>} specs List of spec file paths that are to be run
|
|
88
|
+
* @param {Object} browser instance of created browser/device session
|
|
89
|
+
*/
|
|
90
|
+
// @ts-ignore
|
|
91
|
+
before(capabilities, specs, browser) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
// Errors in WDIO hooks are suppressed by default => we call process.exit(1). It will mark all specs as failed
|
|
94
|
+
try {
|
|
95
|
+
yield (0, before_1.default)(capabilities, specs, browser);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
if (specs && specs[0]) {
|
|
99
|
+
// `specs` variable is an array, but includes only one current spec
|
|
100
|
+
util.console.error(`qmateLoader() in 'before' hook failed for spec '${specs[0]}'. ${e}`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
util.console.error(`qmateLoader() in 'before' hook failed. ${e}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Gets executed before the suite starts.
|
|
110
|
+
* @param {Object} suite suite details
|
|
111
|
+
*/
|
|
112
|
+
beforeSuite(suite) {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
util.console.log(` ${suite.fullTitle} `, "black", "white");
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Function to be executed after a test (in Mocha/Jasmine)
|
|
119
|
+
*/
|
|
120
|
+
// @ts-ignore
|
|
121
|
+
afterTest(test, context, { error, result, duration, passed, retries }) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
// test.title - for mocha framework
|
|
124
|
+
// test.description - for jasmine framework
|
|
125
|
+
const testName = test.title || test.description;
|
|
126
|
+
// Print test titles as in vyperForAll during test run
|
|
127
|
+
if (!error && passed === true) {
|
|
128
|
+
util.console.info(`\x1b[32m\t✓ ${testName}\x1b[0m (${Math.round(duration / 1000)}s)`);
|
|
129
|
+
}
|
|
130
|
+
else if (error || passed !== true) {
|
|
131
|
+
util.console.error(`\x1b[31m\t✗ ${testName}\x1b[0m (${Math.round(duration / 1000)}s)`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Gets executed after all tests are done. You still have access to all global variables from
|
|
137
|
+
* the test.
|
|
138
|
+
* @param {Number} result 0 - test pass, 1 - test fail
|
|
139
|
+
* @param {Array.<Object>} capabilities list of capabilities details
|
|
140
|
+
* @param {Array.<String>} specs List of spec file paths that ran
|
|
141
|
+
*/
|
|
142
|
+
after(result, capabilities, specs) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
try {
|
|
145
|
+
(0, after_1.default)(result, capabilities, specs);
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
util.console.error(`after hook failed: ${e}`);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Gets executed after all workers have shut down and the process is about to exit.
|
|
154
|
+
* An error thrown in the `onComplete` hook will result in the test run failing.
|
|
155
|
+
* @param {Object} exitCode 0 - success, 1 - fail
|
|
156
|
+
* @param {Object} config wdio configuration object
|
|
157
|
+
* @param {Array.<Object>} capabilities list of capabilities details
|
|
158
|
+
* @param {<Object>} results object containing test results
|
|
159
|
+
*/
|
|
160
|
+
onComplete(exitCode, config, capabilities, results) {
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
try {
|
|
163
|
+
yield (0, onComplete_1.default)(exitCode, config, capabilities, results);
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
util.console.error(`onComplete hook failed: ${e}`);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,YAAY,CAAC;;;;;;;;;;;;;;AAEb,kFAA+D;AAC/D,oEAAiD;AACjD,0EAAsD;AACtD,4EAAwD;AACxD,kEAA8C;AAC9C,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEtC,MAAM,CAAC,OAAO,GAAG,MAAM,mBAAmB;IACxC;;;;;;;;;OASG;IACH,aAAa;IACb,YAAY,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC;IAE9D;;;;OAIG;IACH,aAAa;IACP,SAAS,CAAC,MAAM,EAAE,YAAY;;YAClC,MAAM,IAAI,GAAG;;;;;4BAKW,EAAE,CAAC,OAAO;OAC/B,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI;gBACF,MAAM,IAAA,mBAAa,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;aAC3C;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;aAC9C;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACH,aAAa;IACP,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK;;YAC7C,IAAI;gBACF,MAAM,IAAA,uBAAkB,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;aACvD;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACrB,mEAAmE;oBACnE,OAAO,CAAC,KAAK,CAAC,0DAA0D,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBAC5F;qBAAM;oBACL,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC;iBACrE;aACF;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACH,aAAa;IACP,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO;;YACvC,8GAA8G;YAC9G,IAAI;gBACF,MAAM,IAAA,gBAAW,EAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;aACjD;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACrB,mEAAmE;oBACnE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mDAAmD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;iBAC1F;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC;iBACnE;aACF;QACH,CAAC;KAAA;IAED;;;OAGG;IACG,WAAW,CAAC,KAAU;;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;KAAA;IAED;;OAEG;IACH,aAAa;IACP,SAAS,CAAC,IAAS,EAAE,OAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;;YACnF,mCAAmC;YACnC,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC;YAChD,sDAAsD;YACtD,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,QAAQ,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACxF;iBAAM,IAAI,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE;gBACnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;aACzF;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACG,KAAK,CAAC,MAAc,EAAE,YAAiB,EAAE,KAAU;;YACvD,IAAI;gBACF,IAAA,eAAS,EAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;aACxC;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;aAC/C;QACH,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,UAAU,CAAC,QAAgB,EAAE,MAAW,EAAE,YAAiB,EAAE,OAAY;;YAC7E,IAAI;gBACF,MAAM,IAAA,oBAAc,EAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;aAC/D;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;aACpD;QACH,CAAC;KAAA;CACF,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
declare const _exports: {
|
|
2
|
+
plain: {
|
|
3
|
+
name: string;
|
|
4
|
+
};
|
|
5
|
+
basic: {
|
|
6
|
+
name: string;
|
|
7
|
+
};
|
|
8
|
+
custom: {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
"fiori-form": {
|
|
12
|
+
name: string;
|
|
13
|
+
usernameFieldSelector: string;
|
|
14
|
+
passwordFieldSelector: string;
|
|
15
|
+
logonButtonSelector: string;
|
|
16
|
+
};
|
|
17
|
+
"fiori-form-new": {
|
|
18
|
+
name: string;
|
|
19
|
+
usernameFieldSelector: string;
|
|
20
|
+
passwordFieldSelector: string;
|
|
21
|
+
logonButtonSelector: string;
|
|
22
|
+
};
|
|
23
|
+
"sapcloud-form": {
|
|
24
|
+
name: string;
|
|
25
|
+
usernameFieldSelector: string;
|
|
26
|
+
passwordFieldSelector: string;
|
|
27
|
+
logonButtonSelector: string;
|
|
28
|
+
};
|
|
29
|
+
"XSA-form": {
|
|
30
|
+
name: string;
|
|
31
|
+
usernameFieldSelector: string;
|
|
32
|
+
passwordFieldSelector: string;
|
|
33
|
+
logonButtonSelector: string;
|
|
34
|
+
};
|
|
35
|
+
"POT-form": {
|
|
36
|
+
name: string;
|
|
37
|
+
usernameFieldSelector: string;
|
|
38
|
+
passwordFieldSelector: string;
|
|
39
|
+
logonButtonSelector: string;
|
|
40
|
+
};
|
|
41
|
+
"MIA-form": {
|
|
42
|
+
name: string;
|
|
43
|
+
usernameFieldSelector: string;
|
|
44
|
+
passwordFieldSelector: string;
|
|
45
|
+
logonButtonSelector: string;
|
|
46
|
+
};
|
|
47
|
+
"UI5-Form": {
|
|
48
|
+
name: string;
|
|
49
|
+
usernameFieldSelector: string;
|
|
50
|
+
passwordFieldSelector: string;
|
|
51
|
+
logonButtonSelector: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export = _exports;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
3
|
+
"plain": {
|
|
4
|
+
name: "./plainAuthenticator"
|
|
5
|
+
},
|
|
6
|
+
"basic": {
|
|
7
|
+
name: "./basicUrlAuthenticator"
|
|
8
|
+
},
|
|
9
|
+
"custom": {
|
|
10
|
+
name: "./customAuthenticator"
|
|
11
|
+
},
|
|
12
|
+
"fiori-form": {
|
|
13
|
+
name: "./formAuthenticator",
|
|
14
|
+
usernameFieldSelector: "#USERNAME_BLOCK input",
|
|
15
|
+
passwordFieldSelector: "#PASSWORD_BLOCK input",
|
|
16
|
+
logonButtonSelector: "#LOGIN_LINK"
|
|
17
|
+
},
|
|
18
|
+
"fiori-form-new": {
|
|
19
|
+
name: "./formAuthenticator",
|
|
20
|
+
usernameFieldSelector: "#USERNAME_BLOCK input",
|
|
21
|
+
passwordFieldSelector: "#PASSWORD_BLOCK input",
|
|
22
|
+
logonButtonSelector: "#LOGIN_LINK"
|
|
23
|
+
},
|
|
24
|
+
"sapcloud-form": {
|
|
25
|
+
name: "./formAuthenticator",
|
|
26
|
+
usernameFieldSelector: "#j_username",
|
|
27
|
+
passwordFieldSelector: "#j_password",
|
|
28
|
+
logonButtonSelector: "#logOnFormSubmit"
|
|
29
|
+
},
|
|
30
|
+
"XSA-form": {
|
|
31
|
+
name: "./formAuthenticator",
|
|
32
|
+
usernameFieldSelector: "#xs_username-inner",
|
|
33
|
+
passwordFieldSelector: "#xs_password-inner",
|
|
34
|
+
logonButtonSelector: "#logon_button"
|
|
35
|
+
},
|
|
36
|
+
"POT-form": {
|
|
37
|
+
name: "./formAuthenticator",
|
|
38
|
+
usernameFieldSelector: "#__screen0-user",
|
|
39
|
+
passwordFieldSelector: "#__screen0-pass",
|
|
40
|
+
logonButtonSelector: "#__screen0-loginBtn"
|
|
41
|
+
},
|
|
42
|
+
"MIA-form": {
|
|
43
|
+
name: "./formAuthenticator",
|
|
44
|
+
usernameFieldSelector: "#logonuidfield",
|
|
45
|
+
passwordFieldSelector: "#logonpassfield",
|
|
46
|
+
logonButtonSelector: ".urBtnStdNew"
|
|
47
|
+
},
|
|
48
|
+
"UI5-Form": {
|
|
49
|
+
name: "./formAuthenticator",
|
|
50
|
+
usernameFieldSelector: "#__control0-user-inner",
|
|
51
|
+
passwordFieldSelector: "#__control0-pass-inner",
|
|
52
|
+
logonButtonSelector: "#__control0-logonBtn"
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=authConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authConfig.js","sourceRoot":"","sources":["../../../src/reuse/authenticator/authConfig.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,EAAE;QACP,IAAI,EAAE,sBAAsB;KAC7B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,yBAAyB;KAChC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,uBAAuB;KAC9B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,uBAAuB;QAC9C,qBAAqB,EAAE,uBAAuB;QAC9C,mBAAmB,EAAE,aAAa;KACnC;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,uBAAuB;QAC9C,qBAAqB,EAAE,uBAAuB;QAC9C,mBAAmB,EAAE,aAAa;KACnC;IACD,eAAe,EAAE;QACf,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,aAAa;QACpC,qBAAqB,EAAE,aAAa;QACpC,mBAAmB,EAAE,kBAAkB;KACxC;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,oBAAoB;QAC3C,qBAAqB,EAAE,oBAAoB;QAC3C,mBAAmB,EAAE,eAAe;KACrC;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB;QACxC,qBAAqB,EAAE,iBAAiB;QACxC,mBAAmB,EAAE,qBAAqB;KAC3C;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,gBAAgB;QACvC,qBAAqB,EAAE,iBAAiB;QACxC,mBAAmB,EAAE,cAAc;KACpC;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,qBAAqB,EAAE,wBAAwB;QAC/C,qBAAqB,EAAE,wBAAwB;QAC/C,mBAAmB,EAAE,sBAAsB;KAC5C;CACF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
class AuthHandler {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.path = require("path");
|
|
15
|
+
}
|
|
16
|
+
attachAuthHandling() {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const authConfig = require("./authConfig.js");
|
|
19
|
+
if (browser.config.params && browser.config.params.auth) {
|
|
20
|
+
const formType = browser.config.params.auth.formType;
|
|
21
|
+
if (formType && formType !== "skip") {
|
|
22
|
+
if (!authConfig[formType] || !authConfig[formType].name || !this.path.resolve(authConfig[formType].name)) {
|
|
23
|
+
throw new Error(`Please provide a valid 'formType' instead of '${formType}'.`);
|
|
24
|
+
}
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.log(this.path.resolve(authConfig[formType].name));
|
|
27
|
+
const execAuthenticator = require(authConfig[formType].name);
|
|
28
|
+
yield execAuthenticator();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
;
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
exports.default = new AuthHandler();
|
|
37
|
+
//# sourceMappingURL=authHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authHandler.js","sourceRoot":"","sources":["../../../src/reuse/authenticator/authHandler.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,MAAM,WAAW;IAAjB;QAEU,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAmBjC,CAAC;IAjBO,kBAAkB;;YACtB,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAE9C,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;gBACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACrD,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE;oBACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE;wBACxG,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,IAAI,CAAC,CAAC;qBAChF;oBACD,sCAAsC;oBACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1D,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC7D,MAAM,iBAAiB,EAAE,CAAC;iBAC3B;aACF;QACH,CAAC;KAAA;IAAA,CAAC;CAEH;AAAA,CAAC;AACF,kBAAe,IAAI,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
function BasicUrlAuthenticator() {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
const username = browser.config.params ? browser.config.params.auth.username : undefined;
|
|
14
|
+
if (!username) {
|
|
15
|
+
throw new Error("Please provide a 'username' in the config.");
|
|
16
|
+
}
|
|
17
|
+
const password = browser.config.params ? browser.config.params.auth.password : undefined;
|
|
18
|
+
if (!password) {
|
|
19
|
+
throw new Error("Please provide a 'password' in the config.");
|
|
20
|
+
}
|
|
21
|
+
const url = browser.config.baseUrl;
|
|
22
|
+
if (!url) {
|
|
23
|
+
throw new Error("Please provide a 'baseUrl' in the config.");
|
|
24
|
+
}
|
|
25
|
+
// prepare basic auth url
|
|
26
|
+
const urlMatches = url.match(/(\w*\:?\/\/)(.+)/);
|
|
27
|
+
if (urlMatches === null) {
|
|
28
|
+
throw new Error(`Could not parse url: ${url}.`);
|
|
29
|
+
}
|
|
30
|
+
const urlWithAuth = urlMatches[1] + username + ":" + password + "@" + urlMatches[2];
|
|
31
|
+
// get the url
|
|
32
|
+
yield browser.url(urlWithAuth);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
module.exports = BasicUrlAuthenticator;
|
|
36
|
+
//# sourceMappingURL=basicUrlAuthenticator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basicUrlAuthenticator.js","sourceRoot":"","sources":["../../../src/reuse/authenticator/basicUrlAuthenticator.js"],"names":[],"mappings":";;;;;;;;;;AAAA,SAAe,qBAAqB;;QAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAC9D;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,CAAC;SACjD;QACD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEpF,cAAc;QACd,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;CAAA;AACD,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC"}
|