| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:flutter_driver/flutter_driver.dart'; |
| |
| import 'common.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 { |
| 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'] as String?; |
| 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'] as String?; |
| |
| final bool screenshotSuccess = await onScreenshot!(screenshotName, screenshotImage) as bool; |
| 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(''); |
| |
| 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); |
| } |
| } |