swipium 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +171 -0
- package/README.md +173 -280
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +30 -27
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +47 -21
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +2 -2
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +3 -3
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +2 -2
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +2 -2
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/issues.js +10 -10
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +5 -5
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +77 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +2 -2
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +3 -3
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +1 -1
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +17 -17
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +55 -7
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +3 -3
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +5 -5
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +10 -10
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +3 -3
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +1 -1
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +7 -7
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +3 -3
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +14 -25
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +5 -5
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +2 -2
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +13 -7
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +5 -5
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +265 -106
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +71 -26
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +276 -105
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +6 -4
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +20 -8
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +2 -2
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +7 -7
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +35 -14
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +6 -6
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +45 -14
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +6 -6
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +3 -3
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +65 -62
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +300 -36
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +120 -7
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +350 -50
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +2 -2
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +5 -5
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/policy.js +5 -5
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +301 -284
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +1 -1
- package/dist/featureTesting/executionBootstrap.js +29 -30
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +2 -2
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +12 -12
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +7 -7
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +10 -10
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +6 -6
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +4 -4
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +1 -1
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +1 -1
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +11 -11
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +3 -3
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +5 -5
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +11 -11
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +8 -8
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +9 -9
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +5 -5
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +33 -3
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +20 -10
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/pack.js +3 -3
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +111 -23
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +153 -57
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +50 -5
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +4 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/issues/classify.js +16 -16
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +24 -4
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +94 -31
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +4 -4
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +4 -4
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +4 -4
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +75 -7
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +32 -7
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +1 -1
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +370 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/needsInput.js +3 -3
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +2 -2
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +79 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +3 -3
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +3 -2
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +52 -10
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +294 -15
- package/dist/lib/wda.js.map +1 -1
- package/dist/mobileAudit/checks.js +12 -12
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +1 -1
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +3 -3
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +72 -18
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +219 -36
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +63 -17
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +13 -13
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +4 -4
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +62 -21
- package/dist/orchestration/testThis/execute.js.map +1 -1
- package/dist/orchestration/testThis/pipeline.js +119 -30
- package/dist/orchestration/testThis/pipeline.js.map +1 -1
- package/dist/orchestration/testThis/plan.js +162 -73
- package/dist/orchestration/testThis/plan.js.map +1 -1
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +34 -16
- package/dist/orchestration/testThis/terminal.js.map +1 -1
- package/dist/orchestration/testThis/types.js +1 -1
- package/dist/orchestration/testThis/types.js.map +1 -1
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +22 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/export.js +392 -37
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/policy.js +7 -4
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +8 -8
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +472 -45
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +2 -2
- package/dist/services/build.js.map +1 -1
- package/dist/{tools → services}/flowGenerate.js +29 -13
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +4 -4
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +46 -8
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +24 -9
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +100 -45
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +32 -16
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +28 -3
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +40 -27
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +270 -6
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +317 -48
- package/dist/session/processRegistry.js.map +1 -1
- package/dist/session/progress.js +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +275 -48
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +53 -8
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +28 -4
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +11 -5
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +46 -2
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +9 -5
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +4 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +50 -41
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +9 -7
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +4 -4
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +13 -9
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +5 -5
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +5 -5
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +3 -3
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +794 -164
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +451 -128
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +69 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +188 -130
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +32 -42
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +21 -31
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +55 -12
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +76 -24
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +68 -28
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +41 -47
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +31 -48
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +34 -41
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +183 -103
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +25 -13
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +52 -89
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/getArtifact.js +16 -5
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +15 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +45 -223
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +251 -35
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +41 -16
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +36 -35
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +50 -45
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +31 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +26 -26
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +10 -16
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +117 -50
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +11 -22
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +11 -15
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +78 -24
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +23 -21
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +23 -16
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +20 -16
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +155 -118
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +104 -116
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +72 -43
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +30 -20
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +24 -28
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +686 -210
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -38
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +187 -57
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +31 -22
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +53 -6
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +80 -12
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +194 -128
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +812 -152
- package/package.json +3 -2
- package/dist/tools/assertVisual.js +0 -84
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -179
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -86
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/locator.js +0 -85
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/permissions.js +0 -174
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -52
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -76
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -133
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -217
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -106
- package/dist/tools/visualText.js.map +0 -1
|
@@ -1,6 +1,30 @@
|
|
|
1
|
+
import { currentScreenSizeEpoch } from './DirectDriver.js';
|
|
1
2
|
import * as sim from '../lib/simctl.js';
|
|
2
|
-
import {
|
|
3
|
+
import { currentSignal } from '../lib/abortScope.js';
|
|
4
|
+
import { parseSnapshot } from '../snapshot/parse.js';
|
|
5
|
+
import { acceptWdaAlert, clearWdaElement, clearWdaFocusedByKeys, createWdaSession, deleteWdaSession, dismissWdaAlert, dismissWdaKeyboard, isInvalidWdaSession, wdaKeyboardFrame, wdaKeyboardShown, wdaOrientation, withWdaCall, dragWdaPoint, findFocusedWdaElement, findWdaElement, normalizeWdaSource, pressWdaHome, tapWdaElement, tapWdaPoint, typeWdaElement, typeWdaKeys, wdaActiveAppInfo, wdaElementAttribute, wdaScreenshot, wdaSessionUdidMismatch, wdaSource, wdaWindowSize, } from '../lib/wda.js';
|
|
3
6
|
const UNSUPPORTED = 'not supported by the WDA backend yet.';
|
|
7
|
+
/** A cached screen size is re-validated (GET /orientation + /window/size) after this long even
|
|
8
|
+
* without an observed rotation. Rotations seen in a page source drop it immediately. */
|
|
9
|
+
export const WDA_SCREEN_SIZE_TTL_MS = 30_000;
|
|
10
|
+
/** How long a post-settle page source may answer `press back` (only while no action ran since and
|
|
11
|
+
* nothing invalidated the device's screen). Short on purpose: the app can navigate by itself. */
|
|
12
|
+
export const WDA_BACK_SOURCE_FRESH_MS = 3_000;
|
|
13
|
+
/** Per-device page-source epoch: bumped by any out-of-driver screen change on that simulator
|
|
14
|
+
* (simctl launch/terminate/openurl, app-control tools, flow openUrl) so a cached source taken
|
|
15
|
+
* before it is never reused to find a back button. Keyed by udid; '*' = every device. */
|
|
16
|
+
const pageSourceEpoch = new Map();
|
|
17
|
+
function sourceEpochOf(udid) {
|
|
18
|
+
return (pageSourceEpoch.get(udid ?? '') ?? 0) + (pageSourceEpoch.get('*') ?? 0);
|
|
19
|
+
}
|
|
20
|
+
/** Drop any WdaDriver's cached page source for `udid` (all devices when omitted). Call after any
|
|
21
|
+
* simctl / app-control action that can change the screen outside the WDA driver. */
|
|
22
|
+
export function invalidateWdaPageSource(udid) {
|
|
23
|
+
const key = udid ?? '*';
|
|
24
|
+
pageSourceEpoch.set(key, (pageSourceEpoch.get(key) ?? 0) + 1);
|
|
25
|
+
}
|
|
26
|
+
/** How long the element id found by clearFocusedText() is reused by the following inputText(). */
|
|
27
|
+
export const WDA_FOCUSED_REUSE_MS = 10_000;
|
|
4
28
|
function tailLines(text, lines) {
|
|
5
29
|
const all = text.split(/\r?\n/);
|
|
6
30
|
return all.slice(Math.max(0, all.length - lines)).join('\n');
|
|
@@ -10,6 +34,30 @@ function errorSummary(e) {
|
|
|
10
34
|
.replace(/\s+/g, ' ')
|
|
11
35
|
.slice(0, 300);
|
|
12
36
|
}
|
|
37
|
+
/** PURE: where iOS "back" is on this screen: the center of the navigation bar's back button in a
|
|
38
|
+
* (normalized) WDA source, or null. The back button is the FIRST XCUIElementTypeButton inside the
|
|
39
|
+
* first XCUIElementTypeNavigationBar, and only when it sits in the bar's LEFT half. A root screen's
|
|
40
|
+
* bar can hold only trailing buttons ("Edit", "+"), which are not back. */
|
|
41
|
+
export function iosBackButtonPoint(normalizedXml) {
|
|
42
|
+
const nodes = parseSnapshot(normalizedXml).allNodes;
|
|
43
|
+
const bar = nodes.find((n) => /XCUIElementTypeNavigationBar$/.test(n.cls));
|
|
44
|
+
if (!bar)
|
|
45
|
+
return null;
|
|
46
|
+
const btn = nodes.find((n) => n.dfs > bar.dfs &&
|
|
47
|
+
n.dfs <= bar.subtreeEnd &&
|
|
48
|
+
/XCUIElementTypeButton$/.test(n.cls) &&
|
|
49
|
+
n.enabled &&
|
|
50
|
+
n.bounds[2] > n.bounds[0] &&
|
|
51
|
+
n.bounds[3] > n.bounds[1]);
|
|
52
|
+
if (!btn)
|
|
53
|
+
return null;
|
|
54
|
+
const x = Math.round((btn.bounds[0] + btn.bounds[2]) / 2);
|
|
55
|
+
const y = Math.round((btn.bounds[1] + btn.bounds[3]) / 2);
|
|
56
|
+
const barMid = (bar.bounds[0] + bar.bounds[2]) / 2;
|
|
57
|
+
return x < barMid ? { x, y } : null;
|
|
58
|
+
}
|
|
59
|
+
/** Thrown (message prefix) when iOS has no way to go "back" on the current screen. */
|
|
60
|
+
export const IOS_BACK_UNSUPPORTED = 'BACKEND_UNSUPPORTED: iOS has no system back key. No navigation-bar back button was found and the screen size needed for an edge-swipe back gesture is unknown.';
|
|
13
61
|
export class WdaDriver {
|
|
14
62
|
kind = 'wda';
|
|
15
63
|
baseUrl;
|
|
@@ -18,6 +66,8 @@ export class WdaDriver {
|
|
|
18
66
|
sessionId;
|
|
19
67
|
bundleId;
|
|
20
68
|
capabilities;
|
|
69
|
+
/** Every session this driver creates re-uses the running app (restart rebind). */
|
|
70
|
+
reuseRunningApp;
|
|
21
71
|
settings;
|
|
22
72
|
onTiming;
|
|
23
73
|
constructor(baseUrl, opts = {}) {
|
|
@@ -27,6 +77,7 @@ export class WdaDriver {
|
|
|
27
77
|
this.sessionId = opts.sessionId;
|
|
28
78
|
this.bundleId = opts.bundleId;
|
|
29
79
|
this.capabilities = opts.capabilities;
|
|
80
|
+
this.reuseRunningApp = opts.reuseRunningApp === true;
|
|
30
81
|
this.settings = opts.settings;
|
|
31
82
|
this.onTiming = opts.onTiming;
|
|
32
83
|
}
|
|
@@ -39,7 +90,64 @@ export class WdaDriver {
|
|
|
39
90
|
this.onTiming?.(kind, Date.now() - started);
|
|
40
91
|
}
|
|
41
92
|
}
|
|
42
|
-
|
|
93
|
+
/** Last normalized page source from dumpXml(). It's cleared by every state-changing call, so while
|
|
94
|
+
* set it IS the current screen (as of `at`). Lets `press back` skip a fresh /source. */
|
|
95
|
+
lastSource;
|
|
96
|
+
/** Focused element found by clearFocusedText(), reused by the next inputText(). */
|
|
97
|
+
focusedEl;
|
|
98
|
+
/** Called by every state-changing operation. */
|
|
99
|
+
touched() {
|
|
100
|
+
this.lastSource = undefined;
|
|
101
|
+
}
|
|
102
|
+
/** Run a simctl app-control call (launch/terminate/install/openurl): the screen may change
|
|
103
|
+
* outside WDA, so every driver's cached source for this simulator is dropped before AND after
|
|
104
|
+
* (a source dumped while the call ran is stale too). */
|
|
105
|
+
async simctlChange(fn) {
|
|
106
|
+
this.touched();
|
|
107
|
+
invalidateWdaPageSource(this.udid);
|
|
108
|
+
try {
|
|
109
|
+
return await fn();
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
invalidateWdaPageSource(this.udid);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Set when a session was transparently re-created after "invalid session id" (WDA restart /
|
|
116
|
+
* session reaped). Callers may surface it as a warning via consumeSessionRecovered(). */
|
|
117
|
+
sessionRecovered = false;
|
|
118
|
+
/** Returns (and clears) whether the last operations ran on a re-created WDA session. */
|
|
119
|
+
consumeSessionRecovered() {
|
|
120
|
+
const v = this.sessionRecovered;
|
|
121
|
+
this.sessionRecovered = false;
|
|
122
|
+
return v;
|
|
123
|
+
}
|
|
124
|
+
/** Run a session-scoped WDA operation with the bound signal + per-endpoint timeouts. On
|
|
125
|
+
* "invalid session id" (WDA restarted / session reaped) the cached session is dropped and
|
|
126
|
+
* the operation retried ONCE on a fresh session; the failed request never acted. The fresh
|
|
127
|
+
* session is created with forceAppLaunch:false + shouldTerminateApp:false (reuseRunningApp) so
|
|
128
|
+
* WDA does NOT terminate + relaunch the app under test (WebDriverAgent FBSessionCommands: when
|
|
129
|
+
* `bundleId` is passed, `forceAppLaunch` defaults to YES and a running app is relaunched; with
|
|
130
|
+
* NO a running app is left as-is and a backgrounded one is only activated). */
|
|
131
|
+
async withSession(fn) {
|
|
132
|
+
return withWdaCall({ signal: currentSignal() }, async () => {
|
|
133
|
+
const sid = await this.ensureSession();
|
|
134
|
+
try {
|
|
135
|
+
return await fn(sid);
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
if (!isInvalidWdaSession(e))
|
|
139
|
+
throw e;
|
|
140
|
+
this.sessionId = undefined;
|
|
141
|
+
this.cachedScreenSize = undefined;
|
|
142
|
+
this.lastSource = undefined;
|
|
143
|
+
this.focusedEl = undefined;
|
|
144
|
+
const fresh = await this.ensureSession({ recover: true });
|
|
145
|
+
this.sessionRecovered = true;
|
|
146
|
+
return fn(fresh);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async ensureSession(opts = {}) {
|
|
43
151
|
if (this.sessionId)
|
|
44
152
|
return this.sessionId;
|
|
45
153
|
const s = await this.timed('session_create', () => createWdaSession(this.baseUrl, {
|
|
@@ -47,6 +155,7 @@ export class WdaDriver {
|
|
|
47
155
|
udid: this.udid,
|
|
48
156
|
capabilities: this.capabilities,
|
|
49
157
|
settings: this.settings,
|
|
158
|
+
reuseRunningApp: this.reuseRunningApp || opts.recover === true,
|
|
50
159
|
}));
|
|
51
160
|
const mismatchedUdid = wdaSessionUdidMismatch(s.capabilities, this.udid);
|
|
52
161
|
if (mismatchedUdid) {
|
|
@@ -80,12 +189,18 @@ export class WdaDriver {
|
|
|
80
189
|
async installApp(appPath) {
|
|
81
190
|
if (!this.udid || !this.simulator.installApp)
|
|
82
191
|
return this.no('app install');
|
|
83
|
-
|
|
192
|
+
const udid = this.udid;
|
|
193
|
+
await this.simctlChange(async () => {
|
|
194
|
+
await this.simulator.installApp?.(udid, appPath);
|
|
195
|
+
});
|
|
84
196
|
}
|
|
85
197
|
async uninstallApp(pkg) {
|
|
86
198
|
if (!this.udid || !this.simulator.uninstallApp)
|
|
87
199
|
return this.no('app uninstall');
|
|
88
|
-
|
|
200
|
+
const udid = this.udid;
|
|
201
|
+
await this.simctlChange(async () => {
|
|
202
|
+
await this.simulator.uninstallApp?.(udid, pkg);
|
|
203
|
+
});
|
|
89
204
|
}
|
|
90
205
|
async isInstalled(pkg) {
|
|
91
206
|
const target = pkg || this.bundleId;
|
|
@@ -115,16 +230,22 @@ export class WdaDriver {
|
|
|
115
230
|
}
|
|
116
231
|
}
|
|
117
232
|
async launchApp(pkg) {
|
|
233
|
+
this.touched();
|
|
118
234
|
this.bundleId = pkg;
|
|
119
|
-
|
|
120
|
-
|
|
235
|
+
const udid = this.udid;
|
|
236
|
+
if (udid) {
|
|
237
|
+
await this.simctlChange(() => this.simulator.launchApp(udid, pkg));
|
|
121
238
|
}
|
|
122
239
|
await this.ensureSession();
|
|
123
240
|
}
|
|
124
241
|
async launchAppWithArgs(pkg, args) {
|
|
242
|
+
this.touched();
|
|
125
243
|
this.bundleId = pkg;
|
|
126
|
-
|
|
127
|
-
|
|
244
|
+
const udid = this.udid;
|
|
245
|
+
if (udid && this.simulator.launchAppWithArgs) {
|
|
246
|
+
await this.simctlChange(async () => {
|
|
247
|
+
await this.simulator.launchAppWithArgs?.(udid, pkg, args);
|
|
248
|
+
});
|
|
128
249
|
}
|
|
129
250
|
else if (Object.keys(args).length) {
|
|
130
251
|
return this.no('launch arguments');
|
|
@@ -135,13 +256,42 @@ export class WdaDriver {
|
|
|
135
256
|
const target = pkg || this.bundleId;
|
|
136
257
|
if (!this.udid || !target)
|
|
137
258
|
return this.no('app terminate');
|
|
138
|
-
|
|
259
|
+
const udid = this.udid;
|
|
260
|
+
await this.simctlChange(() => this.simulator.terminateApp(udid, target));
|
|
139
261
|
}
|
|
140
262
|
clearData() {
|
|
141
263
|
return this.no('clear app data');
|
|
142
264
|
}
|
|
143
|
-
|
|
144
|
-
|
|
265
|
+
/** Keyboard shown? A single find-by-class-name call (XCUIElementTypeKeyboard). */
|
|
266
|
+
async imeShown() {
|
|
267
|
+
return this.withSession((sid) => wdaKeyboardShown(this.baseUrl, sid));
|
|
268
|
+
}
|
|
269
|
+
async imeFrame() {
|
|
270
|
+
return this.withSession((sid) => wdaKeyboardFrame(this.baseUrl, sid));
|
|
271
|
+
}
|
|
272
|
+
/** imeShown + imeFrame in ONE keyboard lookup (both used to run the same /elements query):
|
|
273
|
+
* no keyboard element (or no usable rect) ⇒ not shown. */
|
|
274
|
+
async imeState() {
|
|
275
|
+
const frame = await this.imeFrame();
|
|
276
|
+
return { shown: frame !== null, frame };
|
|
277
|
+
}
|
|
278
|
+
async hideKeyboard() {
|
|
279
|
+
this.touched();
|
|
280
|
+
return this.withSession(async (sid) => {
|
|
281
|
+
if (!(await wdaKeyboardShown(this.baseUrl, sid)))
|
|
282
|
+
return false;
|
|
283
|
+
try {
|
|
284
|
+
await dismissWdaKeyboard(this.baseUrl, sid);
|
|
285
|
+
}
|
|
286
|
+
catch (e) {
|
|
287
|
+
if (isInvalidWdaSession(e))
|
|
288
|
+
throw e; // let withSession recover the session
|
|
289
|
+
// WDA 400 "Did not know how to dismiss the keyboard": the app offers no generic way
|
|
290
|
+
// (no Done/Return-dismiss). Report "could not hide" instead of an untyped error.
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
return true;
|
|
294
|
+
});
|
|
145
295
|
}
|
|
146
296
|
async logcat(lines = 200, grep) {
|
|
147
297
|
if (!this.udid)
|
|
@@ -162,32 +312,74 @@ export class WdaDriver {
|
|
|
162
312
|
return this.no('airplane-mode toggle');
|
|
163
313
|
}
|
|
164
314
|
async foregroundOwner() {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
315
|
+
// Never guess the app under test on failure: callers treat 'unknown' as "don't judge", while a
|
|
316
|
+
// guessed bundleId made qa_app_control background report the app as still in front.
|
|
317
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
318
|
+
try {
|
|
319
|
+
const info = await this.withSession((sid) => wdaActiveAppInfo(this.baseUrl, sid));
|
|
320
|
+
return info.bundleId || info.name || 'unknown';
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
if (attempt === 0)
|
|
324
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
325
|
+
}
|
|
171
326
|
}
|
|
327
|
+
return 'unknown';
|
|
172
328
|
}
|
|
173
329
|
async screenshot() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
330
|
+
return this.withSession((sid) => this.timed('screenshot', () => wdaScreenshot(this.baseUrl, sid)));
|
|
331
|
+
}
|
|
332
|
+
async dumpXml(opts = {}) {
|
|
333
|
+
// opts.timeoutMs bounds the /source request (default 30 s). The settle loop passes its
|
|
334
|
+
// remaining deadline. Retries are the caller's loop; WDA itself is not retried here.
|
|
335
|
+
let sid;
|
|
336
|
+
const xml = normalizeWdaSource(await withWdaCall({ timeoutMs: opts.timeoutMs }, () => this.withSession((s) => {
|
|
337
|
+
sid = s;
|
|
338
|
+
return this.timed('source', () => wdaSource(this.baseUrl, s));
|
|
339
|
+
})));
|
|
340
|
+
this.lastSource = { sid, xml, at: Date.now(), epoch: sourceEpochOf(this.udid) };
|
|
341
|
+
this.noteSourceSize(xml);
|
|
342
|
+
return xml;
|
|
343
|
+
}
|
|
344
|
+
/** A page source whose root size is the cached size with SWAPPED axes = a rotation happened. */
|
|
345
|
+
noteSourceSize(xml) {
|
|
346
|
+
const c = this.cachedScreenSize;
|
|
347
|
+
if (!c)
|
|
348
|
+
return;
|
|
349
|
+
const m = xml.match(/bounds="\[0,0\]\[(\d+),(\d+)\]"/);
|
|
350
|
+
if (!m)
|
|
351
|
+
return;
|
|
352
|
+
const [w, h] = [Number(m[1]), Number(m[2])];
|
|
353
|
+
if (w === c.size.height && h === c.size.width && w !== h)
|
|
354
|
+
this.cachedScreenSize = undefined;
|
|
180
355
|
}
|
|
181
356
|
async tapXY(x, y) {
|
|
182
|
-
|
|
183
|
-
await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, x, y));
|
|
357
|
+
this.touched();
|
|
358
|
+
await this.withSession((sid) => this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, x, y)));
|
|
184
359
|
}
|
|
185
360
|
async pressXY(x, y) {
|
|
186
361
|
await this.tapXY(x, y);
|
|
187
362
|
}
|
|
188
363
|
async inputText(text) {
|
|
189
|
-
|
|
364
|
+
this.touched();
|
|
365
|
+
return this.withSession((sid) => this.inputTextIn(sid, text));
|
|
366
|
+
}
|
|
367
|
+
async inputTextIn(sid, text) {
|
|
190
368
|
let focusedError;
|
|
369
|
+
// Reuse the element clearFocusedText() just found (saves one find round trip per type);
|
|
370
|
+
// on any failure fall through to a fresh lookup.
|
|
371
|
+
const reuse = this.focusedEl;
|
|
372
|
+
this.focusedEl = undefined;
|
|
373
|
+
if (reuse && reuse.sid === sid && Date.now() - reuse.at < WDA_FOCUSED_REUSE_MS) {
|
|
374
|
+
try {
|
|
375
|
+
await this.timed('type', () => typeWdaElement(this.baseUrl, sid, reuse.elementId, text));
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
catch (e) {
|
|
379
|
+
if (isInvalidWdaSession(e))
|
|
380
|
+
throw e;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
191
383
|
try {
|
|
192
384
|
const el = await this.timed('find_element', () => findFocusedWdaElement(this.baseUrl, sid));
|
|
193
385
|
await this.timed('type', () => typeWdaElement(this.baseUrl, sid, el.elementId, text));
|
|
@@ -205,11 +397,16 @@ export class WdaDriver {
|
|
|
205
397
|
}
|
|
206
398
|
}
|
|
207
399
|
async clearFocusedText(approxLen = 40) {
|
|
208
|
-
|
|
400
|
+
this.touched();
|
|
401
|
+
return this.withSession((sid) => this.clearFocusedTextIn(sid, approxLen));
|
|
402
|
+
}
|
|
403
|
+
async clearFocusedTextIn(sid, approxLen) {
|
|
209
404
|
let clearError;
|
|
405
|
+
this.focusedEl = undefined;
|
|
210
406
|
try {
|
|
211
407
|
const el = await this.timed('find_element', () => findFocusedWdaElement(this.baseUrl, sid));
|
|
212
408
|
await this.timed('clear', () => clearWdaElement(this.baseUrl, sid, el.elementId));
|
|
409
|
+
this.focusedEl = { sid, elementId: el.elementId, at: Date.now() };
|
|
213
410
|
return;
|
|
214
411
|
}
|
|
215
412
|
catch (e) {
|
|
@@ -223,32 +420,108 @@ export class WdaDriver {
|
|
|
223
420
|
}
|
|
224
421
|
}
|
|
225
422
|
async pressKey(key) {
|
|
423
|
+
const cached = this.lastSource; // the screen as last dumped, if nothing acted since
|
|
424
|
+
this.touched();
|
|
226
425
|
if (key === 'home') {
|
|
227
|
-
await
|
|
426
|
+
await this.withSession(() => pressWdaHome(this.baseUrl)); // session-less route; session kept warm
|
|
228
427
|
return;
|
|
229
428
|
}
|
|
230
429
|
if (key === 'back') {
|
|
231
|
-
|
|
430
|
+
// iOS has no system back key (WDA has no /back endpoint): tap the navigation bar's back
|
|
431
|
+
// button when the screen has one, else perform the interactive-pop edge swipe.
|
|
432
|
+
await this.withSession((sid) => this.backIn(sid, cached && cached.sid === sid && cached.epoch === sourceEpochOf(this.udid) && Date.now() - cached.at < WDA_BACK_SOURCE_FRESH_MS
|
|
433
|
+
? cached.xml
|
|
434
|
+
: undefined));
|
|
232
435
|
return;
|
|
233
436
|
}
|
|
234
437
|
await this.inputText('\n');
|
|
235
438
|
}
|
|
439
|
+
/** Last `back` strategy used ('nav_button' | 'edge_swipe'), surfaced by qa_act. */
|
|
440
|
+
lastBackVia;
|
|
441
|
+
async backIn(sid, cachedXml) {
|
|
442
|
+
// The latest post-settle source (nothing acted since) is the current screen: try its back
|
|
443
|
+
// button first and only fetch a fresh /source when it has none.
|
|
444
|
+
const cachedBtn = cachedXml ? iosBackButtonPoint(cachedXml) : null;
|
|
445
|
+
if (cachedBtn) {
|
|
446
|
+
await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, cachedBtn.x, cachedBtn.y));
|
|
447
|
+
this.lastBackVia = 'nav_button';
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
const xml = normalizeWdaSource(await this.timed('source', () => wdaSource(this.baseUrl, sid)));
|
|
451
|
+
const btn = iosBackButtonPoint(xml);
|
|
452
|
+
if (btn) {
|
|
453
|
+
await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, btn.x, btn.y));
|
|
454
|
+
this.lastBackVia = 'nav_button';
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
let size = null;
|
|
458
|
+
try {
|
|
459
|
+
size = await wdaWindowSize(this.baseUrl, sid);
|
|
460
|
+
}
|
|
461
|
+
catch (e) {
|
|
462
|
+
if (isInvalidWdaSession(e))
|
|
463
|
+
throw e;
|
|
464
|
+
const screen = parseSnapshot(xml).screen;
|
|
465
|
+
size = screen[0] > 0 && screen[1] > 0 ? { width: screen[0], height: screen[1] } : null;
|
|
466
|
+
}
|
|
467
|
+
if (!size)
|
|
468
|
+
throw new Error(IOS_BACK_UNSUPPORTED);
|
|
469
|
+
const y = Math.round(size.height / 2);
|
|
470
|
+
await dragWdaPoint(this.baseUrl, sid, 2, y, Math.round(size.width * 0.6), y, 0.1);
|
|
471
|
+
this.lastBackVia = 'edge_swipe';
|
|
472
|
+
}
|
|
236
473
|
async acceptAlert() {
|
|
237
|
-
|
|
474
|
+
this.touched();
|
|
475
|
+
await this.withSession((sid) => acceptWdaAlert(this.baseUrl, sid));
|
|
238
476
|
}
|
|
239
477
|
async dismissAlert() {
|
|
240
|
-
|
|
478
|
+
this.touched();
|
|
479
|
+
await this.withSession((sid) => dismissWdaAlert(this.baseUrl, sid));
|
|
241
480
|
}
|
|
242
481
|
async swipe(x1, y1, x2, y2, ms = 300) {
|
|
243
|
-
|
|
482
|
+
this.touched();
|
|
483
|
+
await this.withSession((sid) => dragWdaPoint(this.baseUrl, sid, x1, y1, x2, y2, ms / 1000));
|
|
244
484
|
}
|
|
245
485
|
adbReverseMetro() {
|
|
246
486
|
return this.no('dev-server port reverse');
|
|
247
487
|
}
|
|
488
|
+
// Size in points via GET /window/size instead of dumping the entire page source.
|
|
489
|
+
// Cached per WDA session (a new session naturally misses it) WITHOUT a per-call /orientation
|
|
490
|
+
// round trip: the cache is dropped when a page source shows the axes swapped (rotation), when
|
|
491
|
+
// Swipium changes the orientation (invalidateScreenSizeCache epoch), and after
|
|
492
|
+
// WDA_SCREEN_SIZE_TTL_MS. On a miss, /orientation is still read to key the new entry.
|
|
493
|
+
cachedScreenSize;
|
|
248
494
|
async screenSize() {
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
495
|
+
const hit = this.cachedScreenSize;
|
|
496
|
+
if (hit &&
|
|
497
|
+
hit.sessionId === this.sessionId &&
|
|
498
|
+
hit.epoch === currentScreenSizeEpoch(this.udid) &&
|
|
499
|
+
Date.now() - hit.at < WDA_SCREEN_SIZE_TTL_MS)
|
|
500
|
+
return { ...hit.size };
|
|
501
|
+
return this.withSession(async (sid) => {
|
|
502
|
+
const epoch = currentScreenSizeEpoch(this.udid);
|
|
503
|
+
const orientation = await wdaOrientation(this.baseUrl, sid).catch(() => 'unknown');
|
|
504
|
+
const cached = this.cachedScreenSize;
|
|
505
|
+
if (cached?.sessionId === sid && cached.orientation === orientation && cached.epoch === epoch) {
|
|
506
|
+
cached.at = Date.now();
|
|
507
|
+
return { ...cached.size };
|
|
508
|
+
}
|
|
509
|
+
let size;
|
|
510
|
+
try {
|
|
511
|
+
size = await wdaWindowSize(this.baseUrl, sid);
|
|
512
|
+
}
|
|
513
|
+
catch (e) {
|
|
514
|
+
if (isInvalidWdaSession(e))
|
|
515
|
+
throw e;
|
|
516
|
+
// older WDA builds lack /window/size, so fall back to the page-source root bounds
|
|
517
|
+
const xml = normalizeWdaSource(await this.timed('source', () => wdaSource(this.baseUrl, sid)));
|
|
518
|
+
const m = xml.match(/bounds="\[0,0\]\[(\d+),(\d+)\]"/);
|
|
519
|
+
size = m ? { width: Number(m[1]), height: Number(m[2]) } : null;
|
|
520
|
+
}
|
|
521
|
+
if (size)
|
|
522
|
+
this.cachedScreenSize = { sessionId: sid, orientation, epoch, at: Date.now(), size };
|
|
523
|
+
return size;
|
|
524
|
+
});
|
|
252
525
|
}
|
|
253
526
|
screenDensity() {
|
|
254
527
|
return Promise.resolve(null);
|
|
@@ -256,7 +529,8 @@ export class WdaDriver {
|
|
|
256
529
|
async openUrl(url) {
|
|
257
530
|
if (!this.udid)
|
|
258
531
|
return this.no('open url without a simulator UDID');
|
|
259
|
-
|
|
532
|
+
const udid = this.udid;
|
|
533
|
+
await this.simctlChange(() => this.simulator.openUrl(udid, url));
|
|
260
534
|
}
|
|
261
535
|
disableAnimations() {
|
|
262
536
|
return Promise.resolve();
|
|
@@ -268,29 +542,55 @@ export class WdaDriver {
|
|
|
268
542
|
await this.typeBySelector('accessibility id', value, text);
|
|
269
543
|
}
|
|
270
544
|
async tapBySelector(using, value) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
545
|
+
this.touched();
|
|
546
|
+
await this.withSession(async (sid) => {
|
|
547
|
+
const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
|
|
548
|
+
await this.timed('tap', () => tapWdaElement(this.baseUrl, sid, el.elementId));
|
|
549
|
+
});
|
|
274
550
|
}
|
|
275
551
|
async typeBySelector(using, value, text) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
552
|
+
this.touched();
|
|
553
|
+
await this.withSession(async (sid) => {
|
|
554
|
+
const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
|
|
555
|
+
await this.timed('type', () => typeWdaElement(this.baseUrl, sid, el.elementId, text));
|
|
556
|
+
});
|
|
279
557
|
}
|
|
280
558
|
async clearBySelector(using, value) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
559
|
+
this.touched();
|
|
560
|
+
await this.withSession(async (sid) => {
|
|
561
|
+
const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
|
|
562
|
+
await this.timed('clear', () => clearWdaElement(this.baseUrl, sid, el.elementId));
|
|
563
|
+
});
|
|
284
564
|
}
|
|
285
|
-
|
|
286
|
-
|
|
565
|
+
// Real secure-field signal for native-selector typing: resolve the element and
|
|
566
|
+
// read its `type` attribute (XCUIElementTypeSecureTextField), accepting a boolean `secure`
|
|
567
|
+
// attribute where a WDA build exposes one instead.
|
|
568
|
+
async isSecureBySelector(using, value) {
|
|
569
|
+
return this.withSession((sid) => this.isSecureIn(sid, using, value));
|
|
570
|
+
}
|
|
571
|
+
async isSecureIn(sid, using, value) {
|
|
572
|
+
const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
|
|
287
573
|
try {
|
|
288
|
-
|
|
289
|
-
|
|
574
|
+
if (/SecureTextField/i.test(await wdaElementAttribute(this.baseUrl, sid, el.elementId, 'type')))
|
|
575
|
+
return true;
|
|
290
576
|
}
|
|
291
577
|
catch {
|
|
292
|
-
|
|
578
|
+
// some builds don't serve /attribute/type, so fall through to the `secure` attribute
|
|
293
579
|
}
|
|
580
|
+
return /^(true|1)$/i.test(await wdaElementAttribute(this.baseUrl, sid, el.elementId, 'secure').catch(() => ''));
|
|
581
|
+
}
|
|
582
|
+
async existsBySelector(using, value) {
|
|
583
|
+
return this.withSession(async (sid) => {
|
|
584
|
+
try {
|
|
585
|
+
await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
|
|
586
|
+
return true;
|
|
587
|
+
}
|
|
588
|
+
catch (e) {
|
|
589
|
+
if (isInvalidWdaSession(e))
|
|
590
|
+
throw e; // let withSession recover the session
|
|
591
|
+
return false;
|
|
592
|
+
}
|
|
593
|
+
});
|
|
294
594
|
}
|
|
295
595
|
}
|
|
296
596
|
//# sourceMappingURL=WdaDriver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WdaDriver.js","sourceRoot":"","sources":["../../src/drivers/WdaDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WdaDriver.js","sourceRoot":"","sources":["../../src/drivers/WdaDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Candidate action ranking (Phase 3.3 §8). From a parsed snapshot, produce ranked ExploreElements:
|
|
2
2
|
// prioritize useful low-risk coverage (nav, tabs, named safe buttons, list items) and deprioritize
|
|
3
|
-
// unlabeled icons + coordinate-only targets
|
|
3
|
+
// unlabeled icons + coordinate-only targets, which also surface as locator-quality issues. PURE.
|
|
4
4
|
import { classifyRisk } from './policy.js';
|
|
5
5
|
const NAV = /\b(home|tab|menu|settings?|search|explore|discover|profile|account|back|next|map|list|history|notifications?|messages?|dashboard|library|feed|overview)\b/i;
|
|
6
6
|
function locatorFor(e) {
|
|
@@ -94,7 +94,7 @@ export function actionLikeNonInteractive(elements) {
|
|
|
94
94
|
}
|
|
95
95
|
return out;
|
|
96
96
|
}
|
|
97
|
-
/** Locator-readiness grade for a screen (Phase 3.3 §9.4)
|
|
97
|
+
/** Locator-readiness grade for a screen (Phase 3.3 §9.4). Drives the report's testability advice. */
|
|
98
98
|
export function locatorQuality(elements) {
|
|
99
99
|
const actionable = elements.filter((e) => e.clickable);
|
|
100
100
|
if (actionable.length === 0)
|