verifyDetailed method
Future<VerificationOutcome>
verifyDetailed({
- required MissionStep step,
- required ExecutorResult execResult,
- required UiSnapshot? before,
- required UiSnapshot? after,
- UiNode? resolvedTarget,
- UiSnapshot? baseline,
verify plus the runner's baseline capture, taken shortly BEFORE
before: any node that changed between the two is self-changing (a
countdown, a clock, a shimmer) and can never vouch for an action.
Implementation
Future<VerificationOutcome> verifyDetailed({
required MissionStep step,
required ExecutorResult execResult,
required UiSnapshot? before,
required UiSnapshot? after,
UiNode? resolvedTarget,
UiSnapshot? baseline,
}) async {
if (!execResult.success) {
return VerificationOutcome(
success: false,
evidence: const [VerificationEvidence.noObservableEffect],
failureReason: execResult.error,
);
}
// No acted node handed in: verify the REQUESTED element, by identity
// only (its stable id) — never by re-matching the description, which is
// how a different field once got verified.
final requestedId = step.targetStableId;
if (resolvedTarget == null &&
requestedId != null &&
requestedId.isNotEmpty) {
resolvedTarget =
before?.findByStableId(requestedId) ?? after?.findByStableId(requestedId);
}
switch (step.action) {
case 'navigate':
return _verifyNavigate(
step, before, after, resolvedTarget, baseline);
case 'tap':
case 'click':
return _verifyTap(step, before, after, resolvedTarget, baseline);
case 'back':
return _verifyBack(execResult, before, after);
case 'set_text':
case 'type':
return _verifyInput(step, before, after, resolvedTarget);
case 'scroll_to':
case 'scroll_and_highlight':
return _verifyScrollTo(step, after, resolvedTarget);
case 'check':
case 'toggle':
return _verifyChecked(step, execResult, after, resolvedTarget);
case 'select':
return _verifySelect(step, before, after, resolvedTarget);
case 'set_slider':
return _verifySlider(execResult, after, resolvedTarget);
case 'highlight':
case 'wait':
case 'read_field':
case 'find_candidates':
default:
// Trusted verbs: nothing on screen is supposed to change.
return const VerificationOutcome(success: true, evidence: []);
}
}