execute method
Future<void>
execute({
- required CancelToken cancelToken,
- required TestReport report,
- required TestController tester,
Executes the step. This will first look for the Testable
, attempt to
capture the image of the widget, and set it on the report
as a
screenshot.
Implementation
@override
Future<void> execute({
required CancelToken cancelToken,
required TestReport report,
required TestController tester,
}) async {
final imageId = tester.resolveVariable(this.imageId);
final testableId = tester.resolveVariable(this.testableId);
assert(testableId?.isNotEmpty == true);
final name = "$id('$testableId')";
log(
name,
tester: tester,
);
final finder = await waitFor(
testableId,
cancelToken: cancelToken,
tester: tester,
timeout: timeout,
);
await sleep(
tester.delays.postFoundWidget,
cancelStream: cancelToken.stream,
tester: tester,
);
final widgetFinder = finder.evaluate();
var found = false;
if (widgetFinder.isNotEmpty == true) {
final element = widgetFinder.first as StatefulElement;
final state = element.state;
if (state is TestableState) {
try {
found = true;
final image = await state.captureImage(backgroundColor);
if (image != null) {
report.attachScreenshot(
image,
goldenCompatible: goldenCompatible ?? true,
id: imageId ?? 'widget_$testableId',
);
}
} catch (e) {
found = false;
}
}
}
if (found != true) {
throw Exception(
'testableId: [$testableId] -- could not locate Testable with a functional [captureImage] method.',
);
}
}