@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,31 @@
|
|
|
1
|
+
var path = require("path");
|
|
2
|
+
var merge = require("deepmerge");
|
|
3
|
+
var profile = require("../../../helper/configurations/chrome.headless.conf.js");
|
|
4
|
+
|
|
5
|
+
exports.config = merge(profile.config, {
|
|
6
|
+
maxInstances: 6,
|
|
7
|
+
bail: 1,
|
|
8
|
+
|
|
9
|
+
//
|
|
10
|
+
// ==================
|
|
11
|
+
// Specify Test Files
|
|
12
|
+
// ==================
|
|
13
|
+
// Define which test specs should run. The pattern is relative to the directory
|
|
14
|
+
// from which `wdio` was called. Notice that, if you are calling `wdio` from an
|
|
15
|
+
// NPM script (see https://docs.npmjs.com/cli/run-script) then the current working
|
|
16
|
+
// directory is where your package.json resides, so `wdio` will be called from there.
|
|
17
|
+
//
|
|
18
|
+
specs: [
|
|
19
|
+
path.resolve(__dirname, "chaining.test.js")
|
|
20
|
+
],
|
|
21
|
+
// Patterns to exclude.
|
|
22
|
+
exclude: [
|
|
23
|
+
// 'path/to/excluded/files'
|
|
24
|
+
],
|
|
25
|
+
//
|
|
26
|
+
// Set a base URL in order to shorten url command calls. If your `url` parameter starts
|
|
27
|
+
// with `/`, the base url gets prepended, not including the path portion of your baseUrl.
|
|
28
|
+
// If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url
|
|
29
|
+
// gets prepended directly.
|
|
30
|
+
baseUrl: "https://sapui5.hana.ondemand.com/1.99.0/test-resources/sap/m/demokit/cart/webapp/index.html"
|
|
31
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const { handleCookiesConsent } = require("../../../helper/utils");
|
|
3
|
+
|
|
4
|
+
describe("webdriver.io page locator test", function () {
|
|
5
|
+
it("should access same element by elementProperties, ancestorProperties and nested ancestorProperties", async function () {
|
|
6
|
+
await browser.navigateTo(
|
|
7
|
+
"https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button"
|
|
8
|
+
);
|
|
9
|
+
await handleCookiesConsent();
|
|
10
|
+
|
|
11
|
+
const rejectButtonProperties = {
|
|
12
|
+
"elementProperties": {
|
|
13
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
14
|
+
"metadata": "sap.m.Button",
|
|
15
|
+
"text": "Reject"
|
|
16
|
+
},
|
|
17
|
+
"ancestorProperties": {
|
|
18
|
+
"metadata": "sap.m.FlexItemData",
|
|
19
|
+
"viewName": "sap.m.sample.Button.Page"
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const rejectButton = await browser.uiControl(rejectButtonProperties);
|
|
23
|
+
|
|
24
|
+
await expect(rejectButton).toBeDisplayedInViewport();
|
|
25
|
+
await expect(rejectButton).toBeClickable();
|
|
26
|
+
|
|
27
|
+
// Use nested ancestorProperties
|
|
28
|
+
const rejectButtonWithNestedAncestorProperties = {
|
|
29
|
+
"elementProperties": {
|
|
30
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
31
|
+
"metadata": "sap.m.Button",
|
|
32
|
+
"text": "Reject",
|
|
33
|
+
"ancestorProperties": {
|
|
34
|
+
"metadata": "sap.m.FlexItemData",
|
|
35
|
+
"viewName": "sap.m.sample.Button.Page"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const sameRejectButton = await browser.uiControl(
|
|
41
|
+
rejectButtonWithNestedAncestorProperties
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
await expect(sameRejectButton).toBeDisplayedInViewport();
|
|
45
|
+
await expect(sameRejectButton).toBeClickable();
|
|
46
|
+
|
|
47
|
+
// Compare property id to check that it is the same element
|
|
48
|
+
const rejectButtonId = await rejectButton.getProperty("id");
|
|
49
|
+
await expect(sameRejectButton.getProperty("id")).resolves.toEqual(rejectButtonId);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should access element(s) by ancestor properties and index", async function () {
|
|
53
|
+
await browser.navigateTo("https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button");
|
|
54
|
+
await handleCookiesConsent();
|
|
55
|
+
|
|
56
|
+
const defaultButtonsProperties = {
|
|
57
|
+
"elementProperties": {
|
|
58
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
59
|
+
"metadata": "sap.m.Button",
|
|
60
|
+
"text": "Default"
|
|
61
|
+
},
|
|
62
|
+
"ancestorProperties": {
|
|
63
|
+
"metadata": "sap.m.Toolbar",
|
|
64
|
+
"viewName": "sap.m.sample.Button.Page"
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const buttons = await browser.uiControls(defaultButtonsProperties);
|
|
69
|
+
expect(buttons.length).toBeGreaterThanOrEqual(2);
|
|
70
|
+
|
|
71
|
+
const firstButtonWithoutIndex = await browser.uiControl(defaultButtonsProperties);
|
|
72
|
+
const firstButton = await browser.uiControl(defaultButtonsProperties, 0);
|
|
73
|
+
const firstButtonId = await firstButton.getProperty("id");
|
|
74
|
+
|
|
75
|
+
// Compare Ids to check that these elements are the same element (with 0-index and without index)
|
|
76
|
+
await expect(firstButtonWithoutIndex.getProperty("id")).resolves.toEqual(firstButtonId);
|
|
77
|
+
|
|
78
|
+
const secondButton = await browser.uiControl(defaultButtonsProperties, 1);
|
|
79
|
+
|
|
80
|
+
// Compare Ids to check that these are two different buttons
|
|
81
|
+
await expect(secondButton.getProperty("id")).resolves.not.toEqual(firstButtonId);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("should try access element only by ancestor properties and fail (unhappy case)", async function () {
|
|
85
|
+
await browser.navigateTo(
|
|
86
|
+
"https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button");
|
|
87
|
+
await handleCookiesConsent();
|
|
88
|
+
|
|
89
|
+
const wrongSelectorWithoutElementProperties = {
|
|
90
|
+
"ancestorProperties": {
|
|
91
|
+
"metadata": "sap.tnt.NavigationList",
|
|
92
|
+
"viewName": "sap.tnt.sample.SideNavigation.V",
|
|
93
|
+
"selectedKey": "subItem_non"
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
await expect(browser.uiControl(wrongSelectorWithoutElementProperties))
|
|
97
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const { handleCookiesConsent } = require("../../../helper/utils");
|
|
3
|
+
|
|
4
|
+
describe("webdriver.io page locator test", function () {
|
|
5
|
+
|
|
6
|
+
this.beforeAll(async () => {
|
|
7
|
+
await browser.navigateTo("https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button");
|
|
8
|
+
await handleCookiesConsent();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("should access element by elementProperties, childProperties and inner childProperties", async function () {
|
|
12
|
+
const backButtonProperties = {
|
|
13
|
+
"elementProperties": {
|
|
14
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
15
|
+
"metadata": "sap.m.Button",
|
|
16
|
+
"type": "Back"
|
|
17
|
+
},
|
|
18
|
+
"childProperties": {
|
|
19
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
20
|
+
"metadata": "sap.ui.core.Icon",
|
|
21
|
+
"src": "sap-icon://nav-back"
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const backButton = await browser.uiControl(backButtonProperties);
|
|
25
|
+
await expect(backButton).toBeDisplayed();
|
|
26
|
+
await expect(backButton).toBeClickable();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("should access element only by child properties and fail (unhappy case)", async function () {
|
|
30
|
+
const wrongSelectorWithoutElementProperties = {
|
|
31
|
+
"childProperties": {
|
|
32
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
33
|
+
"metadata": "sap.ui.core.Icon",
|
|
34
|
+
"src": "sap-icon://nav-back"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
await expect(browser.uiControl(wrongSelectorWithoutElementProperties))
|
|
38
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const { handleCookiesConsent } = require("../../../helper/utils");
|
|
3
|
+
|
|
4
|
+
describe("webdriver.io page locator test", function () {
|
|
5
|
+
|
|
6
|
+
it("should access element by elementProperties, descendantProperties and inner descendantProperties", async function () {
|
|
7
|
+
await browser.navigateTo("https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button");
|
|
8
|
+
await handleCookiesConsent();
|
|
9
|
+
|
|
10
|
+
const backButtonProperties = {
|
|
11
|
+
"elementProperties": {
|
|
12
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
13
|
+
"metadata": "sap.m.Button",
|
|
14
|
+
"type": "Back"
|
|
15
|
+
},
|
|
16
|
+
"descendantProperties": {
|
|
17
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
18
|
+
"metadata": "sap.ui.core.Icon",
|
|
19
|
+
"src": "sap-icon://nav-back"
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const backButton = await browser.uiControl(backButtonProperties);
|
|
24
|
+
await expect(backButton).toBeDisplayed();
|
|
25
|
+
await expect(backButton).toBeClickable();
|
|
26
|
+
|
|
27
|
+
// Use nested ancestorProperties
|
|
28
|
+
const backButtonWithNestedDescendantProperties = {
|
|
29
|
+
"elementProperties": {
|
|
30
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
31
|
+
"metadata": "sap.m.Button",
|
|
32
|
+
"type": "Back",
|
|
33
|
+
"descendantProperties": {
|
|
34
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
35
|
+
"metadata": "sap.ui.core.Icon",
|
|
36
|
+
"src": "sap-icon://nav-back"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const sameBackButton = await browser.uiControl(backButtonWithNestedDescendantProperties);
|
|
42
|
+
await expect(sameBackButton).toBeDisplayed();
|
|
43
|
+
await expect(sameBackButton).toBeClickable();
|
|
44
|
+
|
|
45
|
+
// Compare IDs to be sure that both elements are the same reject button;
|
|
46
|
+
const backButtonId = await backButton.getProperty("id");
|
|
47
|
+
const sameBackButtonId = await sameBackButton.getProperty("id");
|
|
48
|
+
|
|
49
|
+
expect(backButtonId).toEqual(sameBackButtonId);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should access element(s) by descendantProperties", async function () {
|
|
53
|
+
await browser.url("#/categories");
|
|
54
|
+
const ui5ControlProperties = {
|
|
55
|
+
"descendantProperties": {
|
|
56
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
57
|
+
"metadata": "sap.m.List",
|
|
58
|
+
"id": "*categoryList"
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Code before fixes:
|
|
63
|
+
// const elems = await browser.uiControls(ui5ControlProperties);
|
|
64
|
+
// expect(elems).toBeInstanceOf(Array);
|
|
65
|
+
// expect(elems).toBeElementsArrayOfSize({ gte: 1 });
|
|
66
|
+
|
|
67
|
+
// Code after fixes:
|
|
68
|
+
await expect(browser.uiControls(ui5ControlProperties, 1, 1000))
|
|
69
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("should access element by element properties and descendant properties", async function () {
|
|
73
|
+
await browser.navigateTo("https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button");
|
|
74
|
+
await handleCookiesConsent();
|
|
75
|
+
|
|
76
|
+
const ui5ControlProperties = {
|
|
77
|
+
"elementProperties": {
|
|
78
|
+
"metadata": "sap.m.FlexItemData",
|
|
79
|
+
"viewName": "sap.m.sample.Button.Page"
|
|
80
|
+
},
|
|
81
|
+
"descendantProperties": {
|
|
82
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
83
|
+
"metadata": "sap.m.Button",
|
|
84
|
+
"text": "Default"
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const elem = await browser.uiControl(ui5ControlProperties);
|
|
88
|
+
|
|
89
|
+
await expect(elem).toBeDisplayedInViewport();
|
|
90
|
+
expect(elem).toBeInstanceOf(Object);
|
|
91
|
+
expect(elem).toHaveAttribute("elementId");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("try access element by wrong descendant properties and catch error", async function () {
|
|
95
|
+
await browser.url("#/categories");
|
|
96
|
+
const wrongProperties = {
|
|
97
|
+
"descendantProperties": {
|
|
98
|
+
"viewName": "sapcart.view.App",
|
|
99
|
+
"metadata": "sap.ui.core.mvc.XMLView",
|
|
100
|
+
"displayBlock": "true"
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
await expect(browser.uiControl(wrongProperties, 1, 1000))
|
|
104
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* eslint-disable no-unused-expressions */
|
|
2
|
+
describe("webdriver.io page locator test", function () {
|
|
3
|
+
|
|
4
|
+
this.beforeAll(async () => {
|
|
5
|
+
await browser.url("#/categories");
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
it("should access element by elementProperties and inner domProperties", async function () {
|
|
9
|
+
const ui5ControlDomProperties = {
|
|
10
|
+
"elementProperties": {
|
|
11
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
12
|
+
"metadata": "sap.m.StandardListItem",
|
|
13
|
+
"bindingContextPath": "/ProductCategories*'AC')"
|
|
14
|
+
},
|
|
15
|
+
"domProperties": {
|
|
16
|
+
"nodeName": "li",
|
|
17
|
+
"class": "sapMLIB sapMLIB-CTX sapMLIBShowSeparator sapMLIBTypeActive sapMLIBActionable sapMLIBFocusable sapMSLI sapMLIBHoverable",
|
|
18
|
+
"id": "__item1-container-cart---homeView--categoryList-0",
|
|
19
|
+
"title": "Open category Accessories"
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const elem = await browser.uiControl(ui5ControlDomProperties);
|
|
24
|
+
await expect(elem).toBeDisplayed();
|
|
25
|
+
await expect(elem).toBeClickable();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("should access element only by domProperties (unhappy case)", async function () {
|
|
29
|
+
const selectorWithoutElementProperties = {
|
|
30
|
+
"domProperties": {
|
|
31
|
+
"nodeName": "li",
|
|
32
|
+
"class": "sapMLIB sapMLIB-CTX sapMLIBShowSeparator sapMLIBTypeActive sapMLIBActionable sapMLIBFocusable sapMSLI sapMLIBHoverable",
|
|
33
|
+
"id": "__item1-container-cart---homeView--categoryList-0",
|
|
34
|
+
"title": "Open category Accessories"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
await expect(browser.uiControl(selectorWithoutElementProperties))
|
|
39
|
+
.rejects.toThrow(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("try access element by element properties, wrong dom properties and catch error", async function () {
|
|
43
|
+
const wrongProperties = {
|
|
44
|
+
"elementProperties": {
|
|
45
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
46
|
+
"metadata": "sap.m.StandardListItem",
|
|
47
|
+
"bindingContextPath": "/ProductCategories*'AC')",
|
|
48
|
+
"domProperties": {
|
|
49
|
+
"nodeName": "div",
|
|
50
|
+
"class": "sapMLIB sapMLIB-CTX sapMLIBShowSeparator sapMLIBTypeActive sapMLIBActionable sapMLIBFocusable sapMSLI sapMLIBHoverable",
|
|
51
|
+
"id": "__item1-container-cart---homeView--categoryList-0",
|
|
52
|
+
"title": "Open category Accessories"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
await expect(browser.uiControl(wrongProperties))
|
|
57
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
});
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/* eslint-disable no-unused-expressions */
|
|
2
|
+
const { checkIfAnElementIsUnique } = require("./utils");
|
|
3
|
+
|
|
4
|
+
describe("webdriver.io access to element via elementProperties test", function () {
|
|
5
|
+
this.beforeAll(async () => {
|
|
6
|
+
await browser.url("#/categories");
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it("should access element by id", async function () {
|
|
10
|
+
const categoryListElementProperties = {
|
|
11
|
+
"elementProperties": {
|
|
12
|
+
"id": "*categoryList-0"
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const categoryListElement = await browser.uiControl(categoryListElementProperties, 0, 60000);
|
|
16
|
+
const categoryListElements = await browser.uiControls(categoryListElementProperties, 60000);
|
|
17
|
+
|
|
18
|
+
expect(categoryListElements.length).toBe(1);
|
|
19
|
+
await expect(categoryListElement).toBeDisplayedInViewport();
|
|
20
|
+
await expect(categoryListElement).toBeClickable();
|
|
21
|
+
|
|
22
|
+
await expect(categoryListElements[0]).toBeDisplayedInViewport();
|
|
23
|
+
await expect(categoryListElements[0]).toBeClickable();
|
|
24
|
+
|
|
25
|
+
checkIfAnElementIsUnique(categoryListElement, categoryListElements);
|
|
26
|
+
|
|
27
|
+
// Text include count of products too, so we need to use Match
|
|
28
|
+
await expect(categoryListElement.getText()).resolves.toMatch(/Accessories/);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("should access element by binding context", async function () {
|
|
32
|
+
const ui5ControlProperties = {
|
|
33
|
+
"elementProperties": {
|
|
34
|
+
"bindingContextPath": "/ProductCategories('AC')"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const categoryListElement = await browser.uiControl(ui5ControlProperties, 0, 60000);
|
|
38
|
+
const categoryListElements = await browser.uiControls(ui5ControlProperties, 60000);
|
|
39
|
+
|
|
40
|
+
expect(categoryListElements.length).toBe(1);
|
|
41
|
+
await expect(categoryListElement).toBeDisplayedInViewport();
|
|
42
|
+
await expect(categoryListElement).toBeClickable();
|
|
43
|
+
|
|
44
|
+
checkIfAnElementIsUnique(categoryListElement, categoryListElements);
|
|
45
|
+
|
|
46
|
+
// Text include count of products too, so we need to use Match
|
|
47
|
+
await expect(categoryListElement.getText()).resolves.toMatch(/Accessories/);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("should access element by viewName, metadata, bindingContextPath, text->path and fail to click non-clickable element", async function () {
|
|
51
|
+
const ui5ControlProperties = {
|
|
52
|
+
"elementProperties": {
|
|
53
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
54
|
+
"metadata": "sap.m.StandardListItem",
|
|
55
|
+
"bindingContextPath": "/ProductCategories*'DC')"
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const element = await browser.uiControl(ui5ControlProperties, 0, 60000);
|
|
59
|
+
await expect(element.getText()).resolves.toMatch(/Desktop Computers/);
|
|
60
|
+
|
|
61
|
+
// Navigate to products to have access to a Product 'Compare' link
|
|
62
|
+
await element.click();
|
|
63
|
+
|
|
64
|
+
const compareLinkProperties = {
|
|
65
|
+
"elementProperties": {
|
|
66
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
67
|
+
"metadata": "sap.m.ObjectAttribute",
|
|
68
|
+
"bindingContextPath": "/Products*'HT-1600')",
|
|
69
|
+
"text": [{
|
|
70
|
+
"path": "i18n>CompareWith"
|
|
71
|
+
}]
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const link = await browser.uiControl(compareLinkProperties, 0, 60000);
|
|
75
|
+
const links = await browser.uiControls(compareLinkProperties, 60000);
|
|
76
|
+
await expect(link.getText()).resolves.toEqual("Compare");
|
|
77
|
+
await expect(link).toBeDisplayedInViewport();
|
|
78
|
+
await expect(link).not.toBeClickable();
|
|
79
|
+
|
|
80
|
+
checkIfAnElementIsUnique(link, links);
|
|
81
|
+
|
|
82
|
+
await expect(link.click()).rejects.toThrowError(/is not clickable at point/);
|
|
83
|
+
|
|
84
|
+
// Check that without text->path cannot get unique element: without 'text->path' we can access to a link and a Product (2 elements)
|
|
85
|
+
const productLinksProperties = {
|
|
86
|
+
"elementProperties": {
|
|
87
|
+
"viewName": "sap.ui.demo.cart.view.Category",
|
|
88
|
+
"metadata": "sap.m.ObjectAttribute",
|
|
89
|
+
"bindingContextPath": "/Products*'HT-1600')"
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const productLinks = await browser.uiControls(productLinksProperties, 60000);
|
|
94
|
+
expect(productLinks.length).toBeGreaterThanOrEqual(2);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("should fail because element is not available: timeout error", async function () {
|
|
98
|
+
// Try to access 'Add to Cart' button, which is not available at the screen
|
|
99
|
+
const nonAvailableButtonProperties = {
|
|
100
|
+
"elementProperties": {
|
|
101
|
+
"viewName": "sap.ui.demo.cart.view.Product",
|
|
102
|
+
"metadata": "sap.m.Button",
|
|
103
|
+
"text": [{
|
|
104
|
+
"path": "i18n>addToCartShort"
|
|
105
|
+
}]
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
await expect(browser.uiControl(nonAvailableButtonProperties, 0, 60000))
|
|
110
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
describe("Test for mixed properties (elementProperties, ancestorProperties, siblingProperties and descendantProperties)", function () {
|
|
2
|
+
this.beforeAll(async () => {
|
|
3
|
+
await browser.url("#/categories");
|
|
4
|
+
});
|
|
5
|
+
|
|
6
|
+
it("'happy case': should access element by nested elementProperties, ancestorProperties, siblingProperties, descendantProperties and domProperties", async () => {
|
|
7
|
+
const selector = {
|
|
8
|
+
"elementProperties": {
|
|
9
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
10
|
+
"metadata": "sap.m.Bar",
|
|
11
|
+
"id": "*page-intHeader",
|
|
12
|
+
"siblingProperties": {
|
|
13
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
14
|
+
"metadata": "sap.m.Toolbar",
|
|
15
|
+
"id": "*searchBar33343",
|
|
16
|
+
"domProperties": {
|
|
17
|
+
"nodeName": "div",
|
|
18
|
+
"class": "sapMIBar sapMTB sapMTBNewFlex sapMTBInactive sapMTBStandard sapMTB-Auto-CTX sapMIBar-CTX sapMSubHeader-CTX sapContrastPlus",
|
|
19
|
+
"id": "container-cart---homeView--searchBar33343"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"ancestorProperties": {
|
|
23
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
24
|
+
"metadata": "sap.m.Page",
|
|
25
|
+
"id": "*page",
|
|
26
|
+
"ancestorProperties": {
|
|
27
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
28
|
+
"metadata": "sap.ui.core.mvc.XMLView",
|
|
29
|
+
"descendantProperties": {
|
|
30
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
31
|
+
"metadata": "sap.m.Page",
|
|
32
|
+
"id": "*page"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
await expect(browser.uiControl(selector)).toBeClickable();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("'unhappy case': should access element by nested elementProperties, ancestorProperties, siblingProperties, domProperties and wrong descendantProperties", async () => {
|
|
43
|
+
const selector = {
|
|
44
|
+
"elementProperties": {
|
|
45
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
46
|
+
"metadata": "sap.m.Bar",
|
|
47
|
+
"id": "*page-intHeader",
|
|
48
|
+
"siblingProperties": {
|
|
49
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
50
|
+
"metadata": "sap.m.Toolbar",
|
|
51
|
+
"id": "*searchBar33343",
|
|
52
|
+
"domProperties": {
|
|
53
|
+
"nodeName": "div",
|
|
54
|
+
"class": "sapMIBar sapMTB sapMTBNewFlex sapMTBInactive sapMTBStandard sapMTB-Auto-CTX sapMIBar-CTX sapMSubHeader-CTX sapContrastPlus",
|
|
55
|
+
"id": "container-cart---homeView--searchBar33343"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"ancestorProperties": {
|
|
59
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
60
|
+
"metadata": "sap.m.Page",
|
|
61
|
+
"id": "*page",
|
|
62
|
+
"ancestorProperties": {
|
|
63
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
64
|
+
"metadata": "sap.m.Page", // "sap.m.Page" instead of "sap.ui.core.mvc.XMLView"
|
|
65
|
+
"descendantProperties": {
|
|
66
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
67
|
+
"metadata": "sap.m.Page",
|
|
68
|
+
"id": "*page"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
await expect(browser.uiControl(selector))
|
|
76
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("'happy case': should access element by nested elementProperties, ancestorProperties, empty siblingProperties and descendantProperties", async () => {
|
|
80
|
+
const selector = {
|
|
81
|
+
"elementProperties": {
|
|
82
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
83
|
+
"metadata": "sap.m.Bar",
|
|
84
|
+
"id": "*page-intHeader",
|
|
85
|
+
"siblingProperties": "", // empty siblingProperties
|
|
86
|
+
"ancestorProperties": {
|
|
87
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
88
|
+
"metadata": "sap.m.Page",
|
|
89
|
+
"id": "*page",
|
|
90
|
+
"ancestorProperties": {
|
|
91
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
92
|
+
"metadata": "sap.ui.core.mvc.XMLView",
|
|
93
|
+
"descendantProperties": {
|
|
94
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
95
|
+
"metadata": "sap.m.Page",
|
|
96
|
+
"id": "*page"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
await expect(browser.uiControl(selector)).toBeTruthy();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("'happy case': should access element by nested elementProperties, ancestorProperties, domProperties, siblingProperties and empty descendantProperties", async () => {
|
|
106
|
+
const selector = {
|
|
107
|
+
"elementProperties": {
|
|
108
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
109
|
+
"metadata": "sap.m.Bar",
|
|
110
|
+
"id": "*page-intHeader",
|
|
111
|
+
"siblingProperties": {
|
|
112
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
113
|
+
"metadata": "sap.m.Toolbar",
|
|
114
|
+
"id": "*searchBar33343",
|
|
115
|
+
"domProperties": {
|
|
116
|
+
"nodeName": "div",
|
|
117
|
+
"class": "sapMIBar sapMTB sapMTBNewFlex sapMTBInactive sapMTBStandard sapMTB-Auto-CTX sapMIBar-CTX sapMSubHeader-CTX sapContrastPlus",
|
|
118
|
+
"id": "container-cart---homeView--searchBar33343"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"ancestorProperties": {
|
|
122
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
123
|
+
"metadata": "sap.m.Page",
|
|
124
|
+
"id": "*page",
|
|
125
|
+
"ancestorProperties": {
|
|
126
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
127
|
+
"metadata": "sap.ui.core.mvc.XMLView",
|
|
128
|
+
"descendantProperties": ""
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
await expect(browser.uiControl(selector)).toBeTruthy();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("'unhappy case': should access element by nested elementProperties, ancestorProperties, siblingProperties, descendantProperties and wrong domProperties", async () => {
|
|
137
|
+
const selector = {
|
|
138
|
+
"elementProperties": {
|
|
139
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
140
|
+
"metadata": "sap.m.Bar",
|
|
141
|
+
"id": "*page-intHeader",
|
|
142
|
+
"siblingProperties": {
|
|
143
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
144
|
+
"metadata": "sap.m.Toolbar",
|
|
145
|
+
"id": "*searchBar33343",
|
|
146
|
+
"domProperties": {
|
|
147
|
+
"nodeName": "li", // nodeName "li" instead of "div"
|
|
148
|
+
"id": "container-cart---homeView--searchBar33343"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"ancestorProperties": {
|
|
152
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
153
|
+
"metadata": "sap.m.Page",
|
|
154
|
+
"id": "*page",
|
|
155
|
+
"ancestorProperties": {
|
|
156
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
157
|
+
"metadata": "sap.ui.core.mvc.XMLView",
|
|
158
|
+
"descendantProperties": {
|
|
159
|
+
"viewName": "sap.ui.demo.cart.view.Home",
|
|
160
|
+
"metadata": "sap.m.Page",
|
|
161
|
+
"id": "*page"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
await expect(browser.uiControl(selector))
|
|
168
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const { handleCookiesConsent } = require("../../../helper/utils");
|
|
3
|
+
|
|
4
|
+
describe("webdriver.io page locator test", function () {
|
|
5
|
+
it("should access element by elementProperties, parentProperties and inner parentProperties", async function () {
|
|
6
|
+
await browser.navigateTo(
|
|
7
|
+
"https://sapui5.hana.ondemand.com/1.99.0/#/entity/sap.m.Button/sample/sap.m.sample.Button"
|
|
8
|
+
);
|
|
9
|
+
await handleCookiesConsent();
|
|
10
|
+
|
|
11
|
+
const backButtonProperties = {
|
|
12
|
+
"elementProperties": {
|
|
13
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
14
|
+
"metadata": "sap.ui.core.Icon",
|
|
15
|
+
"src": "sap-icon://nav-back"
|
|
16
|
+
},
|
|
17
|
+
"parentProperties": {
|
|
18
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
19
|
+
"metadata": "sap.m.Button",
|
|
20
|
+
"type": "Back"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const backButton = await browser.uiControl(backButtonProperties);
|
|
25
|
+
await expect(backButton).toBeDisplayed();
|
|
26
|
+
await expect(backButton).toBeClickable();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
it("try access element by elementProperties and wrong parent properties and catch error", async function () {
|
|
31
|
+
await browser.url("#/categories");
|
|
32
|
+
const wrongProperties = {
|
|
33
|
+
"elementProperties": {
|
|
34
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
35
|
+
"metadata": "sap.ui.core.Icon",
|
|
36
|
+
"src": "sap-icon://nav-back"
|
|
37
|
+
},
|
|
38
|
+
"parentProperties": {
|
|
39
|
+
"viewName": "sap.m.sample.Button.Page",
|
|
40
|
+
"metadata": "m.Button",
|
|
41
|
+
"type": "Back"
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
await expect(browser.uiControl(wrongProperties))
|
|
45
|
+
.rejects.toThrowError(/uiControlExecuteLocator\(\): No visible elements found/);
|
|
46
|
+
});
|
|
47
|
+
});
|