| // Copyright 2018 The Chromium 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:core'; |
| |
| import 'package:flutter_driver/flutter_driver.dart'; |
| import 'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart'; |
| import 'package:fuchsia_remote_debug_protocol/logging.dart'; |
| |
| /// Runs through a simple usage of the fuchsia_remote_debug_protocol library: |
| /// connects to a remote machine at the address in argument 1 (interface |
| /// optional for argument 2) to drive an application named 'todo_list' by |
| /// scrolling up and down on the main scaffold. |
| /// |
| /// Make sure to set up your application (you can change the name from |
| /// 'todo_list') follows the setup for testing with the flutter driver: |
| /// https://flutter.dev/testing/#adding-the-flutter_driver-dependency |
| /// |
| /// Example usage: |
| /// |
| /// $ dart examples/driver_todo_list_scroll.dart \ |
| /// fe80::8eae:4cff:fef4:9247 eno1 |
| Future<void> main(List<String> args) async { |
| // Log only at info level within the library. If issues arise, this can be |
| // changed to [LoggingLevel.all] or [LoggingLevel.fine] to see more |
| // information. |
| Logger.globalLevel = LoggingLevel.info; |
| if (args.isEmpty) { |
| print('Expects an IP address and/or network interface'); |
| return; |
| } |
| final String address = args[0]; |
| final String interface = args.length > 1 ? args[1] : ''; |
| // Example ssh config path for the Fuchsia device after having made a local |
| // build. |
| const String sshConfigPath = |
| '../../../fuchsia/out/x64rel/ssh-keys/ssh_config'; |
| final FuchsiaRemoteConnection connection = |
| await FuchsiaRemoteConnection.connect(address, interface, sshConfigPath); |
| |
| const Pattern isolatePattern = 'todo_list'; |
| print('Finding $isolatePattern'); |
| final List<IsolateRef> refs = |
| await connection.getMainIsolatesByPattern(isolatePattern); |
| |
| final IsolateRef ref = refs.first; |
| print('Driving ${ref.name}'); |
| final FlutterDriver driver = await FlutterDriver.connect( |
| dartVmServiceUrl: ref.dartVm.uri.toString(), |
| isolateNumber: ref.number, |
| printCommunication: true, |
| logCommunicationToFile: false); |
| for (int i = 0; i < 5; ++i) { |
| // Scrolls down 300px. |
| await driver.scroll(find.byType('Scaffold'), 0.0, -300.0, |
| const Duration(milliseconds: 300)); |
| await Future<void>.delayed(const Duration(milliseconds: 500)); |
| // Scrolls up 300px. |
| await driver.scroll(find.byType('Scaffold'), 300.0, 300.0, |
| const Duration(milliseconds: 300)); |
| } |
| await driver.close(); |
| await connection.stop(); |
| } |