@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.
Files changed (625) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.yml +33 -0
  3. package/.reuse/dep5 +29 -0
  4. package/LICENSE +201 -0
  5. package/LICENSES/Apache-2.0.txt +73 -0
  6. package/README.md +20 -0
  7. package/docs/contact.md +10 -0
  8. package/docs/doc.md +5188 -0
  9. package/docs/gettingStarted/selectors.md +168 -0
  10. package/docs/gettingStarted/setup.md +8 -0
  11. package/docs/index.md +14 -0
  12. package/docs/style/custom.css +24 -0
  13. package/lib/index.d.ts +1 -0
  14. package/lib/index.js +171 -0
  15. package/lib/index.js.map +1 -0
  16. package/lib/reuse/authenticator/authConfig.d.ts +54 -0
  17. package/lib/reuse/authenticator/authConfig.js +55 -0
  18. package/lib/reuse/authenticator/authConfig.js.map +1 -0
  19. package/lib/reuse/authenticator/authHandler.d.ts +6 -0
  20. package/lib/reuse/authenticator/authHandler.js +37 -0
  21. package/lib/reuse/authenticator/authHandler.js.map +1 -0
  22. package/lib/reuse/authenticator/basicUrlAuthenticator.d.ts +2 -0
  23. package/lib/reuse/authenticator/basicUrlAuthenticator.js +36 -0
  24. package/lib/reuse/authenticator/basicUrlAuthenticator.js.map +1 -0
  25. package/lib/reuse/authenticator/customAuthenticator.d.ts +2 -0
  26. package/lib/reuse/authenticator/customAuthenticator.js +60 -0
  27. package/lib/reuse/authenticator/customAuthenticator.js.map +1 -0
  28. package/lib/reuse/authenticator/formAuthenticator.d.ts +2 -0
  29. package/lib/reuse/authenticator/formAuthenticator.js +57 -0
  30. package/lib/reuse/authenticator/formAuthenticator.js.map +1 -0
  31. package/lib/reuse/authenticator/plainAuthenticator.d.ts +2 -0
  32. package/lib/reuse/authenticator/plainAuthenticator.js +20 -0
  33. package/lib/reuse/authenticator/plainAuthenticator.js.map +1 -0
  34. package/lib/reuse/data/authenticators.json +16 -0
  35. package/lib/reuse/helper/clientsideUI5scripts.d.ts +1 -0
  36. package/lib/reuse/helper/clientsideUI5scripts.js +388 -0
  37. package/lib/reuse/helper/clientsideUI5scripts.js.map +1 -0
  38. package/lib/reuse/helper/jsDocGen.d.ts +1 -0
  39. package/lib/reuse/helper/jsDocGen.js +45 -0
  40. package/lib/reuse/helper/jsDocGen.js.map +1 -0
  41. package/lib/reuse/index.d.ts +5 -0
  42. package/lib/reuse/index.js +89 -0
  43. package/lib/reuse/index.js.map +1 -0
  44. package/lib/reuse/modules/common/Common.d.ts +12 -0
  45. package/lib/reuse/modules/common/Common.js +21 -0
  46. package/lib/reuse/modules/common/Common.js.map +1 -0
  47. package/lib/reuse/modules/common/assertion.d.ts +65 -0
  48. package/lib/reuse/modules/common/assertion.js +91 -0
  49. package/lib/reuse/modules/common/assertion.js.map +1 -0
  50. package/lib/reuse/modules/common/constants/date.constants.d.ts +8 -0
  51. package/lib/reuse/modules/common/constants/date.constants.js +13 -0
  52. package/lib/reuse/modules/common/constants/date.constants.js.map +1 -0
  53. package/lib/reuse/modules/common/constants/userInteraction.constants.d.ts +9 -0
  54. package/lib/reuse/modules/common/constants/userInteraction.constants.js +14 -0
  55. package/lib/reuse/modules/common/constants/userInteraction.constants.js.map +1 -0
  56. package/lib/reuse/modules/common/date.d.ts +84 -0
  57. package/lib/reuse/modules/common/date.js +164 -0
  58. package/lib/reuse/modules/common/date.js.map +1 -0
  59. package/lib/reuse/modules/common/navigation.d.ts +26 -0
  60. package/lib/reuse/modules/common/navigation.js +56 -0
  61. package/lib/reuse/modules/common/navigation.js.map +1 -0
  62. package/lib/reuse/modules/common/types/date.types.d.ts +2 -0
  63. package/lib/reuse/modules/common/types/date.types.js +3 -0
  64. package/lib/reuse/modules/common/types/date.types.js.map +1 -0
  65. package/lib/reuse/modules/common/userInteraction.d.ts +104 -0
  66. package/lib/reuse/modules/common/userInteraction.js +199 -0
  67. package/lib/reuse/modules/common/userInteraction.js.map +1 -0
  68. package/lib/reuse/modules/nonUi5/NonUi5.d.ts +12 -0
  69. package/lib/reuse/modules/nonUi5/NonUi5.js +21 -0
  70. package/lib/reuse/modules/nonUi5/NonUi5.js.map +1 -0
  71. package/lib/reuse/modules/nonUi5/assertion.d.ts +62 -0
  72. package/lib/reuse/modules/nonUi5/assertion.js +127 -0
  73. package/lib/reuse/modules/nonUi5/assertion.js.map +1 -0
  74. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.d.ts +6 -0
  75. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js +11 -0
  76. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js.map +1 -0
  77. package/lib/reuse/modules/nonUi5/element.d.ts +286 -0
  78. package/lib/reuse/modules/nonUi5/element.js +639 -0
  79. package/lib/reuse/modules/nonUi5/element.js.map +1 -0
  80. package/lib/reuse/modules/nonUi5/navigation.d.ts +17 -0
  81. package/lib/reuse/modules/nonUi5/navigation.js +44 -0
  82. package/lib/reuse/modules/nonUi5/navigation.js.map +1 -0
  83. package/lib/reuse/modules/nonUi5/userInteraction.d.ts +170 -0
  84. package/lib/reuse/modules/nonUi5/userInteraction.js +415 -0
  85. package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -0
  86. package/lib/reuse/modules/service/Service.d.ts +8 -0
  87. package/lib/reuse/modules/service/Service.js +17 -0
  88. package/lib/reuse/modules/service/Service.js.map +1 -0
  89. package/lib/reuse/modules/service/odata.d.ts +177 -0
  90. package/lib/reuse/modules/service/odata.js +347 -0
  91. package/lib/reuse/modules/service/odata.js.map +1 -0
  92. package/lib/reuse/modules/service/rest.d.ts +66 -0
  93. package/lib/reuse/modules/service/rest.js +168 -0
  94. package/lib/reuse/modules/service/rest.js.map +1 -0
  95. package/lib/reuse/modules/service/soap.d.ts +0 -0
  96. package/lib/reuse/modules/service/soap.js +2 -0
  97. package/lib/reuse/modules/service/soap.js.map +1 -0
  98. package/lib/reuse/modules/ui5/Ui5.d.ts +34 -0
  99. package/lib/reuse/modules/ui5/Ui5.js +41 -0
  100. package/lib/reuse/modules/ui5/Ui5.js.map +1 -0
  101. package/lib/reuse/modules/ui5/assertion.d.ts +183 -0
  102. package/lib/reuse/modules/ui5/assertion.js +493 -0
  103. package/lib/reuse/modules/ui5/assertion.js.map +1 -0
  104. package/lib/reuse/modules/ui5/confirmationDialog.d.ts +86 -0
  105. package/lib/reuse/modules/ui5/confirmationDialog.js +145 -0
  106. package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -0
  107. package/lib/reuse/modules/ui5/constants/mockserver.constants.d.ts +4 -0
  108. package/lib/reuse/modules/ui5/constants/mockserver.constants.js +9 -0
  109. package/lib/reuse/modules/ui5/constants/mockserver.constants.js.map +1 -0
  110. package/lib/reuse/modules/ui5/control.d.ts +84 -0
  111. package/lib/reuse/modules/ui5/control.js +132 -0
  112. package/lib/reuse/modules/ui5/control.js.map +1 -0
  113. package/lib/reuse/modules/ui5/date.d.ts +48 -0
  114. package/lib/reuse/modules/ui5/date.js +153 -0
  115. package/lib/reuse/modules/ui5/date.js.map +1 -0
  116. package/lib/reuse/modules/ui5/element.d.ts +160 -0
  117. package/lib/reuse/modules/ui5/element.js +349 -0
  118. package/lib/reuse/modules/ui5/element.js.map +1 -0
  119. package/lib/reuse/modules/ui5/errorDialog.d.ts +39 -0
  120. package/lib/reuse/modules/ui5/errorDialog.js +65 -0
  121. package/lib/reuse/modules/ui5/errorDialog.js.map +1 -0
  122. package/lib/reuse/modules/ui5/footerBar.d.ts +153 -0
  123. package/lib/reuse/modules/ui5/footerBar.js +240 -0
  124. package/lib/reuse/modules/ui5/footerBar.js.map +1 -0
  125. package/lib/reuse/modules/ui5/mockserver.d.ts +154 -0
  126. package/lib/reuse/modules/ui5/mockserver.js +665 -0
  127. package/lib/reuse/modules/ui5/mockserver.js.map +1 -0
  128. package/lib/reuse/modules/ui5/navigation.d.ts +103 -0
  129. package/lib/reuse/modules/ui5/navigation.js +275 -0
  130. package/lib/reuse/modules/ui5/navigation.js.map +1 -0
  131. package/lib/reuse/modules/ui5/navigationBar.d.ts +48 -0
  132. package/lib/reuse/modules/ui5/navigationBar.js +141 -0
  133. package/lib/reuse/modules/ui5/navigationBar.js.map +1 -0
  134. package/lib/reuse/modules/ui5/qunit.d.ts +17 -0
  135. package/lib/reuse/modules/ui5/qunit.js +52 -0
  136. package/lib/reuse/modules/ui5/qunit.js.map +1 -0
  137. package/lib/reuse/modules/ui5/session.d.ts +117 -0
  138. package/lib/reuse/modules/ui5/session.js +374 -0
  139. package/lib/reuse/modules/ui5/session.js.map +1 -0
  140. package/lib/reuse/modules/ui5/table.d.ts +61 -0
  141. package/lib/reuse/modules/ui5/table.js +188 -0
  142. package/lib/reuse/modules/ui5/table.js.map +1 -0
  143. package/lib/reuse/modules/ui5/types/mockserver.types.d.ts +2 -0
  144. package/lib/reuse/modules/ui5/types/mockserver.types.js +3 -0
  145. package/lib/reuse/modules/ui5/types/mockserver.types.js.map +1 -0
  146. package/lib/reuse/modules/ui5/userInteraction.d.ts +304 -0
  147. package/lib/reuse/modules/ui5/userInteraction.js +690 -0
  148. package/lib/reuse/modules/ui5/userInteraction.js.map +1 -0
  149. package/lib/reuse/modules/util/Util.d.ts +22 -0
  150. package/lib/reuse/modules/util/Util.js +27 -0
  151. package/lib/reuse/modules/util/Util.js.map +1 -0
  152. package/lib/reuse/modules/util/browser.d.ts +167 -0
  153. package/lib/reuse/modules/util/browser.js +367 -0
  154. package/lib/reuse/modules/util/browser.js.map +1 -0
  155. package/lib/reuse/modules/util/console.d.ts +56 -0
  156. package/lib/reuse/modules/util/console.js +152 -0
  157. package/lib/reuse/modules/util/console.js.map +1 -0
  158. package/lib/reuse/modules/util/constants/formatter.constants.d.ts +11 -0
  159. package/lib/reuse/modules/util/constants/formatter.constants.js +16 -0
  160. package/lib/reuse/modules/util/constants/formatter.constants.js.map +1 -0
  161. package/lib/reuse/modules/util/data.d.ts +36 -0
  162. package/lib/reuse/modules/util/data.js +87 -0
  163. package/lib/reuse/modules/util/data.js.map +1 -0
  164. package/lib/reuse/modules/util/file.d.ts +55 -0
  165. package/lib/reuse/modules/util/file.js +159 -0
  166. package/lib/reuse/modules/util/file.js.map +1 -0
  167. package/lib/reuse/modules/util/formatter.d.ts +90 -0
  168. package/lib/reuse/modules/util/formatter.js +210 -0
  169. package/lib/reuse/modules/util/formatter.js.map +1 -0
  170. package/lib/reuse/modules/util/function.d.ts +48 -0
  171. package/lib/reuse/modules/util/function.js +161 -0
  172. package/lib/reuse/modules/util/function.js.map +1 -0
  173. package/lib/reuse/modules/util/system.d.ts +17 -0
  174. package/lib/reuse/modules/util/system.js +58 -0
  175. package/lib/reuse/modules/util/system.js.map +1 -0
  176. package/lib/reuse/modules/util/types/formatter.types.d.ts +2 -0
  177. package/lib/reuse/modules/util/types/formatter.types.js +3 -0
  178. package/lib/reuse/modules/util/types/formatter.types.js.map +1 -0
  179. package/lib/scripts/clientsideUI5scripts.d.ts +1 -0
  180. package/lib/scripts/clientsideUI5scripts.js +315 -0
  181. package/lib/scripts/clientsideUI5scripts.js.map +1 -0
  182. package/lib/scripts/dataExchange/dataExchange.d.ts +1 -0
  183. package/lib/scripts/dataExchange/dataExchange.js +224 -0
  184. package/lib/scripts/dataExchange/dataExchange.js.map +1 -0
  185. package/lib/scripts/dataExchange/dataExchangeUtil.d.ts +63 -0
  186. package/lib/scripts/dataExchange/dataExchangeUtil.js +211 -0
  187. package/lib/scripts/dataExchange/dataExchangeUtil.js.map +1 -0
  188. package/lib/scripts/hooks/after.d.ts +8 -0
  189. package/lib/scripts/hooks/after.js +30 -0
  190. package/lib/scripts/hooks/after.js.map +1 -0
  191. package/lib/scripts/hooks/before.d.ts +8 -0
  192. package/lib/scripts/hooks/before.js +38 -0
  193. package/lib/scripts/hooks/before.js.map +1 -0
  194. package/lib/scripts/hooks/beforeSession.d.ts +8 -0
  195. package/lib/scripts/hooks/beforeSession.js +37 -0
  196. package/lib/scripts/hooks/beforeSession.js.map +1 -0
  197. package/lib/scripts/hooks/onComplete.d.ts +9 -0
  198. package/lib/scripts/hooks/onComplete.js +31 -0
  199. package/lib/scripts/hooks/onComplete.js.map +1 -0
  200. package/lib/scripts/hooks/onPrepare.d.ts +6 -0
  201. package/lib/scripts/hooks/onPrepare.js +36 -0
  202. package/lib/scripts/hooks/onPrepare.js.map +1 -0
  203. package/lib/scripts/hooks/utils/addLocatorCommands.d.ts +2 -0
  204. package/lib/scripts/hooks/utils/addLocatorCommands.js +193 -0
  205. package/lib/scripts/hooks/utils/addLocatorCommands.js.map +1 -0
  206. package/lib/scripts/hooks/utils/browserLog.d.ts +2 -0
  207. package/lib/scripts/hooks/utils/browserLog.js +39 -0
  208. package/lib/scripts/hooks/utils/browserLog.js.map +1 -0
  209. package/lib/scripts/hooks/utils/dataExchangeCommands.d.ts +9 -0
  210. package/lib/scripts/hooks/utils/dataExchangeCommands.js +46 -0
  211. package/lib/scripts/hooks/utils/dataExchangeCommands.js.map +1 -0
  212. package/lib/scripts/hooks/utils/decryption.d.ts +13 -0
  213. package/lib/scripts/hooks/utils/decryption.js +90 -0
  214. package/lib/scripts/hooks/utils/decryption.js.map +1 -0
  215. package/lib/scripts/hooks/utils/lib.d.ts +4 -0
  216. package/lib/scripts/hooks/utils/lib.js +330 -0
  217. package/lib/scripts/hooks/utils/lib.js.map +1 -0
  218. package/lib/scripts/hooks/utils/locatorCommands.d.ts +10 -0
  219. package/lib/scripts/hooks/utils/locatorCommands.js +216 -0
  220. package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -0
  221. package/lib/scripts/locators/qmateLocator.d.ts +1 -0
  222. package/lib/scripts/locators/qmateLocator.js +1384 -0
  223. package/lib/scripts/locators/qmateLocator.js.map +1 -0
  224. package/lib/scripts/locators/uiveri5Locator.d.ts +1 -0
  225. package/lib/scripts/locators/uiveri5Locator.js +21 -0
  226. package/lib/scripts/locators/uiveri5Locator.js.map +1 -0
  227. package/mkdocs.yml +53 -0
  228. package/package.json +152 -0
  229. package/test/.eslintrc.yml +6 -0
  230. package/test/authenticator/package.json +13 -0
  231. package/test/authenticator/staticLogin/configCustom.js +22 -0
  232. package/test/authenticator/staticLogin/configCustomViaConfig.js +20 -0
  233. package/test/authenticator/staticLogin/configFiori.js +19 -0
  234. package/test/authenticator/staticLogin/configPlain.js +17 -0
  235. package/test/authenticator/staticLogin/configSapCloud.js +18 -0
  236. package/test/authenticator/staticLogin/html/custom.html +10 -0
  237. package/test/authenticator/staticLogin/html/fiori.html +10 -0
  238. package/test/authenticator/staticLogin/html/home.html +7 -0
  239. package/test/authenticator/staticLogin/html/sapCloud.html +10 -0
  240. package/test/authenticator/staticLogin/specs/custom.spec.js +6 -0
  241. package/test/authenticator/staticLogin/specs/customViaConfig.spec.js +10 -0
  242. package/test/authenticator/staticLogin/specs/fiori.spec.js +6 -0
  243. package/test/authenticator/staticLogin/specs/plain.spec.js +64 -0
  244. package/test/authenticator/staticLogin/specs/sapCloud.spec.js +6 -0
  245. package/test/authenticator/staticLogin/staticServerConfig.js +20 -0
  246. package/test/authenticator/systemLogin/configCustom.js +26 -0
  247. package/test/authenticator/systemLogin/configFiori.js +24 -0
  248. package/test/authenticator/systemLogin/configPlain.js +22 -0
  249. package/test/authenticator/systemLogin/configSapCloud.js +24 -0
  250. package/test/authenticator/systemLogin/specs/custom.spec.js +13 -0
  251. package/test/authenticator/systemLogin/specs/fiori.spec.js +12 -0
  252. package/test/authenticator/systemLogin/specs/plain.spec.js +21 -0
  253. package/test/authenticator/systemLogin/specs/sapCloud.spec.js +13 -0
  254. package/test/core/README.md +17 -0
  255. package/test/core/dataExchange/config.export.js +56 -0
  256. package/test/core/dataExchange/config.import.js +47 -0
  257. package/test/core/dataExchange/config.js +52 -0
  258. package/test/core/dataExchange/config.parallel.group.js +61 -0
  259. package/test/core/dataExchange/config.parallel.js +58 -0
  260. package/test/core/dataExchange/data/another/folder/data/anotherFolder/dummy1.txt +0 -0
  261. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/Limit-Purchase-Order.json +29 -0
  262. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/ServicePurchaseOrder.2Items.json +67 -0
  263. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchaseRequisition_HI.json +31 -0
  264. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/LimitPurchaseOrder.json +29 -0
  265. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderItems.json +58 -0
  266. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderWithScheduline.json +27 -0
  267. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServiceAndMaterialPurchaseOrder.json +65 -0
  268. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder.json +39 -0
  269. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder2Items.json +67 -0
  270. package/test/core/dataExchange/data/my/folder/data/qs9/data.json +5 -0
  271. package/test/core/dataExchange/data/my/folder/data/qs9/dummy1.txt +0 -0
  272. package/test/core/dataExchange/data/my/folder/data/qs9/dummy2.txt +0 -0
  273. package/test/core/dataExchange/data/my/folder/data/qs9/empty.json +0 -0
  274. package/test/core/dataExchange/data/my/folder/data/qs9/purchaseRequisition.json +31 -0
  275. package/test/core/dataExchange/data/my/folder/data/qs9/supplierInvoice.json +17 -0
  276. package/test/core/dataExchange/data/my/folder/data/qs9/webUser.json +6 -0
  277. package/test/core/dataExchange/data/ui/moreDataFolder/anotherUser.json +6 -0
  278. package/test/core/dataExchange/data/ui/user.json +6 -0
  279. package/test/core/dataExchange/data/ui/webUser.json +6 -0
  280. package/test/core/dataExchange/specs/export.fast.spec.js +48 -0
  281. package/test/core/dataExchange/specs/export.slow.spec.js +50 -0
  282. package/test/core/dataExchange/specs/export.spec.js +103 -0
  283. package/test/core/dataExchange/specs/import.spec.js +144 -0
  284. package/test/core/dataExchange/specs/importExport.spec.js +196 -0
  285. package/test/core/dataExchange/utils.js +160 -0
  286. package/test/core/functional/README.md +30 -0
  287. package/test/core/functional/chaining/chaining.test.js +137 -0
  288. package/test/core/functional/chaining/test.conf.js +31 -0
  289. package/test/core/functional/locators/ancestorProperties.test.js +99 -0
  290. package/test/core/functional/locators/childProperties.test.js +40 -0
  291. package/test/core/functional/locators/descendantProperties.test.js +107 -0
  292. package/test/core/functional/locators/domProperties.test.js +60 -0
  293. package/test/core/functional/locators/elementProperties.test.js +114 -0
  294. package/test/core/functional/locators/mixedProperties.test.js +170 -0
  295. package/test/core/functional/locators/parentProperties.test.js +47 -0
  296. package/test/core/functional/locators/siblingProperties.test.js +120 -0
  297. package/test/core/functional/locators/test.locator.conf.js +38 -0
  298. package/test/core/functional/locators/utils.js +6 -0
  299. package/test/core/functional/nativeBrowser/runInBrowser.test.js +111 -0
  300. package/test/core/functional/nativeBrowser/test.conf.js +31 -0
  301. package/test/core/functional/nonUi5/basic.test.js +10 -0
  302. package/test/core/functional/nonUi5/getWithDomElement.test.js +51 -0
  303. package/test/core/functional/nonUi5/getWithDomElements.test.js +141 -0
  304. package/test/core/functional/nonUi5/test.conf.js +32 -0
  305. package/test/core/functional/ui5Properties/getAggregations.test.js +102 -0
  306. package/test/core/functional/ui5Properties/getAssociations.test.js +24 -0
  307. package/test/core/functional/ui5Properties/getBindingInfos.test.js +71 -0
  308. package/test/core/functional/ui5Properties/getProperties.test.js +226 -0
  309. package/test/core/functional/ui5Properties/test.conf.js +16 -0
  310. package/test/core/functional/uiveri5/sample.test.js +61 -0
  311. package/test/core/functional/uiveri5/test.conf.js +31 -0
  312. package/test/core/package-lock.json +0 -0
  313. package/test/core/package.json +12 -0
  314. package/test/core/testIntegration/config.js +17 -0
  315. package/test/core/testIntegration/configMultiCombo.js +17 -0
  316. package/test/core/testIntegration/configTable.js +18 -0
  317. package/test/core/testIntegration/filters1.spec.js +1849 -0
  318. package/test/core/testIntegration/multicombobox.spec.js +134 -0
  319. package/test/core/testIntegration/table.spec.js +80 -0
  320. package/test/helper/configurations/base.conf.js +43 -0
  321. package/test/helper/configurations/chrome.conf.js +47 -0
  322. package/test/helper/configurations/chrome.headless.conf.js +45 -0
  323. package/test/helper/configurations/sauce.labs.conf.js +37 -0
  324. package/test/helper/configurations/sauce.labs.tunnel.conf.js +39 -0
  325. package/test/helper/sleeper.js +19 -0
  326. package/test/helper/utils.js +15 -0
  327. package/test/helper/website/buttons.html +85 -0
  328. package/test/helper/website/checkBox.html +83 -0
  329. package/test/helper/website/dragAndDropFailing.html +83 -0
  330. package/test/helper/website/dragAndDropWdioExample.html +41 -0
  331. package/test/helper/website/dropdown.html +78 -0
  332. package/test/helper/website/forms.html +82 -0
  333. package/test/helper/website/hiddenAndVisible.html +60 -0
  334. package/test/helper/website/main.css +36 -0
  335. package/test/helper/website/scrollPage.html +261 -0
  336. package/test/helper/website/style.css +52 -0
  337. package/test/helper/website/tables.html +140 -0
  338. package/test/helper/website/waitForElements.html +73 -0
  339. package/test/reuse/common/assertion/expectDefined.spec.js +11 -0
  340. package/test/reuse/common/assertion/expectEqual.spec.js +52 -0
  341. package/test/reuse/common/assertion/expectFalse.spec.js +9 -0
  342. package/test/reuse/common/assertion/expectTrue.spec.js +9 -0
  343. package/test/reuse/common/assertion/expectUndefined.spec.js +11 -0
  344. package/test/reuse/common/assertion/expectUnequal.spec.js +25 -0
  345. package/test/reuse/common/assertion/expectUrlToBe.spec.js +27 -0
  346. package/test/reuse/common/assertion/test.assertion.conf.js +59 -0
  347. package/test/reuse/common/date/calculate.spec.js +163 -0
  348. package/test/reuse/common/date/getNextMonth.spec.js +105 -0
  349. package/test/reuse/common/date/getNextYear.spec.js +72 -0
  350. package/test/reuse/common/date/getPreviousMonth.spec.js +71 -0
  351. package/test/reuse/common/date/getPreviousYear.spec.js +72 -0
  352. package/test/reuse/common/date/getSpecific.spec.js +63 -0
  353. package/test/reuse/common/date/getToday.spec.js +78 -0
  354. package/test/reuse/common/date/getTomorrow.spec.js +72 -0
  355. package/test/reuse/common/date/test.date.conf.js +19 -0
  356. package/test/reuse/common/date/utils.js +6 -0
  357. package/test/reuse/common/navigation/navigateToUrl.spec.js +28 -0
  358. package/test/reuse/common/navigation/navigateToUrlAndRetry.spec.js +27 -0
  359. package/test/reuse/common/navigation/test.navigation.conf.js +25 -0
  360. package/test/reuse/common/userInteraction/clearAndFillActive.spec.js +100 -0
  361. package/test/reuse/common/userInteraction/clearAndFillActiveAndRetry.spec.js +106 -0
  362. package/test/reuse/common/userInteraction/fillActive.spec.js +230 -0
  363. package/test/reuse/common/userInteraction/fillActiveAndRetry.spec.js +172 -0
  364. package/test/reuse/common/userInteraction/pressKey.spec.js +105 -0
  365. package/test/reuse/common/userInteraction/test.userInteraction.conf.js +53 -0
  366. package/test/reuse/nonUi5/assertion/expectAttributeToBe.spec.js +45 -0
  367. package/test/reuse/nonUi5/assertion/expectAttributeToContain.spec.js +43 -0
  368. package/test/reuse/nonUi5/assertion/expectToBeNotVisible.spec.js +37 -0
  369. package/test/reuse/nonUi5/assertion/expectToBeVisible.spec.js +63 -0
  370. package/test/reuse/nonUi5/assertion/expectValueToBe.spec.js +25 -0
  371. package/test/reuse/nonUi5/assertion/test.assertion.conf.js +60 -0
  372. package/test/reuse/nonUi5/assertion/test.assertion.sauceLabs.conf.js +64 -0
  373. package/test/reuse/nonUi5/element/getAllDisplayed.spec.js +39 -0
  374. package/test/reuse/nonUi5/element/getAttributeValue.spec.js +58 -0
  375. package/test/reuse/nonUi5/element/getByChild.spec.js +70 -0
  376. package/test/reuse/nonUi5/element/getByClass.spec.js +64 -0
  377. package/test/reuse/nonUi5/element/getByCss.spec.js +65 -0
  378. package/test/reuse/nonUi5/element/getByCssContainingText.spec.js +83 -0
  379. package/test/reuse/nonUi5/element/getById.spec.js +35 -0
  380. package/test/reuse/nonUi5/element/getByName.spec.js +30 -0
  381. package/test/reuse/nonUi5/element/getByParent.spec.js +71 -0
  382. package/test/reuse/nonUi5/element/getByXPath.spec.js +30 -0
  383. package/test/reuse/nonUi5/element/getValue.spec.js +51 -0
  384. package/test/reuse/nonUi5/element/highlight.spec.js +18 -0
  385. package/test/reuse/nonUi5/element/isPresent.spec.js +39 -0
  386. package/test/reuse/nonUi5/element/isPresentByCss.spec.js +73 -0
  387. package/test/reuse/nonUi5/element/isPresentByXPath.spec.js +31 -0
  388. package/test/reuse/nonUi5/element/setInnerHTML.spec.js +23 -0
  389. package/test/reuse/nonUi5/element/test.element.conf.js +55 -0
  390. package/test/reuse/nonUi5/element/test.element.sauceLabs.conf.js +58 -0
  391. package/test/reuse/nonUi5/element/waitForAll.spec.js +24 -0
  392. package/test/reuse/nonUi5/element/waitToBeClickable.spec.js +24 -0
  393. package/test/reuse/nonUi5/element/waitToBePresent.spec.js +32 -0
  394. package/test/reuse/nonUi5/element/waitToBeVisible.spec.js +36 -0
  395. package/test/reuse/nonUi5/navigation/navigateToApplication.spec.js +13 -0
  396. package/test/reuse/nonUi5/navigation/test.navigation.conf.js +14 -0
  397. package/test/reuse/nonUi5/userInteraction/checkAttributeAndValue.spec.js +135 -0
  398. package/test/reuse/nonUi5/userInteraction/clear.spec.js +43 -0
  399. package/test/reuse/nonUi5/userInteraction/clearAndFill.spec.js +51 -0
  400. package/test/reuse/nonUi5/userInteraction/clearAndFillAndRetry.spec.js +58 -0
  401. package/test/reuse/nonUi5/userInteraction/clearAndRetry.spec.js +43 -0
  402. package/test/reuse/nonUi5/userInteraction/click.spec.js +60 -0
  403. package/test/reuse/nonUi5/userInteraction/clickAndRetry.spec.js +60 -0
  404. package/test/reuse/nonUi5/userInteraction/clickElementInSvg.spec.js +24 -0
  405. package/test/reuse/nonUi5/userInteraction/doubleClick.spec.js +22 -0
  406. package/test/reuse/nonUi5/userInteraction/dragAndDrop.spec.js +40 -0
  407. package/test/reuse/nonUi5/userInteraction/fill.spec.js +37 -0
  408. package/test/reuse/nonUi5/userInteraction/fillAndRetry.spec.js +39 -0
  409. package/test/reuse/nonUi5/userInteraction/mouseOverElement.spec.js +36 -0
  410. package/test/reuse/nonUi5/userInteraction/moveCursorAndClick.spec.js +24 -0
  411. package/test/reuse/nonUi5/userInteraction/rightClick.spec.js +13 -0
  412. package/test/reuse/nonUi5/userInteraction/scrollToElement.spec.js +35 -0
  413. package/test/reuse/nonUi5/userInteraction/test.userInteraction.conf.js +72 -0
  414. package/test/reuse/nonUi5/userInteraction/test.userInteraction.sauceLabs.conf.js +78 -0
  415. package/test/reuse/service/rest/db.json +8 -0
  416. package/test/reuse/service/rest/delete.spec.js +20 -0
  417. package/test/reuse/service/rest/get.spec.js +19 -0
  418. package/test/reuse/service/rest/init.spec.js +35 -0
  419. package/test/reuse/service/rest/patch.spec.js +29 -0
  420. package/test/reuse/service/rest/post.spec.js +37 -0
  421. package/test/reuse/service/rest/test.rest.conf.js +18 -0
  422. package/test/reuse/ui5/assertion/expectAttributeToBe.spec.js +106 -0
  423. package/test/reuse/ui5/assertion/expectAttributeToContain.spec.js +78 -0
  424. package/test/reuse/ui5/assertion/expectBindingContextPathToBe.spec.js +103 -0
  425. package/test/reuse/ui5/assertion/expectBindingPathToBe.spec.js +164 -0
  426. package/test/reuse/ui5/assertion/expectMessageToastTextToBe.spec.js +43 -0
  427. package/test/reuse/ui5/assertion/expectTextToBe.spec.js +39 -0
  428. package/test/reuse/ui5/assertion/expectToBeEnabled.spec.js +90 -0
  429. package/test/reuse/ui5/assertion/expectToBeNotEnabled.spec.js +62 -0
  430. package/test/reuse/ui5/assertion/expectToBeNotVisible.spec.js +52 -0
  431. package/test/reuse/ui5/assertion/expectToBeVisible.spec.js +69 -0
  432. package/test/reuse/ui5/assertion/expectToBeVisibleInViewport.spec.js +49 -0
  433. package/test/reuse/ui5/assertion/expectValidationError.spec.js +54 -0
  434. package/test/reuse/ui5/assertion/expectValidationSuccess.spec.js +53 -0
  435. package/test/reuse/ui5/assertion/expectValueToBe.spec.js +57 -0
  436. package/test/reuse/ui5/assertion/expectValueToBeDefined.spec.js +35 -0
  437. package/test/reuse/ui5/assertion/test.assertion.conf.js +28 -0
  438. package/test/reuse/ui5/assertion/test.assertion.sauceLab.conf.js +37 -0
  439. package/test/reuse/ui5/confirmationDialog/clickCancel.spec.js +88 -0
  440. package/test/reuse/ui5/confirmationDialog/clickCreate.spec.js +3 -0
  441. package/test/reuse/ui5/confirmationDialog/clickDelete.spec.js +89 -0
  442. package/test/reuse/ui5/confirmationDialog/clickNo.spec.js +96 -0
  443. package/test/reuse/ui5/confirmationDialog/clickOk.spec.js +66 -0
  444. package/test/reuse/ui5/confirmationDialog/clickRevokeApproval.spec.js +3 -0
  445. package/test/reuse/ui5/confirmationDialog/clickYes.spec.js +70 -0
  446. package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.conf.js +20 -0
  447. package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.sauceLab.conf.js +29 -0
  448. package/test/reuse/ui5/control/execute.spec.js +29 -0
  449. package/test/reuse/ui5/control/getAggregationProperty.spec.js +29 -0
  450. package/test/reuse/ui5/control/getAssociationProperty.spec.js +1 -0
  451. package/test/reuse/ui5/control/getBindingContextPathProperty.spec.js +30 -0
  452. package/test/reuse/ui5/control/getProperty.spec.js +30 -0
  453. package/test/reuse/ui5/control/getPropertyBinding.spec.js +30 -0
  454. package/test/reuse/ui5/control/test.control.conf.js +19 -0
  455. package/test/reuse/ui5/control/test.control.sauceLab.conf.js +30 -0
  456. package/test/reuse/ui5/date/fillRange.spec.js +53 -0
  457. package/test/reuse/ui5/date/pick.spec.js +136 -0
  458. package/test/reuse/ui5/date/pickRange.spec.js +143 -0
  459. package/test/reuse/ui5/date/test.date.conf.js +14 -0
  460. package/test/reuse/ui5/date/test.date.sauceLab.conf.js +26 -0
  461. package/test/reuse/ui5/element/getAllDisplayed.spec.js +71 -0
  462. package/test/reuse/ui5/element/getBindingValue.spec.js +78 -0
  463. package/test/reuse/ui5/element/getByChild.spec.js +124 -0
  464. package/test/reuse/ui5/element/getByParent.spec.js +134 -0
  465. package/test/reuse/ui5/element/getByText.spec.js +67 -0
  466. package/test/reuse/ui5/element/getDisplayed.spec.js +82 -0
  467. package/test/reuse/ui5/element/getId.spec.js +72 -0
  468. package/test/reuse/ui5/element/getPropertyValue.spec.js +91 -0
  469. package/test/reuse/ui5/element/highlight.spec.js +46 -0
  470. package/test/reuse/ui5/element/isVisible.spec.js +68 -0
  471. package/test/reuse/ui5/element/test.element.conf.js +22 -0
  472. package/test/reuse/ui5/element/test.element.sauceLab.conf.js +33 -0
  473. package/test/reuse/ui5/errorDialog/clickClose.spec.js +31 -0
  474. package/test/reuse/ui5/errorDialog/expectToBeVisible.spec.js +30 -0
  475. package/test/reuse/ui5/errorDialog/test.errorDialog.conf.js +13 -0
  476. package/test/reuse/ui5/errorDialog/test.errorDialog.sauceLab.conf.js +26 -0
  477. package/test/reuse/ui5/formatter/addRemoveLeadingZeros.spec.js +18 -0
  478. package/test/reuse/ui5/formatter/extractNumberFromString.spec.js +34 -0
  479. package/test/reuse/ui5/formatter/formatDate.spec.js +103 -0
  480. package/test/reuse/ui5/formatter/test.formatter.conf.js +14 -0
  481. package/test/reuse/ui5/formatter/test.formatter.sauceLab.conf.js +24 -0
  482. package/test/reuse/ui5/mockserver_qunit/Component.js +23 -0
  483. package/test/reuse/ui5/mockserver_qunit/LICENSE.txt +957 -0
  484. package/test/reuse/ui5/mockserver_qunit/NOTICE.txt +1 -0
  485. package/test/reuse/ui5/mockserver_qunit/controller/App.controller.js +37 -0
  486. package/test/reuse/ui5/mockserver_qunit/controller/BaseController.js +30 -0
  487. package/test/reuse/ui5/mockserver_qunit/controller/Home.controller.js +27 -0
  488. package/test/reuse/ui5/mockserver_qunit/controller/NotFound.controller.js +34 -0
  489. package/test/reuse/ui5/mockserver_qunit/controller/employee/Employee.controller.js +64 -0
  490. package/test/reuse/ui5/mockserver_qunit/controller/employee/EmployeeList.controller.js +22 -0
  491. package/test/reuse/ui5/mockserver_qunit/controller/employee/Resume.controller.js +83 -0
  492. package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverview.controller.js +11 -0
  493. package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverviewContent.controller.js +192 -0
  494. package/test/reuse/ui5/mockserver_qunit/i18n/i18n.properties +42 -0
  495. package/test/reuse/ui5/mockserver_qunit/index.html +21 -0
  496. package/test/reuse/ui5/mockserver_qunit/initMockServer.js +16 -0
  497. package/test/reuse/ui5/mockserver_qunit/localService/metadata.xml +61 -0
  498. package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Employees.json +155 -0
  499. package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Resumes.json +65 -0
  500. package/test/reuse/ui5/mockserver_qunit/localService/mockserver.js +146 -0
  501. package/test/reuse/ui5/mockserver_qunit/localService/mockserverLoadAllData.js +75 -0
  502. package/test/reuse/ui5/mockserver_qunit/manifest.json +169 -0
  503. package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServer.html +63 -0
  504. package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServerAllData.html +68 -0
  505. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/config.js +92 -0
  506. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/qunitExecution/specs/runQUnitTests.spec.js +14 -0
  507. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/data/setup.json +11 -0
  508. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/specs/testDisplayNotFound.spec.js +71 -0
  509. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Employees.json +204 -0
  510. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Resumes.json +114 -0
  511. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/setup.json +11 -0
  512. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/testShowEmployeeList.json +1 -0
  513. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/specs/testShowEmployeeList.spec.js +118 -0
  514. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/constants.js +25 -0
  515. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockDataMapper.js +23 -0
  516. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockHelper.js +222 -0
  517. package/test/reuse/ui5/mockserver_qunit/test/unit/allTests.js +6 -0
  518. package/test/reuse/ui5/mockserver_qunit/test/unit/unitTests.qunit.html +38 -0
  519. package/test/reuse/ui5/mockserver_qunit/test/unit/utils/Conversions.js +13 -0
  520. package/test/reuse/ui5/mockserver_qunit/view/App.view.xml +9 -0
  521. package/test/reuse/ui5/mockserver_qunit/view/Home.view.xml +12 -0
  522. package/test/reuse/ui5/mockserver_qunit/view/NotFound.view.xml +11 -0
  523. package/test/reuse/ui5/mockserver_qunit/view/employee/Employee.view.xml +52 -0
  524. package/test/reuse/ui5/mockserver_qunit/view/employee/EmployeeList.view.xml +24 -0
  525. package/test/reuse/ui5/mockserver_qunit/view/employee/Resume.view.xml +35 -0
  526. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeHobbies.view.xml +3 -0
  527. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeNotes.view.xml +3 -0
  528. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeProjects.view.xml +3 -0
  529. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverview.view.xml +13 -0
  530. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewContent.view.xml +43 -0
  531. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewTop.view.xml +3 -0
  532. package/test/reuse/ui5/navigation/closePopups.spec.js +16 -0
  533. package/test/reuse/ui5/navigation/expectUnsupportedNavigationPopup.spec.js +81 -0
  534. package/test/reuse/ui5/navigation/navigateToApplication.spec.js +148 -0
  535. package/test/reuse/ui5/navigation/navigateToApplicationAndRetry.spec.js +153 -0
  536. package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParams.spec.js +63 -0
  537. package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParamsAndRetry.spec.js +64 -0
  538. package/test/reuse/ui5/navigation/navigateToSystemAndApplication.spec.js +45 -0
  539. package/test/reuse/ui5/navigation/navigateToSystemAndApplicationAndRetry.spec.js +43 -0
  540. package/test/reuse/ui5/navigation/test.navigation.conf.js +17 -0
  541. package/test/reuse/ui5/navigation/test.navigation.sauceLab.conf.js +33 -0
  542. package/test/reuse/ui5/navigation/test.navigation.static.conf.js +34 -0
  543. package/test/reuse/ui5/navigation/test.navigation.static.sauceLab.conf.js +41 -0
  544. package/test/reuse/ui5/navigation/website/main.css +36 -0
  545. package/test/reuse/ui5/navigation/website/main.html +50 -0
  546. package/test/reuse/ui5/navigationBar/clickBack.spec.js +38 -0
  547. package/test/reuse/ui5/navigationBar/clickUserIcon.spec.js +36 -0
  548. package/test/reuse/ui5/navigationBar/expectPageTitle.spec.js +22 -0
  549. package/test/reuse/ui5/navigationBar/expectShellHeader.spec.js +22 -0
  550. package/test/reuse/ui5/navigationBar/test.navigationBar.conf.js +17 -0
  551. package/test/reuse/ui5/navigationBar/test.navigationBar.sauceLab.conf.js +28 -0
  552. package/test/reuse/ui5/session/login.spec.js +78 -0
  553. package/test/reuse/ui5/session/loginFiori.spec.js +52 -0
  554. package/test/reuse/ui5/session/loginSapCloud.spec.js +51 -0
  555. package/test/reuse/ui5/session/logout.spec.js +48 -0
  556. package/test/reuse/ui5/session/switchUser.spec.js +48 -0
  557. package/test/reuse/ui5/session/test.session.conf.js +20 -0
  558. package/test/reuse/ui5/session/test.session.sauceLab.conf.js +29 -0
  559. package/test/reuse/ui5/table/clickSettingsButton.spec.js +58 -0
  560. package/test/reuse/ui5/table/sortColumnAscending.spec.js +84 -0
  561. package/test/reuse/ui5/table/sortColumnDescending.spec.js +84 -0
  562. package/test/reuse/ui5/table/test.table.conf.js +14 -0
  563. package/test/reuse/ui5/table/test.table.sauceLab.conf.js +25 -0
  564. package/test/reuse/ui5/table/test.table.sauceLab.tunnel.conf.js +25 -0
  565. package/test/reuse/ui5/userInteraction/clear.spec.js +75 -0
  566. package/test/reuse/ui5/userInteraction/clearAndFill.spec.js +157 -0
  567. package/test/reuse/ui5/userInteraction/clearAndFillAndRetry.spec.js +132 -0
  568. package/test/reuse/ui5/userInteraction/clearAndFillSmartFieldInput.spec.js +73 -0
  569. package/test/reuse/ui5/userInteraction/clearAndRetry.spec.js +57 -0
  570. package/test/reuse/ui5/userInteraction/click.spec.js +73 -0
  571. package/test/reuse/ui5/userInteraction/clickAndRetry.spec.js +52 -0
  572. package/test/reuse/ui5/userInteraction/clickSelectArrow.spec.js +87 -0
  573. package/test/reuse/ui5/userInteraction/clickSelectArrowAndRetry.spec.js +147 -0
  574. package/test/reuse/ui5/userInteraction/clickTab.spec.js +59 -0
  575. package/test/reuse/ui5/userInteraction/doubleClick.spec.js +73 -0
  576. package/test/reuse/ui5/userInteraction/dragAndDrop.spec.js +34 -0
  577. package/test/reuse/ui5/userInteraction/fill.spec.js +114 -0
  578. package/test/reuse/ui5/userInteraction/fillAndRetry.spec.js +120 -0
  579. package/test/reuse/ui5/userInteraction/mouseOverElement.spec.js +55 -0
  580. package/test/reuse/ui5/userInteraction/openF4Help.spec.js +56 -0
  581. package/test/reuse/ui5/userInteraction/rightClick.spec.js +72 -0
  582. package/test/reuse/ui5/userInteraction/scrollToElement.spec.js +89 -0
  583. package/test/reuse/ui5/userInteraction/searchFor.spec.js +155 -0
  584. package/test/reuse/ui5/userInteraction/selectBox.spec.js +128 -0
  585. package/test/reuse/ui5/userInteraction/selectCombobox.spec.js +115 -0
  586. package/test/reuse/ui5/userInteraction/selectMultiComboBox.spec.js +155 -0
  587. package/test/reuse/ui5/userInteraction/test.userInteraction.conf.js +35 -0
  588. package/test/reuse/ui5/userInteraction/test.userInteraction.sauceLab.conf.js +46 -0
  589. package/test/reuse/util/browser/back.spec.js +32 -0
  590. package/test/reuse/util/browser/clearBrowser.spec.js +35 -0
  591. package/test/reuse/util/browser/executeScript.spec.js +49 -0
  592. package/test/reuse/util/browser/getBaseUrl.spec.js +13 -0
  593. package/test/reuse/util/browser/getBrowserName.spec.js +18 -0
  594. package/test/reuse/util/browser/getCurrentUrl.spec.js +34 -0
  595. package/test/reuse/util/browser/getCurrentWindow.spec.js +42 -0
  596. package/test/reuse/util/browser/getUI5Version.spec.js +31 -0
  597. package/test/reuse/util/browser/logCurrentUrl.spec.js +23 -0
  598. package/test/reuse/util/browser/refresh.spec.js +52 -0
  599. package/test/reuse/util/browser/setBaseUrl.spec.js +13 -0
  600. package/test/reuse/util/browser/switchToDefaultContent.spec.js +34 -0
  601. package/test/reuse/util/browser/switchToIframe.spec.js +29 -0
  602. package/test/reuse/util/browser/switchToNewWindow.spec.js +142 -0
  603. package/test/reuse/util/browser/switchToWindow.spec.js +57 -0
  604. package/test/reuse/util/browser/test.browser.conf.js +27 -0
  605. package/test/reuse/util/data/data/test.json +3 -0
  606. package/test/reuse/util/data/data/test.secure.json +11 -0
  607. package/test/reuse/util/data/decrypt.spec.js +15 -0
  608. package/test/reuse/util/data/getData.spec.js +15 -0
  609. package/test/reuse/util/data/getSecureData.spec.js +57 -0
  610. package/test/reuse/util/data/test.data.conf.js +22 -0
  611. package/test/reuse/util/file/file.spec.js +90 -0
  612. package/test/reuse/util/file/pdfParser.spec.js +55 -0
  613. package/test/reuse/util/file/test.file.conf.js +15 -0
  614. package/test/reuse/util/file/testFiles/sample.pdf +198 -0
  615. package/test/reuse/util/file/testFiles/test.txt +5 -0
  616. package/test/reuse/util/file/testFiles/test2.txt +2 -0
  617. package/test/reuse/util/formatter/addRemoveLeadingZeros.spec.js +38 -0
  618. package/test/reuse/util/formatter/extractNumberFromString.spec.js +67 -0
  619. package/test/reuse/util/formatter/formatDate.spec.js +150 -0
  620. package/test/reuse/util/formatter/sliceStringAfter.spec.js +62 -0
  621. package/test/reuse/util/formatter/sliceStringAt.spec.js +62 -0
  622. package/test/reuse/util/formatter/stringifyJSON.spec.js +24 -0
  623. package/test/reuse/util/formatter/test.formatter.conf.js +20 -0
  624. package/test/reuse/util/formatter/trimString.spec.js +37 -0
  625. 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
+ ```
@@ -0,0 +1,8 @@
1
+ ## Prerequisites
2
+ Make sure [Node.js](https://nodejs.org/en/download/) is installed on your computer.
3
+
4
+ ## Installation
5
+ To install the latest version of the service, simply execute the following command:
6
+ ```bash
7
+ npm install @wdio/qmate-service
8
+ ```
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
@@ -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,6 @@
1
+ declare class AuthHandler {
2
+ private path;
3
+ attachAuthHandling(): Promise<void>;
4
+ }
5
+ declare const _default: AuthHandler;
6
+ export default _default;
@@ -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,2 @@
1
+ export = BasicUrlAuthenticator;
2
+ declare function BasicUrlAuthenticator(): Promise<void>;
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export = CustomAuthenticator;
2
+ declare function CustomAuthenticator(): Promise<void>;