blob: bc38bb71de50e3992eb423d491d6d9656031f4b6 [file] [log] [blame]
import 'dart:async';
import 'dart:io';
import 'common.dart';
import 'package:flutter_driver/flutter_driver.dart';
/// Example Integration Test which can also run WebDriver command depending on
/// the requests coming from the test methods.
Future<void> integrationDriver(
{FlutterDriver driver, Function onScreenshot}) async {
if (driver == null) {
driver = await FlutterDriver.connect();
}
// Test states that it's waiting on web driver commands.
// [DriverTestMessage] is converted to string since json format causes an
// error if it's used as a message for requestData.
String jsonResponse =
await driver.requestData(DriverTestMessage.pending().toString());
Response response = Response.fromJson(jsonResponse);
// Until `integration_test` returns a [WebDriverCommandType.noop], keep
// executing WebDriver commands.
while (response.data != null &&
response.data['web_driver_command'] != null &&
response.data['web_driver_command'] != '${WebDriverCommandType.noop}') {
final String webDriverCommand = response.data['web_driver_command'];
if (webDriverCommand == '${WebDriverCommandType.screenshot}') {
// Use `driver.screenshot()` method to get a screenshot of the web page.
final List<int> screenshotImage = await driver.screenshot();
final String screenshotName = response.data['screenshot_name'];
final bool screenshotSuccess =
await onScreenshot(screenshotName, screenshotImage);
if (screenshotSuccess) {
jsonResponse =
await driver.requestData(DriverTestMessage.complete().toString());
} else {
jsonResponse =
await driver.requestData(DriverTestMessage.error().toString());
}
response = Response.fromJson(jsonResponse);
} else if (webDriverCommand == '${WebDriverCommandType.ack}') {
// Previous command completed ask for a new one.
jsonResponse =
await driver.requestData(DriverTestMessage.pending().toString());
response = Response.fromJson(jsonResponse);
} else {
break;
}
}
// If No-op command is sent, ask for the result of all tests.
if (response.data != null &&
response.data['web_driver_command'] != null &&
response.data['web_driver_command'] == '${WebDriverCommandType.noop}') {
jsonResponse = await driver.requestData(null);
response = Response.fromJson(jsonResponse);
print('result $jsonResponse');
}
await driver.close();
if (response.allTestsPassed) {
print('All tests passed.');
exit(0);
} else {
print('Failure Details:\n${response.formattedFailureDetails}');
exit(1);
}
}