@testspectra/cli 1.0.59 → 1.0.63

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 (312) hide show
  1. package/README.md +33 -32
  2. package/bin/testspectra-runner +0 -0
  3. package/dist/commands/add.js +7 -13
  4. package/dist/commands/init.js +23 -23
  5. package/dist/commands/run.d.ts +1 -0
  6. package/dist/commands/run.js +22 -13
  7. package/dist/index.js +1 -0
  8. package/dist/server/demo.d.ts +8 -0
  9. package/dist/server/demo.js +104 -0
  10. package/dist/types/generator.d.ts +1 -1
  11. package/dist/types/generator.js +50 -15
  12. package/package.json +2 -2
  13. package/templates/default/.cursorrules +18 -0
  14. package/templates/default/CLAUDE.md +9 -0
  15. package/templates/default/fixtures/playgroundData.json +7 -0
  16. package/templates/default/global-hooks/after/mobile.hook.ts +3 -0
  17. package/templates/default/global-hooks/after/web.hook.ts +3 -0
  18. package/templates/default/global-hooks/before/mobile.hook.ts +3 -0
  19. package/templates/default/global-hooks/before/web.hook.ts +3 -0
  20. package/templates/default/package.json +5 -1
  21. package/templates/default/page-objects/MatchersPage/mobile.ts +21 -0
  22. package/templates/default/page-objects/MatchersPage/web.ts +23 -0
  23. package/templates/default/page-objects/NavigationPage/mobile.ts +5 -0
  24. package/templates/default/page-objects/NavigationPage/web.ts +8 -0
  25. package/templates/default/page-objects/PlaygroundPage/mobile.ts +26 -0
  26. package/templates/default/page-objects/PlaygroundPage/web.ts +29 -0
  27. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +3 -0
  28. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +12 -0
  29. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +5 -0
  30. package/templates/default/specs/BrowserContext/hooks/after/mobile.hook.ts +1 -0
  31. package/templates/default/specs/BrowserContext/hooks/after/web.hook.ts +1 -0
  32. package/templates/default/specs/BrowserContext/hooks/afterEach/mobile.hook.ts +1 -0
  33. package/templates/default/specs/BrowserContext/hooks/afterEach/web.hook.ts +1 -0
  34. package/templates/default/specs/BrowserContext/hooks/before/mobile.hook.ts +1 -0
  35. package/templates/default/specs/BrowserContext/hooks/before/web.hook.ts +1 -0
  36. package/templates/default/specs/BrowserContext/hooks/beforeEach/mobile.hook.ts +1 -0
  37. package/templates/default/specs/BrowserContext/hooks/beforeEach/web.hook.ts +1 -0
  38. package/templates/default/specs/BrowserContext/suite.md +9 -0
  39. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +3 -0
  40. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/spec.md +12 -0
  41. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +7 -0
  42. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +3 -0
  43. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +12 -0
  44. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +6 -0
  45. package/templates/default/specs/ContentMatchers/hooks/after/mobile.hook.ts +1 -0
  46. package/templates/default/specs/ContentMatchers/hooks/after/web.hook.ts +1 -0
  47. package/templates/default/specs/ContentMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  48. package/templates/default/specs/ContentMatchers/hooks/afterEach/web.hook.ts +1 -0
  49. package/templates/default/specs/ContentMatchers/hooks/before/mobile.hook.ts +1 -0
  50. package/templates/default/specs/ContentMatchers/hooks/before/web.hook.ts +1 -0
  51. package/templates/default/specs/ContentMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  52. package/templates/default/specs/ContentMatchers/hooks/beforeEach/web.hook.ts +1 -0
  53. package/templates/default/specs/ContentMatchers/suite.md +9 -0
  54. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +3 -0
  55. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +12 -0
  56. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +5 -0
  57. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +3 -0
  58. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +12 -0
  59. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +8 -0
  60. package/templates/default/specs/ElementMatchers/hooks/after/mobile.hook.ts +1 -0
  61. package/templates/default/specs/ElementMatchers/hooks/after/web.hook.ts +1 -0
  62. package/templates/default/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  63. package/templates/default/specs/ElementMatchers/hooks/afterEach/web.hook.ts +1 -0
  64. package/templates/default/specs/ElementMatchers/hooks/before/mobile.hook.ts +1 -0
  65. package/templates/default/specs/ElementMatchers/hooks/before/web.hook.ts +1 -0
  66. package/templates/default/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  67. package/templates/default/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +1 -0
  68. package/templates/default/specs/ElementMatchers/suite.md +9 -0
  69. package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +3 -0
  70. package/templates/default/specs/Playground/TC-0001-form-controls/spec.md +12 -0
  71. package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +6 -0
  72. package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +3 -0
  73. package/templates/default/specs/Playground/TC-0002-toggle-elements/spec.md +12 -0
  74. package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -0
  75. package/templates/default/specs/Playground/hooks/after/mobile.hook.ts +1 -0
  76. package/templates/default/specs/Playground/hooks/after/web.hook.ts +1 -0
  77. package/templates/default/specs/Playground/hooks/afterEach/mobile.hook.ts +1 -0
  78. package/templates/default/specs/Playground/hooks/afterEach/web.hook.ts +1 -0
  79. package/templates/default/specs/Playground/hooks/before/mobile.hook.ts +1 -0
  80. package/templates/default/specs/Playground/hooks/before/web.hook.ts +1 -0
  81. package/templates/default/specs/Playground/hooks/beforeEach/mobile.hook.ts +1 -0
  82. package/templates/default/specs/Playground/hooks/beforeEach/web.hook.ts +1 -0
  83. package/templates/default/specs/Playground/suite.md +9 -0
  84. package/templates/default/spectra.config.ts +1 -1
  85. package/templates/default/support/actions/fillCredentials/mobile.action.ts +4 -0
  86. package/templates/default/support/actions/fillCredentials/web.action.ts +4 -0
  87. package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +3 -0
  88. package/templates/default/support/steps/togglePlaygroundStates/step.md +7 -0
  89. package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +5 -0
  90. package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +4 -0
  91. package/templates/default/support/steps/verifyPlaygroundState/step.md +7 -0
  92. package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +6 -0
  93. package/templates/default/tsconfig.spectra.android.json +7 -4
  94. package/templates/default/tsconfig.spectra.ios.json +7 -4
  95. package/templates/default/tsconfig.spectra.web.json +10 -6
  96. package/templates/nx/.cursorrules +18 -0
  97. package/templates/nx/CLAUDE.md +10 -0
  98. package/templates/nx/fixtures/playgroundData.json +7 -0
  99. package/templates/nx/global-hooks/after/mobile.hook.ts +3 -0
  100. package/templates/nx/global-hooks/after/web.hook.ts +3 -0
  101. package/templates/nx/global-hooks/before/mobile.hook.ts +3 -0
  102. package/templates/nx/global-hooks/before/web.hook.ts +3 -0
  103. package/templates/nx/package.json +1 -1
  104. package/templates/nx/{modules/auth → packages/matchers}/e2e/project.json +8 -5
  105. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +3 -0
  106. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +12 -0
  107. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +5 -0
  108. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/after/mobile.hook.ts +1 -0
  109. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/after/web.hook.ts +1 -0
  110. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/afterEach/mobile.hook.ts +1 -0
  111. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/afterEach/web.hook.ts +1 -0
  112. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/before/mobile.hook.ts +1 -0
  113. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/before/web.hook.ts +1 -0
  114. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/beforeEach/mobile.hook.ts +1 -0
  115. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/hooks/beforeEach/web.hook.ts +1 -0
  116. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/suite.md +9 -0
  117. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +3 -0
  118. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/spec.md +12 -0
  119. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +7 -0
  120. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +3 -0
  121. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +12 -0
  122. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +6 -0
  123. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/after/mobile.hook.ts +1 -0
  124. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/after/web.hook.ts +1 -0
  125. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  126. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/afterEach/web.hook.ts +1 -0
  127. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/before/mobile.hook.ts +1 -0
  128. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/before/web.hook.ts +1 -0
  129. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  130. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/hooks/beforeEach/web.hook.ts +1 -0
  131. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/suite.md +9 -0
  132. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +3 -0
  133. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +12 -0
  134. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +5 -0
  135. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +3 -0
  136. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +12 -0
  137. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +8 -0
  138. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/after/mobile.hook.ts +1 -0
  139. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/after/web.hook.ts +1 -0
  140. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  141. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/afterEach/web.hook.ts +1 -0
  142. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/before/mobile.hook.ts +1 -0
  143. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/before/web.hook.ts +1 -0
  144. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  145. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +1 -0
  146. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/suite.md +9 -0
  147. package/templates/nx/packages/playground/e2e/project.json +37 -0
  148. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts +3 -0
  149. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/spec.md +12 -0
  150. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +6 -0
  151. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +3 -0
  152. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/spec.md +12 -0
  153. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -0
  154. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/after/mobile.hook.ts +1 -0
  155. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/after/web.hook.ts +1 -0
  156. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/afterEach/mobile.hook.ts +1 -0
  157. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/afterEach/web.hook.ts +1 -0
  158. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/before/mobile.hook.ts +1 -0
  159. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/before/web.hook.ts +1 -0
  160. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/beforeEach/mobile.hook.ts +1 -0
  161. package/templates/nx/packages/playground/e2e/specs/Playground/hooks/beforeEach/web.hook.ts +1 -0
  162. package/templates/nx/packages/playground/e2e/specs/Playground/suite.md +9 -0
  163. package/templates/nx/page-objects/MatchersPage/mobile.ts +21 -0
  164. package/templates/nx/page-objects/MatchersPage/web.ts +23 -0
  165. package/templates/nx/page-objects/NavigationPage/mobile.ts +5 -0
  166. package/templates/nx/page-objects/NavigationPage/web.ts +8 -0
  167. package/templates/nx/page-objects/PlaygroundPage/mobile.ts +26 -0
  168. package/templates/nx/page-objects/PlaygroundPage/web.ts +29 -0
  169. package/templates/nx/shared/testing/fixtures/playgroundData.json +7 -0
  170. package/templates/nx/shared/testing/global-hooks/after/mobile.hook.ts +3 -0
  171. package/templates/nx/shared/testing/global-hooks/after/web.hook.ts +3 -0
  172. package/templates/nx/shared/testing/global-hooks/before/mobile.hook.ts +3 -0
  173. package/templates/nx/shared/testing/global-hooks/before/web.hook.ts +3 -0
  174. package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +21 -0
  175. package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +23 -0
  176. package/templates/nx/shared/testing/page-objects/NavigationPage/mobile.ts +5 -0
  177. package/templates/nx/shared/testing/page-objects/NavigationPage/web.ts +8 -0
  178. package/templates/nx/shared/testing/page-objects/PlaygroundPage/mobile.ts +26 -0
  179. package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +29 -0
  180. package/templates/nx/shared/testing/support/actions/fillCredentials/mobile.action.ts +4 -0
  181. package/templates/nx/shared/testing/support/actions/fillCredentials/web.action.ts +4 -0
  182. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/mobile.step.ts +3 -0
  183. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/step.md +7 -0
  184. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +5 -0
  185. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +4 -0
  186. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/step.md +7 -0
  187. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +6 -0
  188. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +3 -0
  189. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +12 -0
  190. package/templates/nx/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +5 -0
  191. package/templates/nx/specs/BrowserContext/hooks/after/mobile.hook.ts +1 -0
  192. package/templates/nx/specs/BrowserContext/hooks/after/web.hook.ts +1 -0
  193. package/templates/nx/specs/BrowserContext/hooks/afterEach/mobile.hook.ts +1 -0
  194. package/templates/nx/specs/BrowserContext/hooks/afterEach/web.hook.ts +1 -0
  195. package/templates/nx/specs/BrowserContext/hooks/before/mobile.hook.ts +1 -0
  196. package/templates/nx/specs/BrowserContext/hooks/before/web.hook.ts +1 -0
  197. package/templates/nx/specs/BrowserContext/hooks/beforeEach/mobile.hook.ts +1 -0
  198. package/templates/nx/specs/BrowserContext/hooks/beforeEach/web.hook.ts +1 -0
  199. package/templates/nx/specs/BrowserContext/suite.md +9 -0
  200. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +3 -0
  201. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/spec.md +12 -0
  202. package/templates/nx/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +7 -0
  203. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +3 -0
  204. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +12 -0
  205. package/templates/nx/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +6 -0
  206. package/templates/nx/specs/ContentMatchers/hooks/after/mobile.hook.ts +1 -0
  207. package/templates/nx/specs/ContentMatchers/hooks/after/web.hook.ts +1 -0
  208. package/templates/nx/specs/ContentMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  209. package/templates/nx/specs/ContentMatchers/hooks/afterEach/web.hook.ts +1 -0
  210. package/templates/nx/specs/ContentMatchers/hooks/before/mobile.hook.ts +1 -0
  211. package/templates/nx/specs/ContentMatchers/hooks/before/web.hook.ts +1 -0
  212. package/templates/nx/specs/ContentMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  213. package/templates/nx/specs/ContentMatchers/hooks/beforeEach/web.hook.ts +1 -0
  214. package/templates/nx/specs/ContentMatchers/suite.md +9 -0
  215. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +3 -0
  216. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +12 -0
  217. package/templates/nx/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +5 -0
  218. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +3 -0
  219. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +12 -0
  220. package/templates/nx/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +8 -0
  221. package/templates/nx/specs/ElementMatchers/hooks/after/mobile.hook.ts +1 -0
  222. package/templates/nx/specs/ElementMatchers/hooks/after/web.hook.ts +1 -0
  223. package/templates/nx/specs/ElementMatchers/hooks/afterEach/mobile.hook.ts +1 -0
  224. package/templates/nx/specs/ElementMatchers/hooks/afterEach/web.hook.ts +1 -0
  225. package/templates/nx/specs/ElementMatchers/hooks/before/mobile.hook.ts +1 -0
  226. package/templates/nx/specs/ElementMatchers/hooks/before/web.hook.ts +1 -0
  227. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/mobile.hook.ts +1 -0
  228. package/templates/nx/specs/ElementMatchers/hooks/beforeEach/web.hook.ts +1 -0
  229. package/templates/nx/specs/ElementMatchers/suite.md +9 -0
  230. package/templates/nx/specs/Playground/TC-0001-form-controls/mobile.test.ts +3 -0
  231. package/templates/nx/specs/Playground/TC-0001-form-controls/spec.md +12 -0
  232. package/templates/nx/specs/Playground/TC-0001-form-controls/web.test.ts +6 -0
  233. package/templates/nx/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +3 -0
  234. package/templates/nx/specs/Playground/TC-0002-toggle-elements/spec.md +12 -0
  235. package/templates/nx/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -0
  236. package/templates/nx/specs/Playground/hooks/after/mobile.hook.ts +1 -0
  237. package/templates/nx/specs/Playground/hooks/after/web.hook.ts +1 -0
  238. package/templates/nx/specs/Playground/hooks/afterEach/mobile.hook.ts +1 -0
  239. package/templates/nx/specs/Playground/hooks/afterEach/web.hook.ts +1 -0
  240. package/templates/nx/specs/Playground/hooks/before/mobile.hook.ts +1 -0
  241. package/templates/nx/specs/Playground/hooks/before/web.hook.ts +1 -0
  242. package/templates/nx/specs/Playground/hooks/beforeEach/mobile.hook.ts +1 -0
  243. package/templates/nx/specs/Playground/hooks/beforeEach/web.hook.ts +1 -0
  244. package/templates/nx/specs/Playground/suite.md +9 -0
  245. package/templates/nx/spectra.config.ts +1 -1
  246. package/templates/nx/support/actions/fillCredentials/mobile.action.ts +4 -0
  247. package/templates/nx/support/actions/fillCredentials/web.action.ts +4 -0
  248. package/templates/nx/support/steps/togglePlaygroundStates/mobile.step.ts +3 -0
  249. package/templates/nx/support/steps/togglePlaygroundStates/step.md +7 -0
  250. package/templates/nx/support/steps/togglePlaygroundStates/web.step.ts +5 -0
  251. package/templates/nx/support/steps/verifyPlaygroundState/mobile.step.ts +4 -0
  252. package/templates/nx/support/steps/verifyPlaygroundState/step.md +7 -0
  253. package/templates/nx/support/steps/verifyPlaygroundState/web.step.ts +6 -0
  254. package/templates/default/actions/applyDiscount/mobile.action.ts +0 -6
  255. package/templates/default/actions/applyDiscount/web.action.ts +0 -6
  256. package/templates/default/actions/verifyOtp/mobile.action.ts +0 -6
  257. package/templates/default/actions/verifyOtp/web.action.ts +0 -6
  258. package/templates/default/fixtures/couponCode.json +0 -1
  259. package/templates/default/fixtures/searchQuery.json +0 -1
  260. package/templates/default/fixtures/userData.json +0 -1
  261. package/templates/default/global-hooks/before.web.hook.ts +0 -4
  262. package/templates/default/page-objects/LoginPage/mobile.ts +0 -32
  263. package/templates/default/page-objects/LoginPage/web.ts +0 -32
  264. package/templates/default/page-objects/ProductPage/mobile.ts +0 -39
  265. package/templates/default/page-objects/ProductPage/web.ts +0 -38
  266. package/templates/default/page-objects/SettingsPage/common.ts +0 -26
  267. package/templates/default/specs/Auth/TC-AUTH-01/android.test.ts +0 -6
  268. package/templates/default/specs/Auth/TC-AUTH-01/ios.test.ts +0 -6
  269. package/templates/default/specs/Auth/TC-AUTH-01/web.test.ts +0 -13
  270. package/templates/default/specs/Auth/TC-AUTH-02/android.test.ts +0 -5
  271. package/templates/default/specs/Auth/TC-AUTH-02/web.test.ts +0 -5
  272. package/templates/default/specs/Auth/hooks/before.android.hook.ts +0 -3
  273. package/templates/default/specs/Auth/hooks/before.ios.hook.ts +0 -3
  274. package/templates/default/specs/Auth/hooks/before.web.hook.ts +0 -3
  275. package/templates/default/specs/Product/TC-PROD-01/mobile.test.ts +0 -8
  276. package/templates/default/specs/Product/TC-PROD-01/web.test.ts +0 -8
  277. package/templates/default/specs/Product/TC-PROD-02/mobile.test.ts +0 -6
  278. package/templates/default/specs/Product/TC-PROD-02/web.test.ts +0 -6
  279. package/templates/default/specs/Product/hooks/before.web.hook.ts +0 -3
  280. package/templates/default/specs/Settings/TC-SET-01/common.test.ts +0 -8
  281. package/templates/default/steps/loginUser/mobile.step.ts +0 -4
  282. package/templates/default/steps/loginUser/web.step.ts +0 -4
  283. package/templates/default/steps/searchProduct/mobile.step.ts +0 -5
  284. package/templates/default/steps/searchProduct/web.step.ts +0 -5
  285. package/templates/nx/modules/auth/e2e/actions/verifyOtp/mobile.action.ts +0 -6
  286. package/templates/nx/modules/auth/e2e/actions/verifyOtp/web.action.ts +0 -6
  287. package/templates/nx/modules/auth/e2e/fixtures/userData.json +0 -1
  288. package/templates/nx/modules/auth/e2e/global-hooks/before.web.hook.ts +0 -4
  289. package/templates/nx/modules/auth/e2e/package.json +0 -19
  290. package/templates/nx/modules/auth/e2e/page-objects/LoginPage/mobile.ts +0 -32
  291. package/templates/nx/modules/auth/e2e/page-objects/LoginPage/web.ts +0 -32
  292. package/templates/nx/modules/auth/e2e/page-objects/SettingsPage/common.ts +0 -26
  293. package/templates/nx/modules/auth/e2e/specs/Auth/TC-AUTH-01/android.test.ts +0 -6
  294. package/templates/nx/modules/auth/e2e/specs/Auth/TC-AUTH-01/ios.test.ts +0 -6
  295. package/templates/nx/modules/auth/e2e/specs/Auth/TC-AUTH-01/web.test.ts +0 -19
  296. package/templates/nx/modules/auth/e2e/specs/Auth/TC-AUTH-02/android.test.ts +0 -5
  297. package/templates/nx/modules/auth/e2e/specs/Auth/TC-AUTH-02/web.test.ts +0 -5
  298. package/templates/nx/modules/auth/e2e/specs/Auth/hooks/before.android.hook.ts +0 -3
  299. package/templates/nx/modules/auth/e2e/specs/Auth/hooks/before.ios.hook.ts +0 -3
  300. package/templates/nx/modules/auth/e2e/specs/Auth/hooks/before.web.hook.ts +0 -3
  301. package/templates/nx/modules/auth/e2e/specs/Settings/TC-SET-01/common.test.ts +0 -8
  302. package/templates/nx/modules/auth/e2e/steps/loginUser/mobile.step.ts +0 -4
  303. package/templates/nx/modules/auth/e2e/steps/loginUser/web.step.ts +0 -4
  304. package/templates/nx/modules/auth/package.json +0 -7
  305. package/templates/nx/modules/auth/src/index.ts +0 -3
  306. package/templates/nx/modules/catalog/package.json +0 -7
  307. package/templates/nx/modules/catalog/src/index.ts +0 -6
  308. package/templates/nx/shared/testing/actions/dismissBanner/common.action.ts +0 -6
  309. package/templates/nx/shared/testing/fixtures/appConfig.json +0 -4
  310. package/templates/nx/shared/testing/package.json +0 -8
  311. package/templates/nx/shared/testing/page-objects/NavigationBar/common.ts +0 -13
  312. package/templates/nx/shared/testing/steps/loginAsAdmin/common.step.ts +0 -4
