diff --git a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart index 52d3bcf92d..af9a4fb256 100644 --- a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart +++ b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart @@ -633,7 +633,15 @@ Future _warnIfSlow({ assert(future != null); assert(timeout != null); assert(message != null); - return future..timeout(timeout, onTimeout: () { _log(message); return null; }); + future + .timeout(timeout, onTimeout: () { + _log(message); + return null; + }) + // Don't duplicate errors if [future] completes with an error. + .catchError((dynamic e) => null); + + return future; } /// Encapsulates connection information to an instance of a Flutter application. diff --git a/packages/flutter_driver/test/flutter_driver_test.dart b/packages/flutter_driver/test/flutter_driver_test.dart index 18906b3663..f60ad1b28e 100644 --- a/packages/flutter_driver/test/flutter_driver_test.dart +++ b/packages/flutter_driver/test/flutter_driver_test.dart @@ -665,6 +665,16 @@ void main() { expect(error.message, 'Error in Flutter application: {message: This is a failure}'); } }); + + test('uncaught remote error', () async { + when(mockIsolate.invokeExtension(any, any)).thenAnswer((Invocation i) { + return Future>.error( + rpc.RpcException(9999, 'test error'), + ); + }); + + expect(driver.waitFor(find.byTooltip('foo')), throwsDriverError); + }); }); });