@sun-asterisk/sungen 3.2.0-beta.141 → 3.2.0-beta.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capabilities/context-router.d.ts +11 -2
- package/dist/capabilities/context-router.d.ts.map +1 -1
- package/dist/capabilities/context-router.js +10 -3
- package/dist/capabilities/context-router.js.map +1 -1
- package/dist/capabilities/discover.js +1 -1
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts +54 -0
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts.map +1 -0
- package/dist/generators/test-generator/adapters/appium/appium-adapter.js +52 -0
- package/dist/generators/test-generator/adapters/appium/appium-adapter.js.map +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/after-all.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/after-each.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/before-all.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/before-each.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/imports.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/scenario.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/alert-accept-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/alert-dismiss-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/check-action.hbs +10 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/clear-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-select-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/dismiss-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +6 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/drag-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/expand-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/fill-action.hbs +14 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/fill-editor-action.hbs +12 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +6 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/frame-exit-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hide-keyboard-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/keyboard-global-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/press-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/radio-select-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +19 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/select-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/table-action-in-row.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/uncheck-action.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/upload-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-page.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-role-with-data.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-role.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/alert-text-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/attribute-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/clipboard-text-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/column-cell-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/contain-text-assertion.hbs +14 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/count-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/empty-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/enabled-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/focused-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/have-text-assertion.hbs +15 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +12 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/list-item-count-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/loading-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/page-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/route-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/selected-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/sorted-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-column-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-empty.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-match-data.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-count.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-not-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/background-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/grant-permission-action.hbs +11 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/open-notifications-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/pull-to-refresh-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/rotate-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/set-clipboard-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/swipe-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/tap-top-action.hbs +24 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/navigation.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/wait-for-element-with-text.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/wait-for-element.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/wait-timeout.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/appium-selector-expr.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/appium-selector.hbs +15 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +8 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/setup/application-running.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/setup/clear-auth.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/setup/clear-browser-state.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/setup/clear-database.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/setup/user-login-todo.hbs +2 -0
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +226 -0
- package/dist/generators/test-generator/adapters/index.d.ts +1 -0
- package/dist/generators/test-generator/adapters/index.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/index.js +9 -1
- package/dist/generators/test-generator/adapters/index.js.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts +1 -0
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +7 -37
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +13 -1
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/harness/audit.d.ts +1 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +14 -4
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/catalog/drivers.yaml +1 -1
- package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
- package/dist/orchestrator/ai-rules-updater.js +8 -0
- package/dist/orchestrator/ai-rules-updater.js.map +1 -1
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md +184 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-mobile-gestures.md +109 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-fix-mobile.md +316 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +184 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-mobile-gestures.md +109 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +316 -0
- package/dist/orchestrator/templates/env.appium.example +25 -0
- package/dist/orchestrator/templates/specs-pw-shape-reporter.ts +92 -0
- package/dist/orchestrator/templates/wdio.conf.ts +295 -0
- package/dist/utils/selector-types.d.ts +1 -1
- package/dist/utils/selector-types.d.ts.map +1 -1
- package/dist/utils/selector-types.js +5 -0
- package/dist/utils/selector-types.js.map +1 -1
- package/package.json +3 -3
- package/src/capabilities/context-router.ts +15 -3
- package/src/capabilities/discover.ts +1 -1
- package/src/generators/test-generator/adapters/appium/appium-adapter.ts +57 -0
- package/src/generators/test-generator/adapters/appium/templates/after-all.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/after-each.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/before-all.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/before-each.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/imports.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/scenario.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/alert-accept-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/alert-dismiss-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/check-action.hbs +10 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/clear-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-select-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/dismiss-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +6 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/drag-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/expand-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/fill-action.hbs +14 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/fill-editor-action.hbs +12 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +6 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/frame-exit-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hide-keyboard-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/keyboard-global-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/press-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/radio-select-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/scroll-action.hbs +19 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/select-action.hbs +5 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/table-action-in-row.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/toggle-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/uncheck-action.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/upload-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-page.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-role-with-data.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/wait-for-role.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/alert-text-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/attribute-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/checked-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/clipboard-text-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/column-cell-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/contain-text-assertion.hbs +14 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/count-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/empty-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/enabled-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/focused-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/have-text-assertion.hbs +15 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +12 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/list-item-count-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/loading-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/not-checked-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/page-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/route-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/selected-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/sorted-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-column-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-empty.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-match-data.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-count.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/table-row-not-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/background-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/grant-permission-action.hbs +11 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +5 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/open-notifications-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +5 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/pull-to-refresh-action.hbs +5 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/rotate-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/set-clipboard-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/swipe-action.hbs +5 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/tap-top-action.hbs +24 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/navigation/navigation.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/navigation/wait-for-element-with-text.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/navigation/wait-for-element.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/navigation/wait-timeout.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/appium-selector-expr.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/appium-selector.hbs +15 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +8 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/setup/application-running.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/setup/clear-auth.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/setup/clear-browser-state.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/setup/clear-database.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/setup/user-login-todo.hbs +2 -0
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +226 -0
- package/src/generators/test-generator/adapters/index.ts +7 -0
- package/src/generators/test-generator/step-mapper.ts +8 -5
- package/src/generators/test-generator/template-engine.ts +13 -1
- package/src/harness/audit.ts +12 -4
- package/src/harness/catalog/drivers.yaml +1 -1
- package/src/orchestrator/ai-rules-updater.ts +8 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mobile.md +184 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-mobile-gestures.md +109 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-selector-fix-mobile.md +316 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mobile.md +184 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-mobile-gestures.md +109 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix-mobile.md +316 -0
- package/src/orchestrator/templates/env.appium.example +25 -0
- package/src/orchestrator/templates/specs-pw-shape-reporter.ts +92 -0
- package/src/orchestrator/templates/wdio.conf.ts +295 -0
- package/src/utils/selector-types.ts +5 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/table-empty.hbs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
{{!-- Table/column steps target HTML <table> ARIA roles — not available on native mobile. --}}
|
|
2
|
+
throw new Error("[sungen] table/column steps target HTML table roles and are not supported on the appium adapter. Use list / accessibility-id assertions, or tag this scenario @manual.");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
await expect({{> locator}}).toBeDisplayed();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
await driver.background({{seconds}});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{{!-- Grant a runtime permission to the app under test so an OS dialog can't block the flow.
|
|
2
|
+
Android: `mobile: changePermissions` (appPackage read from the running session — multi-app safe).
|
|
3
|
+
iOS (Simulator only): `mobile: setPermission` with the bundle id from the active app.
|
|
4
|
+
iOS PREREQUISITE: the `applesimutils` binary (`brew tap wix/brew && brew install applesimutils`)
|
|
5
|
+
— without it the driver fails loud with that exact install hint. --}}
|
|
6
|
+
if (driver.isIOS) {
|
|
7
|
+
const __app = (await driver.execute('mobile: activeAppInfo')) as { bundleId?: string };
|
|
8
|
+
await driver.execute('mobile: setPermission', { bundleId: __app?.bundleId, access: { '{{iosService}}': 'yes' } });
|
|
9
|
+
} else {
|
|
10
|
+
await driver.execute('mobile: changePermissions', { action: 'grant', appPackage: await driver.getCurrentPackage(), permissions: ['{{permission}}'] });
|
|
11
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
await (async () => { const e = await {{> locator}};
|
|
2
|
+
// XCUITest `mobile: touchAndHold` takes SECONDS; UiAutomator2 `mobile: longClickGesture` takes ms.
|
|
3
|
+
if (driver.isIOS) { await driver.execute('mobile: touchAndHold', { elementId: e.elementId, duration: {{durationMs}} / 1000 }); }
|
|
4
|
+
else { await driver.execute('mobile: longClickGesture', { elementId: e.elementId, duration: {{durationMs}} }); }
|
|
5
|
+
})();
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Android-only: XCUITest has no notification-shade automation — fail loud instead of a silent no-op.
|
|
2
|
+
if (driver.isIOS) { throw new Error('[sungen] "open notifications" is Android-only (no XCUITest equivalent) — keep this scenario @platform:android.'); }
|
|
3
|
+
await driver.openNotifications();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
await (async () => { const e = await {{> locator}};
|
|
2
|
+
// XCUITest `mobile: pinch`: scale >1 zooms in, <1 zooms out (velocity sign must match).
|
|
3
|
+
if (driver.isIOS) { await driver.execute('mobile: pinch', { elementId: e.elementId, scale: {{#if zoomOut}}0.5{{else}}2{{/if}}, velocity: {{#if zoomOut}}-1{{else}}1{{/if}} }); }
|
|
4
|
+
else { await driver.execute('mobile: {{#if zoomOut}}pinchCloseGesture{{else}}pinchOpenGesture{{/if}}', { elementId: e.elementId, percent: 0.75 }); }
|
|
5
|
+
})();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
await (async () => { const e = await {{> locator}};
|
|
2
|
+
// Pull-to-refresh = drag the content down. Platform-native swipe per OS.
|
|
3
|
+
if (driver.isIOS) { await driver.execute('mobile: swipe', { elementId: e.elementId, direction: 'down' }); }
|
|
4
|
+
else { await driver.execute('mobile: swipeGesture', { elementId: e.elementId, direction: 'down', percent: 0.9, speed: 5000 }); }
|
|
5
|
+
})();
|
package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/rotate-action.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
await driver.setOrientation('{{orientation}}');
|
package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/swipe-action.hbs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
await (async () => { const e = await {{> locator}};
|
|
2
|
+
// Platform-native swipe: XCUITest `mobile: swipe` (direction only) vs UiAutomator2 `mobile: swipeGesture`.
|
|
3
|
+
if (driver.isIOS) { await driver.execute('mobile: swipe', { elementId: e.elementId, direction: '{{direction}}' }); }
|
|
4
|
+
else { await driver.execute('mobile: swipeGesture', { elementId: e.elementId, direction: '{{direction}}', percent: 0.75 }); }
|
|
5
|
+
})();
|
package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/tap-top-action.hbs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
await (async () => {
|
|
2
|
+
const e = await {{> locator}};
|
|
3
|
+
// Visible-point tap: tap near the TOP of the element (its centre may sit under a floating bottom
|
|
4
|
+
// bar). getElementRect is W3C-standard → works on BOTH Android and iOS (the old `bounds` attribute
|
|
5
|
+
// is Android-only and throws on iOS).
|
|
6
|
+
const r = await driver.getElementRect(e.elementId);
|
|
7
|
+
if (r && r.width) {
|
|
8
|
+
if (driver.isIOS) {
|
|
9
|
+
// iOS: tap near the TOP-LEFT. On shorter iOS viewports a bottom-row card peeks only a few pt
|
|
10
|
+
// above the floating bottom nav, and the nav's raised centre FAB occludes the top-CENTRE sliver
|
|
11
|
+
// — verified live on the converter: top-centre (+40pt) hit the nav/FAB, top-left (+~10pt,
|
|
12
|
+
// x inset 20%) opened the tool. Top-left is still inside the element for fully-visible ones.
|
|
13
|
+
const x = Math.round(r.x + Math.max(8, r.width * 0.2));
|
|
14
|
+
const y = Math.round(r.y + Math.min(10, r.height / 3));
|
|
15
|
+
await driver.execute('mobile: tap', { x, y });
|
|
16
|
+
} else {
|
|
17
|
+
const x = Math.round(r.x + r.width / 2);
|
|
18
|
+
const y = Math.round(r.y + Math.min(40, r.height / 3));
|
|
19
|
+
await driver.execute('mobile: clickGesture', { x, y });
|
|
20
|
+
}
|
|
21
|
+
} else {
|
|
22
|
+
await e.click();
|
|
23
|
+
}
|
|
24
|
+
})();
|
package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/navigation.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// App launched via wdio capabilities{{#if path}} — entry: {{path}}{{/if}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{{#if (eq state 'hidden')}}await $('//*[contains(@content-desc,"{{escapeQuotes dataValue}}") or contains(@text,"{{escapeQuotes dataValue}}")]').waitForDisplayed({ reverse: true });{{else}}await $('//*[contains(@content-desc,"{{escapeQuotes dataValue}}") or contains(@text,"{{escapeQuotes dataValue}}")]').waitForDisplayed();{{/if}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{{#if (eq state 'hidden')}}await {{> locator}}.waitForDisplayed({ reverse: true });{{else}}await {{> locator}}.waitForDisplayed();{{/if}}
|
package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/wait-timeout.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
await driver.pause({{duration}});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{{~!--
|
|
2
|
+
Emits a JS expression for a WDIO selector argument (note: it INCLUDES the surrounding quotes,
|
|
3
|
+
unlike appium-selector which emits the raw string). Two forms:
|
|
4
|
+
- per-platform variant (androidSelector/iosSelector set): a runtime ternary so one @platform:mobile
|
|
5
|
+
spec resolves the right native selector per OS — `(driver.isIOS ? '<ios>' : '<android>')`.
|
|
6
|
+
- normal: a single quoted literal — `'<selector>'`.
|
|
7
|
+
--~}}
|
|
8
|
+
{{~#if androidSelector~}}(driver.isIOS ? '{{> appium-selector iosSelector}}' : '{{> appium-selector androidSelector}}'){{~else~}}'{{> appium-selector}}'{{~/if~}}
|
package/dist/generators/test-generator/adapters/appium/templates/steps/partials/appium-selector.hbs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{{~#switch strategy~}}
|
|
2
|
+
{{~#case 'accessibility-id'}}~{{escapeQuotes value}}{{/case~}}
|
|
3
|
+
{{~#case 'testid'}}~{{escapeQuotes value}}{{/case~}}
|
|
4
|
+
{{~#case 'text'}}~{{escapeQuotes value}}{{/case~}}
|
|
5
|
+
{{~#case 'label'}}~{{escapeQuotes value}}{{/case~}}
|
|
6
|
+
{{~#case 'placeholder'}}~{{escapeQuotes value}}{{/case~}}
|
|
7
|
+
{{~#case 'role'}}~{{#if name}}{{escapeQuotes name}}{{else}}{{escapeQuotes value}}{{/if}}{{/case~}}
|
|
8
|
+
{{~#case 'xpath'}}{{escapeQuotes value}}{{/case~}}
|
|
9
|
+
{{~#case 'android-uiautomator'}}android={{escapeQuotes value}}{{/case~}}
|
|
10
|
+
{{~#case 'ios-predicate'}}-ios predicate string:{{escapeQuotes value}}{{/case~}}
|
|
11
|
+
{{~#case 'id'}}id={{escapeQuotes value}}{{/case~}}
|
|
12
|
+
{{~#case 'locator'}}{{escapeQuotes value}}{{/case~}}
|
|
13
|
+
{{~#case 'css'}}{{escapeQuotes value}}{{/case~}}
|
|
14
|
+
{{~#default}}~{{escapeQuotes value}}{{/default~}}
|
|
15
|
+
{{~/switch~}}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{{!-- Parent scoping (mobile): when a step says `[Child] type in [Parent] parentType`, parentLocator
|
|
2
|
+
is the parent rendered as an Appium element ($('~parent')); we chain the child under it so WDIO
|
|
3
|
+
searches from the parent context (findElementFromElement). `scope` (a parent content-desc from
|
|
4
|
+
YAML) is the fallback parent. Note: a child xpath beginning with `//` is ABSOLUTE in Appium even
|
|
5
|
+
when chained — use accessibility-id / -android uiautomator children for true scoping, or `.//`.
|
|
6
|
+
The selector argument comes from appium-selector-expr (it carries its OWN quotes, or a per-platform
|
|
7
|
+
`driver.isIOS ? … : …` ternary), so it is NOT wrapped in quotes here. --}}
|
|
8
|
+
{{~#if parentLocator~}}{{parentLocator}}.{{#if nth}}$$({{> appium-selector-expr}})[{{nth}}]{{else}}$({{> appium-selector-expr}}){{/if}}{{~else~}}{{#if scope}}$('~{{escapeQuotes scope}}').{{#if nth}}$$({{> appium-selector-expr}})[{{nth}}]{{else}}$({{> appium-selector-expr}}){{/if}}{{else}}{{#if nth}}$$({{> appium-selector-expr}})[{{nth}}]{{else}}$({{> appium-selector-expr}}){{/if}}{{/if}}{{~/if~}}
|
package/dist/generators/test-generator/adapters/appium/templates/steps/setup/application-running.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{{!-- The app under test is launched in the before hook (activateApp). No action needed. --}}
|
package/dist/generators/test-generator/adapters/appium/templates/steps/setup/clear-browser-state.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{{!-- No browser on mobile; app state is governed by Appium reset capabilities. No per-step action. --}}
|
package/dist/generators/test-generator/adapters/appium/templates/steps/setup/clear-database.hbs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{{!-- TODO: reset backend state via a test API/script (same as web). No mobile-specific action. --}}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
{{#if platform}}
|
|
2
|
+
// sungen:platform={{platform}}
|
|
3
|
+
{{/if}}
|
|
4
|
+
{{#if runtimeData}}
|
|
5
|
+
|
|
6
|
+
const testData = TestDataLoader.load('{{screenName}}', '{{featureFileName}}');
|
|
7
|
+
{{/if}}
|
|
8
|
+
{{#if singleAuthRole}}
|
|
9
|
+
import * as fs from 'node:fs';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
|
|
12
|
+
// ── @auth (mobile) ──────────────────────────────────────────────────────────
|
|
13
|
+
// App-agnostic auth: the framework supplies the MECHANISM; each app supplies the DATA via a
|
|
14
|
+
// gitignored contract at specs/.auth-mobile/<role>.json:
|
|
15
|
+
// { "authedMarker": {type,value}, // present ⟺ already logged in
|
|
16
|
+
// "credentials": { ... }, // referenced as {{key}} in step values
|
|
17
|
+
// "loginSteps": [ {action:"tap"|"fill"|"wait", selector:{type,value}, value?} ] }
|
|
18
|
+
// ensureAuth is idempotent (skips when already logged in) and fail-loud (throws → the @auth spec is
|
|
19
|
+
// blocked, never silently run logged-out). See MOBILE_INTEGRATION_PLAN.md §Phase 5.1.
|
|
20
|
+
function __authSelector(s: { type: string; value: string }): string {
|
|
21
|
+
switch (s.type) {
|
|
22
|
+
case 'accessibility-id': case 'testid': case 'label': case 'placeholder': case 'text': return '~' + s.value;
|
|
23
|
+
case 'android-uiautomator': return 'android=' + s.value;
|
|
24
|
+
case 'ios-predicate': return '-ios predicate string:' + s.value;
|
|
25
|
+
case 'id': return 'id=' + s.value;
|
|
26
|
+
case 'xpath': case 'locator': default: return s.value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function __authInterpolate(v: string, creds: Record<string, unknown> = {}): string {
|
|
30
|
+
return String(v).replace(/\{\{\s*(\w+)\s*\}\}/g, (_m, k) => (creds[k] != null ? String(creds[k]) : ''));
|
|
31
|
+
}
|
|
32
|
+
// Robust mobile text entry: Flutter often ignores a single setValue, and W3C key-streams can drop a
|
|
33
|
+
// char — so we type, read back, and retry once. Masked (password) fields can't be verified → trusted.
|
|
34
|
+
async function __robustFill(el: WebdriverIO.Element, value: string): Promise<void> {
|
|
35
|
+
await el.click();
|
|
36
|
+
try { await el.clearValue(); } catch { /* not clearable */ }
|
|
37
|
+
await el.setValue(value);
|
|
38
|
+
let got = '';
|
|
39
|
+
try { got = (await el.getText()) || (await el.getAttribute('text')) || ''; } catch { /* ignore */ }
|
|
40
|
+
const masked = /[•●*]/.test(got);
|
|
41
|
+
if (!masked && got.replace(/\s/g, '') !== value.replace(/\s/g, '')) {
|
|
42
|
+
try { await el.clearValue(); } catch { /* ignore */ }
|
|
43
|
+
await el.addValue(value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function __ensureAuth(role: string): Promise<void> {
|
|
47
|
+
const cfgPath = path.join(process.cwd(), 'specs', '.auth-mobile', role + '.json');
|
|
48
|
+
const rel = path.relative(process.cwd(), cfgPath);
|
|
49
|
+
if (!fs.existsSync(cfgPath)) {
|
|
50
|
+
throw new Error(`@auth:${role} requires ${rel} (loginSteps + credentials + a login-state marker). See MOBILE_INTEGRATION_PLAN.md §Phase 5.1.`);
|
|
51
|
+
}
|
|
52
|
+
const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8'));
|
|
53
|
+
const present = async (marker: { type: string; value: string } | undefined, timeout = 6000): Promise<boolean> => {
|
|
54
|
+
if (!marker) return false;
|
|
55
|
+
try { await $(__authSelector(marker)).waitForDisplayed({ timeout }); return true; }
|
|
56
|
+
catch { return false; }
|
|
57
|
+
};
|
|
58
|
+
const absent = async (marker: { type: string; value: string } | undefined, timeout = 8000): Promise<boolean> => {
|
|
59
|
+
if (!marker) return true;
|
|
60
|
+
try { await $(__authSelector(marker)).waitForDisplayed({ reverse: true, timeout }); return true; }
|
|
61
|
+
catch { return false; }
|
|
62
|
+
};
|
|
63
|
+
const runSteps = async (steps: any[]): Promise<void> => {
|
|
64
|
+
for (const step of (steps || [])) {
|
|
65
|
+
// Selector-less actions first (no element to find).
|
|
66
|
+
if (step.action === 'hideKeyboard') { try { await driver.hideKeyboard(); } catch { /* no keyboard shown */ } continue; }
|
|
67
|
+
if (step.action === 'back') { try { await driver.back(); } catch { /* nothing to dismiss */ } continue; }
|
|
68
|
+
const el = await $(__authSelector(step.selector));
|
|
69
|
+
await el.waitForDisplayed();
|
|
70
|
+
if (step.action === 'fill') await __robustFill(el, __authInterpolate(step.value, cfg.credentials));
|
|
71
|
+
else if (step.action === 'tap') await el.click();
|
|
72
|
+
// 'wait' = just the waitForDisplayed above
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// ── Mode A: navigation-based (preferred) ──────────────────────────────────
|
|
77
|
+
// For apps whose login state is NOT visible on the post-relaunch landing screen (e.g. a Flutter
|
|
78
|
+
// app that always opens on Home). We navigate to a DECISION screen (loginEntrySteps, e.g. My Page
|
|
79
|
+
// → Account Settings) and read `loggedOutMarker` there (present ⟺ logged out, e.g. the Login
|
|
80
|
+
// button). loginSteps then start FROM that decision screen.
|
|
81
|
+
if (cfg.loginEntrySteps && cfg.loggedOutMarker) {
|
|
82
|
+
await runSteps(cfg.loginEntrySteps);
|
|
83
|
+
if (!(await present(cfg.loggedOutMarker, 8000))) return; // logged-out marker absent ⟹ already logged in (noReset)
|
|
84
|
+
await runSteps(cfg.loginSteps);
|
|
85
|
+
// Verify: a credentials error means rejection; the login form staying put (logged-out marker
|
|
86
|
+
// never disappears) means it didn't submit. Success = the form navigated away with no error.
|
|
87
|
+
if (await present(cfg.errorMarker, 3000)) {
|
|
88
|
+
throw new Error(`@auth:${role} login rejected (error shown) — check credentials.email/password in ${rel}.`);
|
|
89
|
+
}
|
|
90
|
+
if (!(await absent(cfg.loggedOutMarker, 8000))) {
|
|
91
|
+
throw new Error(`@auth:${role} login did not complete (still on the login screen) — check loginSteps in ${rel}.`);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ── Mode B: legacy authedMarker (present on the landing screen ⟺ logged in) ──
|
|
97
|
+
const markerPresent = async (): Promise<boolean> => present(cfg.authedMarker, 6000);
|
|
98
|
+
if (await markerPresent()) return; // idempotent — already authenticated (session kept by noReset)
|
|
99
|
+
await runSteps(cfg.loginSteps);
|
|
100
|
+
if (!(await markerPresent())) {
|
|
101
|
+
throw new Error(`@auth:${role} login failed — verify credentials / loginSteps / authedMarker in ${rel}.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
{{/if}}
|
|
105
|
+
|
|
106
|
+
{{#if featureDescription}}
|
|
107
|
+
/**
|
|
108
|
+
* Feature: {{featureName}}
|
|
109
|
+
* {{featureDescription}}
|
|
110
|
+
*/
|
|
111
|
+
{{/if}}
|
|
112
|
+
describe('{{featureName}}', () => {
|
|
113
|
+
{{#if singleAuthRole}}
|
|
114
|
+
// @auth:{{singleAuthRole}} — authenticate ONCE before any scenario; the session persists across
|
|
115
|
+
// the per-scenario relaunch below (noReset:true). Throws (blocks the spec) if login can't be done.
|
|
116
|
+
before(async () => {
|
|
117
|
+
{{#if appPackage}}
|
|
118
|
+
// Relaunch to a known launch screen first — the session may attach to the app in any state.
|
|
119
|
+
// Platform-aware id (NOT the Android literal): on iOS a @platform:mobile feature's app is the
|
|
120
|
+
// dual-id bundle id — a literal appPackage here would throw and block the whole spec.
|
|
121
|
+
// (__resolveAppId is a hoisted function declaration in this describe scope.)
|
|
122
|
+
const __AUTH_APP__ = __resolveAppId();
|
|
123
|
+
try { await driver.terminateApp(__AUTH_APP__); } catch { /* not running */ }
|
|
124
|
+
await driver.activateApp(__AUTH_APP__);
|
|
125
|
+
{{/if}}
|
|
126
|
+
await __ensureAuth('{{singleAuthRole}}');
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
{{/if}}
|
|
130
|
+
{{#if appPackage}}
|
|
131
|
+
// Multi-app: this feature's app (from the `Path:` line). Reset to its launch screen before each
|
|
132
|
+
// scenario so one `wdio run` can host screens from different apps — each spec launches its own.
|
|
133
|
+
// The `Path:` holds the ANDROID package (or, for an @platform:ios feature, the iOS bundle id).
|
|
134
|
+
const __APP_PKG_DEFAULT__ = '{{appPackage}}';
|
|
135
|
+
{{#if iosBundleId}}
|
|
136
|
+
// Per-feature iOS bundle id from the dual-id `Path: <androidPkg>/<activity> | <iosBundleId>` —
|
|
137
|
+
// app ids differ per OS (e.g. an iOS `.dev` flavor), and keeping it in the feature file makes the
|
|
138
|
+
// spec self-describing + lets one iOS run host multiple apps.
|
|
139
|
+
const __IOS_BUNDLE__ = '{{iosBundleId}}';
|
|
140
|
+
{{/if}}
|
|
141
|
+
// Platform-aware app id: an @platform:mobile spec runs on BOTH OSes. On iOS prefer the feature's own
|
|
142
|
+
// bundle id (dual-id Path), then the session cap (IOS_BUNDLE_ID in wdio.conf), then the Path value;
|
|
143
|
+
// on Android (or any non-iOS session) use the Path package unchanged.
|
|
144
|
+
function __resolveAppId(): string {
|
|
145
|
+
if (typeof driver !== 'undefined' && driver.isIOS) {
|
|
146
|
+
const caps = (driver.requestedCapabilities || {}) as Record<string, string>;
|
|
147
|
+
return {{#if iosBundleId}}__IOS_BUNDLE__ || {{/if}}caps['appium:bundleId'] || caps['bundleId'] || __APP_PKG_DEFAULT__;
|
|
148
|
+
}
|
|
149
|
+
return __APP_PKG_DEFAULT__;
|
|
150
|
+
}
|
|
151
|
+
beforeEach(async () => {
|
|
152
|
+
const __APP_PKG__ = __resolveAppId();
|
|
153
|
+
try { await driver.terminateApp(__APP_PKG__); } catch { /* app may not be running yet */ }
|
|
154
|
+
await driver.activateApp(__APP_PKG__);
|
|
155
|
+
// Settle after a cold (re)launch: a Flutter app first renders a BLANK accessibility skeleton
|
|
156
|
+
// (nested FrameLayout/View, no content-desc) for several seconds before the real tree appears.
|
|
157
|
+
// That skeleton is static, so a "two equal reads" check alone false-positives on it and we'd
|
|
158
|
+
// proceed before any element exists (→ every find fails). So require the tree to (a) contain
|
|
159
|
+
// rendered content — at least one non-empty content-desc/text — AND (b) be stable across two
|
|
160
|
+
// reads. A generous timeout covers slow cold renders on a stressed emulator. Best-effort: a
|
|
161
|
+
// timeout never fails the scenario, it just falls through to the step's own auto-wait.
|
|
162
|
+
let __prevSrc = '';
|
|
163
|
+
await driver
|
|
164
|
+
.waitUntil(
|
|
165
|
+
async () => {
|
|
166
|
+
const src = await driver.getPageSource();
|
|
167
|
+
const hasContent = /content-desc="[^"]+"|\btext="[^"]+"/.test(src);
|
|
168
|
+
const stable = hasContent && src === __prevSrc;
|
|
169
|
+
__prevSrc = src;
|
|
170
|
+
return stable;
|
|
171
|
+
},
|
|
172
|
+
{ timeout: 30000, interval: 400, timeoutMsg: 'UI did not settle (no rendered content)' },
|
|
173
|
+
)
|
|
174
|
+
.catch(() => { /* best-effort — fall through to per-step auto-wait */ });
|
|
175
|
+
{{#if backgroundSteps}}
|
|
176
|
+
// Background runs here (inside beforeEach) — the app resets to its launch screen every scenario,
|
|
177
|
+
// so Background setup (nav, dismiss launch promos…) must re-run after each relaunch, not once.
|
|
178
|
+
{{#each backgroundSteps}}
|
|
179
|
+
{{#if comment}}
|
|
180
|
+
// {{comment}}
|
|
181
|
+
{{/if}}
|
|
182
|
+
{{code}}
|
|
183
|
+
{{/each}}
|
|
184
|
+
{{/if}}
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
{{/if}}
|
|
188
|
+
{{#unless appPackage}}
|
|
189
|
+
{{#if backgroundSteps}}
|
|
190
|
+
before(async () => {
|
|
191
|
+
{{#each backgroundSteps}}
|
|
192
|
+
{{#if comment}}
|
|
193
|
+
// {{comment}}
|
|
194
|
+
{{/if}}
|
|
195
|
+
{{code}}
|
|
196
|
+
{{/each}}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
{{/if}}
|
|
200
|
+
{{/unless}}
|
|
201
|
+
{{#if beforeAll}}
|
|
202
|
+
{{beforeAll}}
|
|
203
|
+
|
|
204
|
+
{{/if}}
|
|
205
|
+
{{#if afterEach}}
|
|
206
|
+
{{afterEach}}
|
|
207
|
+
|
|
208
|
+
{{/if}}
|
|
209
|
+
{{#if afterAll}}
|
|
210
|
+
{{afterAll}}
|
|
211
|
+
|
|
212
|
+
{{/if}}
|
|
213
|
+
{{#if authGroups}}
|
|
214
|
+
{{#each authGroups}}
|
|
215
|
+
{{#each scenarios}}
|
|
216
|
+
{{this}}
|
|
217
|
+
|
|
218
|
+
{{/each}}
|
|
219
|
+
{{/each}}
|
|
220
|
+
{{else}}
|
|
221
|
+
{{#each scenarios}}
|
|
222
|
+
{{this}}
|
|
223
|
+
|
|
224
|
+
{{/each}}
|
|
225
|
+
{{/if}}
|
|
226
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { TestGeneratorAdapter, TestFileData, ScenarioData, StepTemplateData, LocatorExpression } from './adapter-interface';
|
|
2
2
|
export { AdapterRegistry, adapterRegistry, DriverNotInstalledError } from './adapter-registry';
|
|
3
3
|
export { PlaywrightAdapter } from './playwright/playwright-adapter';
|
|
4
|
+
export { AppiumAdapter } from './appium/appium-adapter';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5H,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generators/test-generator/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5H,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PlaywrightAdapter = exports.DriverNotInstalledError = exports.adapterRegistry = exports.AdapterRegistry = void 0;
|
|
3
|
+
exports.AppiumAdapter = exports.PlaywrightAdapter = exports.DriverNotInstalledError = exports.adapterRegistry = exports.AdapterRegistry = void 0;
|
|
4
4
|
var adapter_registry_1 = require("./adapter-registry");
|
|
5
5
|
Object.defineProperty(exports, "AdapterRegistry", { enumerable: true, get: function () { return adapter_registry_1.AdapterRegistry; } });
|
|
6
6
|
Object.defineProperty(exports, "adapterRegistry", { enumerable: true, get: function () { return adapter_registry_1.adapterRegistry; } });
|
|
7
7
|
Object.defineProperty(exports, "DriverNotInstalledError", { enumerable: true, get: function () { return adapter_registry_1.DriverNotInstalledError; } });
|
|
8
8
|
var playwright_adapter_1 = require("./playwright/playwright-adapter");
|
|
9
9
|
Object.defineProperty(exports, "PlaywrightAdapter", { enumerable: true, get: function () { return playwright_adapter_1.PlaywrightAdapter; } });
|
|
10
|
+
var appium_adapter_1 = require("./appium/appium-adapter");
|
|
11
|
+
Object.defineProperty(exports, "AppiumAdapter", { enumerable: true, get: function () { return appium_adapter_1.AppiumAdapter; } });
|
|
10
12
|
// Auto-register built-in adapters
|
|
11
13
|
const adapter_registry_2 = require("./adapter-registry");
|
|
12
14
|
const playwright_adapter_2 = require("./playwright/playwright-adapter");
|
|
15
|
+
const appium_adapter_2 = require("./appium/appium-adapter");
|
|
13
16
|
adapter_registry_2.adapterRegistry.register('playwright', () => new playwright_adapter_2.PlaywrightAdapter());
|
|
14
17
|
// Phase 2a: platform alias. `web` is the bundled Playwright adapter (back-compat
|
|
15
18
|
// baseline) until it is externalized to @sungen/driver-web in a later cut.
|
|
16
19
|
adapter_registry_2.adapterRegistry.register('web', () => new playwright_adapter_2.PlaywrightAdapter());
|
|
20
|
+
// MOB-2: the Appium codegen adapter — template strings only, NO appium/wdio dep in core.
|
|
21
|
+
// `platform: mobile` (qa/capabilities.yaml) loads @sungen/driver-mobile (the SPI capability)
|
|
22
|
+
// and selects this adapter (the runtime codegen). `appium` is the explicit alias.
|
|
23
|
+
adapter_registry_2.adapterRegistry.register('mobile', () => new appium_adapter_2.AppiumAdapter());
|
|
24
|
+
adapter_registry_2.adapterRegistry.register('appium', () => new appium_adapter_2.AppiumAdapter());
|
|
17
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/adapters/index.ts"],"names":[],"mappings":";;;AACA,uDAA+F;AAAtF,mHAAA,eAAe,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,2HAAA,uBAAuB,OAAA;AAClE,sEAAoE;AAA3D,uHAAA,iBAAiB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/generators/test-generator/adapters/index.ts"],"names":[],"mappings":";;;AACA,uDAA+F;AAAtF,mHAAA,eAAe,OAAA;AAAE,mHAAA,eAAe,OAAA;AAAE,2HAAA,uBAAuB,OAAA;AAClE,sEAAoE;AAA3D,uHAAA,iBAAiB,OAAA;AAC1B,0DAAwD;AAA/C,+GAAA,aAAa,OAAA;AAEtB,kCAAkC;AAClC,yDAAqD;AACrD,wEAAoE;AACpE,4DAAwD;AAExD,kCAAe,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,sCAAiB,EAAE,CAAC,CAAC;AACtE,iFAAiF;AACjF,2EAA2E;AAC3E,kCAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,sCAAiB,EAAE,CAAC,CAAC;AAC/D,yFAAyF;AACzF,6FAA6F;AAC7F,kFAAkF;AAClF,kCAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,8BAAa,EAAE,CAAC,CAAC;AAC9D,kCAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,8BAAa,EAAE,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-mapper.d.ts","sourceRoot":"","sources":["../../../src/generators/test-generator/step-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAO/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAe;IAC5C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkB;IACtC,8EAA8E;IAC9E,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAc;gBAEvB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO;
|
|
1
|
+
{"version":3,"file":"step-mapper.d.ts","sourceRoot":"","sources":["../../../src/generators/test-generator/step-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAO/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAe;IAC5C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAkB;IACtC,8EAA8E;IAC9E,OAAO,CAAC,kBAAkB,CAAmB;IAC7C,uEAAuE;IACvE,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAc;gBAEvB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAqB7K;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlE;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM1C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKnC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAY7C;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIpC;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmH3D;;;;;;OAMG;IACH,OAAO,CAAC,gCAAgC;IA8CxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAoB7B"}
|
|
@@ -1,44 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.StepMapper = void 0;
|
|
37
4
|
const template_engine_1 = require("./template-engine");
|
|
5
|
+
const adapters_1 = require("./adapters");
|
|
38
6
|
const patterns_1 = require("./patterns");
|
|
39
7
|
const selector_resolver_1 = require("./utils/selector-resolver");
|
|
40
8
|
const data_resolver_1 = require("./utils/data-resolver");
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
9
|
/**
|
|
43
10
|
* StepMapper - Orchestrates step-to-code conversion using pattern registry
|
|
44
11
|
* Refactored from 907 lines to < 200 lines
|
|
@@ -59,9 +26,12 @@ class StepMapper {
|
|
|
59
26
|
this.featureName = options.featureName;
|
|
60
27
|
this.screenName = options.screenName;
|
|
61
28
|
this.featurePath = options.featurePath;
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
29
|
+
// Render step templates from the ACTIVE adapter's template set (web→Playwright,
|
|
30
|
+
// mobile→Appium). The adapter owns its templatesDir; resolving it here keeps step
|
|
31
|
+
// rendering and the file skeleton (code-generator) on the same framework.
|
|
32
|
+
const framework = options.framework || 'web';
|
|
33
|
+
const templatesDir = adapters_1.adapterRegistry.getAdapter(framework).templatesDir;
|
|
34
|
+
this.templateEngine = new template_engine_1.TemplateEngine(templatesDir);
|
|
65
35
|
this.patternRegistry = new patterns_1.PatternRegistry();
|
|
66
36
|
this.selectorResolver = new selector_resolver_1.SelectorResolver(undefined, options.screenName);
|
|
67
37
|
this.dataResolver = new data_resolver_1.DataResolver(undefined, options.screenName, options.runtimeData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-mapper.js","sourceRoot":"","sources":["../../../src/generators/test-generator/step-mapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step-mapper.js","sourceRoot":"","sources":["../../../src/generators/test-generator/step-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/generators/test-generator/template-engine.ts"],"names":[],"mappings":"AAIA,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,WAAW,CAA2B;gBAElC,YAAY,EAAE,MAAM;IAOhC,OAAO,CAAC,eAAe;IAgHvB,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/generators/test-generator/template-engine.ts"],"names":[],"mappings":"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"}
|