@@ -0,0 +1 @@
1
+ export default async function () {}
@@ -0,0 +1 @@
1
+ export default async function () {}
@@ -0,0 +1 @@
1
+ export default async function () {}
@@ -0,0 +1 @@
1
+ export default async function () {}
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: suite-playground
3
+ name: Playground
4
+ description: Live Playground form controls and interactive toggles
5
+ executionOrder: 1.0
6
+ parallel: true
7
+ ---
8
+
9
+ # Suite: Playground
@@ -2,7 +2,7 @@ import { defineConfig } from "@testspectra/cli";
2
2
 
3
3
  export default defineConfig({
4
4
  webConfig: {
5
- baseUrl: "https://the-internet.herokuapp.com",
5
+ baseUrl: "http://localhost:5173",
6
6
  maxConcurrentSessions: "1",
7
7
  headlessMode: true,
8
8
  implicitWait: "5000",
@@ -0,0 +1,4 @@
1
+ export default async function fillCredentials(this: any, email: string, token: string) {
2
+ await this.get("~email_input").type(email);
3
+ await this.get("~token_input").type(token);
4
+ }
@@ -0,0 +1,4 @@
1
+ export default async function fillCredentials(this: any, email: string, token: string) {
2
+ await this.get("#demo-email-input-pg").type(email);
3
+ await this.get("#demo-token-input-pg").type(token);
4
+ }
@@ -0,0 +1,3 @@
1
+ export default async function togglePlaygroundStates() {
2
+ await PlaygroundPage.open();
3
+ }
@@ -0,0 +1,7 @@
1
+ ---
2
+ id: step-togglePlaygroundStates
3
+ name: Toggle Playground States
4
+ description: Toggles hidden/removed elements and verifies dynamic states
5
+ ---
6
+
7
+ # Step: Toggle Playground States
@@ -0,0 +1,5 @@
1
+ export default async function togglePlaygroundStates() {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.hiddenElement.should("be.visible");
4
+ await PlaygroundPage.existingElement.should("exist");
5
+ }
@@ -0,0 +1,4 @@
1
+ export default async function verifyPlaygroundState() {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.visibleElement.should("be.visible");
4
+ }
@@ -0,0 +1,7 @@
1
+ ---
2
+ id: step-verifyPlaygroundState
3
+ name: Verify Playground State
4
+ description: Verifies default form values and matcher element states on demo web app
5
+ ---
6
+
7
+ # Step: Verify Playground State
@@ -0,0 +1,6 @@
1
+ export default async function verifyPlaygroundState() {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.visibleElement.should("be.visible");
4
+ await PlaygroundPage.enabledButton.should("be.enabled");
5
+ await PlaygroundPage.termsCheckbox.should("be.checked");
6
+ }
@@ -1,6 +0,0 @@
1
- export default async function applyDiscount(couponCode: string): Promise<void> {
2
- const couponInput = await $('~coupon_input');
3
- await couponInput.setValue(couponCode);
4
- const applyBtn = await $('~btn_apply');
5
- await applyBtn.click();
6
- }
@@ -1,6 +0,0 @@
1
- export default async function applyDiscount(couponCode: string): Promise<void> {
2
- const couponInput = await $('#coupon-code');
3
- await couponInput.setValue(couponCode);
4
- const applyBtn = await $('#apply-coupon-btn');
5
- await applyBtn.click();
6
- }
@@ -1,6 +0,0 @@
1
- export default async function verifyOtp(otp: string): Promise<void> {
2
- const otpInput = await $('~otp_input');
3
- await otpInput.setValue(otp);
4
- const verifyBtn = await $('~verify_btn');
5
- await verifyBtn.click();
6
- }
@@ -1,6 +0,0 @@
1
- export default async function verifyOtp(otp: string): Promise<void> {
2
- const otpInput = await $('#otp');
3
- await otpInput.setValue(otp);
4
- const verifyBtn = await $('#verify-btn');
5
- await verifyBtn.click();
6
- }
@@ -1 +0,0 @@
1
- "DISCOUNT50"
@@ -1 +0,0 @@
1
- "Laptop Gaming"
@@ -1 +0,0 @@
1
- {"username": "tomsmith", "role": "admin"}
@@ -1,4 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Global before setup (executed once before all suites)
3
- await browser.maximizeWindow();
4
- }
@@ -1,32 +0,0 @@
1
- export default class LoginPage {
2
- static get usernameInput(): ChainablePromiseElement {
3
- return $('~username_input');
4
- }
5
-
6
- static get passwordInput(): ChainablePromiseElement {
7
- return $('~password_input');
8
- }
9
-
10
- static get rememberMeCheckbox(): ChainablePromiseElement {
11
- return $('~remember_me_checkbox');
12
- }
13
-
14
- static get submitButton(): ChainablePromiseElement {
15
- return $('~login_button');
16
- }
17
-
18
- static get welcomeText(): ChainablePromiseElement {
19
- return $('~welcome_text');
20
- }
21
-
22
- static async open() {
23
- // Mobile app launch handled by Appium capabilities
24
- }
25
-
26
- static async login(username: string, pass: string) {
27
- await Spectra.waitForElement(this.usernameInput);
28
- await Spectra.type(this.usernameInput, username, { clearFirst: true });
29
- await Spectra.type(this.passwordInput, pass, { clearFirst: true });
30
- await Spectra.click(this.submitButton);
31
- }
32
- }
@@ -1,32 +0,0 @@
1
- export default class LoginPage {
2
- static get usernameInput(): ChainablePromiseElement {
3
- return $('#username');
4
- }
5
-
6
- static get passwordInput(): ChainablePromiseElement {
7
- return $('#password');
8
- }
9
-
10
- static get rememberMeCheckbox(): ChainablePromiseElement {
11
- return $('#remember-me');
12
- }
13
-
14
- static get submitButton(): ChainablePromiseElement {
15
- return $('button[type="submit"]');
16
- }
17
-
18
- static get flashAlert(): ChainablePromiseElement {
19
- return $('#flash');
20
- }
21
-
22
- static async open() {
23
- await Spectra.navigate('/login');
24
- }
25
-
26
- static async login(username: string, pass: string) {
27
- await Spectra.waitForElement(this.usernameInput);
28
- await Spectra.type(this.usernameInput, username, { clearFirst: true });
29
- await Spectra.type(this.passwordInput, pass, { clearFirst: true });
30
- await Spectra.click(this.submitButton);
31
- }
32
- }
@@ -1,39 +0,0 @@
1
- export default class ProductPage {
2
- static get searchInput(): ChainablePromiseElement {
3
- return $('~search_input');
4
- }
5
-
6
- static get categorySelect(): ChainablePromiseElement {
7
- return $('~category_picker');
8
- }
9
-
10
- static get productList(): ChainablePromiseElement {
11
- return $('~product_list');
12
- }
13
-
14
- static get firstProductCard(): ChainablePromiseElement {
15
- return $('~product_item_0');
16
- }
17
-
18
- static get addToCartButton(): ChainablePromiseElement {
19
- return $('~btn_add_to_cart');
20
- }
21
-
22
- static get cartBadge(): ChainablePromiseElement {
23
- return $('~cart_badge');
24
- }
25
-
26
- static async open() {
27
- // Mobile in-app navigation to products tab
28
- }
29
-
30
- static async filterByCategory(category: string) {
31
- await Spectra.click(this.categorySelect);
32
- await Spectra.click(`~option_${category}`);
33
- }
34
-
35
- static async addFirstProductToCart() {
36
- await Spectra.swipe({ direction: "down", distance: 400 });
37
- await Spectra.click(this.addToCartButton);
38
- }
39
- }
@@ -1,38 +0,0 @@
1
- export default class ProductPage {
2
- static get searchInput(): ChainablePromiseElement {
3
- return $('#search-input');
4
- }
5
-
6
- static get categorySelect(): ChainablePromiseElement {
7
- return $('#category-select');
8
- }
9
-
10
- static get productList(): ChainablePromiseElement {
11
- return $('#product-grid');
12
- }
13
-
14
- static get firstProductCard(): ChainablePromiseElement {
15
- return $('.product-card');
16
- }
17
-
18
- static get addToCartButton(): ChainablePromiseElement {
19
- return $('#add-to-cart');
20
- }
21
-
22
- static get cartBadge(): ChainablePromiseElement {
23
- return $('#cart-count');
24
- }
25
-
26
- static async open() {
27
- await Spectra.navigate('/products');
28
- }
29
-
30
- static async filterByCategory(category: string) {
31
- await Spectra.select(this.categorySelect, category);
32
- }
33
-
34
- static async addFirstProductToCart() {
35
- await Spectra.scroll({ selector: this.firstProductCard });
36
- await Spectra.click(this.addToCartButton);
37
- }
38
- }
@@ -1,26 +0,0 @@
1
- export default class SettingsPage {
2
- static get darkModeToggle(): ChainablePromiseElement {
3
- return $('[data-testid="dark-mode-toggle"]');
4
- }
5
-
6
- static get languageDropdown(): ChainablePromiseElement {
7
- return $('[data-testid="language-select"]');
8
- }
9
-
10
- static get saveButton(): ChainablePromiseElement {
11
- return $('[data-testid="save-settings"]');
12
- }
13
-
14
- static get statusMessage(): ChainablePromiseElement {
15
- return $('[data-testid="status-message"]');
16
- }
17
-
18
- static async open() {
19
- await Spectra.navigate('/settings');
20
- }
21
-
22
- static async toggleDarkMode() {
23
- await Spectra.click(this.darkModeToggle);
24
- await Spectra.click(this.saveButton);
25
- }
26
- }
@@ -1,6 +0,0 @@
1
- it("should authenticate user on Android Appium device", async () => {
2
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
3
-
4
- await LoginPage.welcomeText.shouldBeVisible();
5
- await LoginPage.welcomeText.shouldContainText("Welcome");
6
- });
@@ -1,6 +0,0 @@
1
- it("should authenticate user on iOS Appium device", async () => {
2
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
3
-
4
- await LoginPage.welcomeText.shouldBeVisible();
5
- await LoginPage.welcomeText.shouldContainText("Welcome");
6
- });
@@ -1,13 +0,0 @@
1
- it("should authenticate user and verify flash message across specific platforms", async () => {
2
- await browser.intercept("/api/status", "GET", Fixture.userData);
3
-
4
- // 1. Navigation via Page Object
5
- await LoginPage.open();
6
-
7
- // 2. High-level business flow via Shared Step & Page Object
8
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
9
-
10
- // 3. Direct callable assertion on Page Object element
11
- await LoginPage.flashAlert.shouldBeVisible();
12
- await LoginPage.flashAlert.shouldContainText("You logged into a secure area!");
13
- });
@@ -1,5 +0,0 @@
1
- it("should toggle remember me checkbox on Android", async () => {
2
- await LoginPage.open();
3
- await LoginPage.rememberMeCheckbox.shouldBeVisible();
4
- await Spectra.click(LoginPage.rememberMeCheckbox);
5
- });
@@ -1,5 +0,0 @@
1
- it("should toggle remember me checkbox on Web", async () => {
2
- await LoginPage.open();
3
- await LoginPage.rememberMeCheckbox.shouldBeVisible();
4
- await Spectra.click(LoginPage.rememberMeCheckbox);
5
- });
@@ -1,3 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Setup Android Appium capabilities
3
- }
@@ -1,3 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Setup iOS Appium capabilities
3
- }
@@ -1,3 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Suite-specific setup before test cases in Auth suite run
3
- }
@@ -1,8 +0,0 @@
1
- it("should filter products by category and add to cart on Mobile (Android & iOS)", async () => {
2
- await ProductPage.open();
3
- await ProductPage.filterByCategory("Electronics");
4
- await ProductPage.addFirstProductToCart();
5
-
6
- await ProductPage.cartBadge.shouldBeVisible();
7
- await ProductPage.cartBadge.shouldHaveText("1");
8
- });
@@ -1,8 +0,0 @@
1
- it("should filter products by category and add to cart on Web", async () => {
2
- await ProductPage.open();
3
- await ProductPage.filterByCategory("Electronics");
4
- await ProductPage.addFirstProductToCart();
5
-
6
- await ProductPage.cartBadge.shouldBeVisible();
7
- await ProductPage.cartBadge.shouldHaveText("1");
8
- });
@@ -1,6 +0,0 @@
1
- it("should search products and apply promotional discount coupon on Mobile", async () => {
2
- await Step.searchProduct(Fixture.searchQuery);
3
- await Spectra.applyDiscount(Fixture.couponCode);
4
-
5
- await ProductPage.firstProductCard.shouldBeVisible();
6
- });
@@ -1,6 +0,0 @@
1
- it("should search products and apply promotional discount coupon on Web", async () => {
2
- await Step.searchProduct(Fixture.searchQuery);
3
- await Spectra.applyDiscount(Fixture.couponCode);
4
-
5
- await ProductPage.firstProductCard.shouldBeVisible();
6
- });
@@ -1,3 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Suite-specific setup for Product catalog suite
3
- }
@@ -1,8 +0,0 @@
1
- it("should toggle dark mode setting across all platforms (Common)", async () => {
2
- await SettingsPage.open();
3
- await SettingsPage.darkModeToggle.shouldBeVisible();
4
- await SettingsPage.toggleDarkMode();
5
-
6
- await SettingsPage.statusMessage.shouldBeVisible();
7
- await SettingsPage.statusMessage.shouldContainText("Settings saved");
8
- });
@@ -1,4 +0,0 @@
1
- export default async function loginUser(u: string, p: string): Promise<void> {
2
- await LoginPage.open();
3
- await LoginPage.login(u, p);
4
- }
@@ -1,4 +0,0 @@
1
- export default async function loginUser(u: string, p: string): Promise<void> {
2
- await LoginPage.open();
3
- await LoginPage.login(u, p);
4
- }
@@ -1,5 +0,0 @@
1
- export default async function searchProduct(query: string): Promise<void> {
2
- await ProductPage.open();
3
- await Spectra.type(ProductPage.searchInput, query);
4
- await Spectra.pressKey("Enter");
5
- }
@@ -1,5 +0,0 @@
1
- export default async function searchProduct(query: string): Promise<void> {
2
- await ProductPage.open();
3
- await Spectra.type(ProductPage.searchInput, query);
4
- await Spectra.pressKey("Enter");
5
- }
@@ -1,6 +0,0 @@
1
- export default async function verifyOtp(otp: string): Promise<void> {
2
- const otpInput = await $('~otp_input');
3
- await otpInput.setValue(otp);
4
- const verifyBtn = await $('~verify_btn');
5
- await verifyBtn.click();
6
- }
@@ -1,6 +0,0 @@
1
- export default async function verifyOtp(otp: string): Promise<void> {
2
- const otpInput = await $('#otp');
3
- await otpInput.setValue(otp);
4
- const verifyBtn = await $('#verify-btn');
5
- await verifyBtn.click();
6
- }
@@ -1 +0,0 @@
1
- {"username": "tomsmith", "role": "admin"}
@@ -1,4 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Global before setup (executed once before all suites)
3
- await browser.maximizeWindow();
4
- }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "auth-e2e",
3
- "version": "1.0.0",
4
- "private": true,
5
- "type": "module",
6
- "scripts": {
7
- "test": "spectra run",
8
- "type-check": "tsc -b"
9
- },
10
- "devDependencies": {
11
- "@testspectra/cli": "workspace:*",
12
- "@testspectra/shared-testing": "workspace:*",
13
- "@types/node": "^20.14.0",
14
- "@wdio/globals": "^9.2.8",
15
- "@wdio/mocha-framework": "^9.2.8",
16
- "webdriverio": "^9.2.8",
17
- "typescript": "^5.4.5"
18
- }
19
- }
@@ -1,32 +0,0 @@
1
- export default class LoginPage {
2
- static get usernameInput(): ChainablePromiseElement {
3
- return $('~username_input');
4
- }
5
-
6
- static get passwordInput(): ChainablePromiseElement {
7
- return $('~password_input');
8
- }
9
-
10
- static get rememberMeCheckbox(): ChainablePromiseElement {
11
- return $('~remember_me_checkbox');
12
- }
13
-
14
- static get submitButton(): ChainablePromiseElement {
15
- return $('~login_button');
16
- }
17
-
18
- static get welcomeText(): ChainablePromiseElement {
19
- return $('~welcome_text');
20
- }
21
-
22
- static async open() {
23
- // Mobile app launch handled by Appium capabilities
24
- }
25
-
26
- static async login(username: string, pass: string) {
27
- await Spectra.waitForElement(this.usernameInput);
28
- await Spectra.type(this.usernameInput, username, { clearFirst: true });
29
- await Spectra.type(this.passwordInput, pass, { clearFirst: true });
30
- await Spectra.click(this.submitButton);
31
- }
32
- }
@@ -1,32 +0,0 @@
1
- export default class LoginPage {
2
- static get usernameInput(): ChainablePromiseElement {
3
- return $('#username');
4
- }
5
-
6
- static get passwordInput(): ChainablePromiseElement {
7
- return $('#password');
8
- }
9
-
10
- static get rememberMeCheckbox(): ChainablePromiseElement {
11
- return $('#remember-me');
12
- }
13
-
14
- static get submitButton(): ChainablePromiseElement {
15
- return $('button[type="submit"]');
16
- }
17
-
18
- static get flashAlert(): ChainablePromiseElement {
19
- return $('#flash');
20
- }
21
-
22
- static async open() {
23
- await Spectra.navigate('/login');
24
- }
25
-
26
- static async login(username: string, pass: string) {
27
- await Spectra.waitForElement(this.usernameInput);
28
- await Spectra.type(this.usernameInput, username, { clearFirst: true });
29
- await Spectra.type(this.passwordInput, pass, { clearFirst: true });
30
- await Spectra.click(this.submitButton);
31
- }
32
- }
@@ -1,26 +0,0 @@
1
- export default class SettingsPage {
2
- static get darkModeToggle(): ChainablePromiseElement {
3
- return $('[data-testid="dark-mode-toggle"]');
4
- }
5
-
6
- static get languageDropdown(): ChainablePromiseElement {
7
- return $('[data-testid="language-select"]');
8
- }
9
-
10
- static get saveButton(): ChainablePromiseElement {
11
- return $('[data-testid="save-settings"]');
12
- }
13
-
14
- static get statusMessage(): ChainablePromiseElement {
15
- return $('[data-testid="status-message"]');
16
- }
17
-
18
- static async open() {
19
- await Spectra.navigate('/settings');
20
- }
21
-
22
- static async toggleDarkMode() {
23
- await Spectra.click(this.darkModeToggle);
24
- await Spectra.click(this.saveButton);
25
- }
26
- }
@@ -1,6 +0,0 @@
1
- it("should authenticate user on Android Appium device", async () => {
2
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
3
-
4
- await LoginPage.welcomeText.shouldBeVisible();
5
- await LoginPage.welcomeText.shouldContainText("Welcome");
6
- });
@@ -1,6 +0,0 @@
1
- it("should authenticate user on iOS Appium device", async () => {
2
- await Step.loginUser("tomsmith", "SuperSecretPassword!");
3
-
4
- await LoginPage.welcomeText.shouldBeVisible();
5
- await LoginPage.welcomeText.shouldContainText("Welcome");
6
- });
@@ -1,19 +0,0 @@
1
- it("should authenticate user and verify flash message across specific platforms", async () => {
2
- // 1. Global Fixtures (Module Fixture + Shared Workspace Fixture)
3
- await browser.intercept("/api/status", "GET", Fixture.userData);
4
-
5
- // 2. Global Shared Action from shared/testing (dismiss global banner if present)
6
- await Spectra.dismissBanner();
7
-
8
- // 3. Navigation via Module Page Object & Shared Page Object
9
- await LoginPage.open();
10
- await NavigationBar.goToHome();
11
- await LoginPage.open();
12
-
13
- // 4. High-level business flow via Shared Step from shared/testing
14
- await Step.loginAsAdmin();
15
-
16
- // 5. Direct callable assertion on Page Object element
17
- await LoginPage.flashAlert.shouldBeVisible();
18
- await LoginPage.flashAlert.shouldContainText("You logged into a secure area!");
19
- });
@@ -1,5 +0,0 @@
1
- it("should toggle remember me checkbox on Android", async () => {
2
- await LoginPage.open();
3
- await LoginPage.rememberMeCheckbox.shouldBeVisible();
4
- await Spectra.click(LoginPage.rememberMeCheckbox);
5
- });
@@ -1,5 +0,0 @@
1
- it("should toggle remember me checkbox on Web", async () => {
2
- await LoginPage.open();
3
- await LoginPage.rememberMeCheckbox.shouldBeVisible();
4
- await Spectra.click(LoginPage.rememberMeCheckbox);
5
- });
@@ -1,3 +0,0 @@
1
- export default async function (): Promise<void> {
2
- // Setup Android Appium capabilities
3
- }