devtools icon indicating copy to clipboard operation
devtools copied to clipboard

DevTools integration test flakes

Open elliette opened this issue 2 months ago • 2 comments

The DevTools integration tests have been getting flaky.

devtools_extensions_test.dart

https://github.com/flutter/devtools/actions/runs/18566177330/job/52927948189

FlutterDriveProcess - Launching integration_test/test/live_connection/devtools_extensions_test.dart on Web Server in debug mode...
FlutterDriveProcess - Waiting for connection from debug service on Web Server...         67.1s
FlutterDriveProcess - integration_test/test/live_connection/devtools_extensions_test.dart is being served at http://localhost:49514
FlutterDriveProcess - The web-server device requires the Dart Debug Chrome extension for debugging. Consider using the Chrome or Edge devices for an improved development workflow.
ChromeDriver - [1760628606.940][SEVERE]: Timed out receiving message from renderer: 298.218
ChromeDriver - [1760628606.968][SEVERE]: Timed out receiving message from renderer: 298.218
FlutterDriveProcess - Unhandled exception:
FlutterDriveProcess - TimeoutException (500): timeout: Timed out receiving message from renderer: 298.218
FlutterDriveProcess -   (Session info: chrome=140.0.7339.207)
FlutterDriveProcess - #0      parseW3cResponse (package:webdriver/src/handler/w3c/utils.dart:87:9)
FlutterDriveProcess - #1      W3cNavigationHandler.parseNavigateToResponse (package:webdriver/src/handler/w3c/navigation.dart:26:5)
FlutterDriveProcess - #2      AsyncRequestClient.send (package:webdriver/src/common/request_client.dart:96:32)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #3      FlutterWebConnection.connect (package:flutter_driver/src/driver/web_driver.dart:301:5)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #4      WebFlutterDriver.connectWeb (package:flutter_driver/src/driver/web_driver.dart:99:45)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #5      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:21:18)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - Application finished.
Unhandled exception:
Exception: Unhandled exception:
TimeoutException (500): timeout: Timed out receiving message from renderer: 298.218
  (Session info: chrome=140.0.7339.207)
#0      parseW3cResponse (package:webdriver/src/handler/w3c/utils.dart:87:9)
#1      W3cNavigationHandler.parseNavigateToResponse (package:webdriver/src/handler/w3c/navigation.dart:26:5)
#2      AsyncRequestClient.send (package:webdriver/src/common/request_client.dart:96:32)
<asynchronous suspension>
#3      FlutterWebConnection.connect (package:flutter_driver/src/driver/web_driver.dart:301:5)
<asynchronous suspension>
#4      WebFlutterDriver.connectWeb (package:flutter_driver/src/driver/web_driver.dart:99:45)
<asynchronous suspension>
#5      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:21:18)
<asynchronous suspension>

#0      IntegrationTestRunner.run.runTest (package:devtools_shared/src/test/integration_test_runner.dart:154:11)
<asynchronous suspension>
#1      IntegrationTestRunner.run (package:devtools_shared/src/test/integration_test_runner.dart:160:5)
<asynchronous suspension>
#2      runFlutterIntegrationTest (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/test_infra/run/run_test.dart:121:5)
<asynchronous suspension>
#3      _runTest (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/run_tests.dart:84:3)
<asynchronous suspension>
#4      runOneOrManyTests (package:devtools_shared/src/test/integration_test_runner.dart:354:9)
<asynchronous suspension>
#5      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/run_tests.dart:53:3)
<asynchronous suspension>
Error: Process completed with exit code 255.
network_screen_test.dart

https://github.com/flutter/devtools/actions/runs/18568989429/job/52937864918

FlutterDriveProcess - Launching integration_test/test/live_connection/network_screen_test.dart on Web Server in debug mode...
FlutterDriveProcess - Waiting for connection from debug service on Web Server...         50.8s
FlutterDriveProcess - integration_test/test/live_connection/network_screen_test.dart is being served at http://localhost:49478
FlutterDriveProcess - The web-server device requires the Dart Debug Chrome extension for debugging. Consider using the Chrome or Edge devices for an improved development workflow.
FlutterDriveProcess - Debug service listening on ws://127.0.0.1:44456/vNmLRKxvmGU=
FlutterDriveProcess - A Dart VM Service on Web Server is available at: http://127.0.0.1:44456/vNmLRKxvmGU=
ChromeDriver - [1760634965.294][SEVERE]: Timed out receiving message from renderer: 30.000
FlutterDriveProcess - Unhandled exception:
FlutterDriveProcess - DriverError: Driver extension has not been initialized correctly.
FlutterDriveProcess - If the test uses a custom VM service extension, make sure it conforms to the protocol used by package:integration_test and package:flutter_driver.
FlutterDriveProcess - If the test uses VM service extensions provided by the Flutter SDK, then this error is likely caused by a bug in Flutter. Please report it by filing a bug on GitHub:
FlutterDriveProcess -   https://github.com/flutter/flutter/issues/new?template=02_bug.yml
FlutterDriveProcess - Original error: ScriptTimeoutException (500): script timeout
FlutterDriveProcess -   (Session info: chrome=140.0.7339.207)
FlutterDriveProcess - Original stack trace:
FlutterDriveProcess - #0      parseW3cResponse (package:webdriver/src/handler/w3c/utils.dart:78:9)
FlutterDriveProcess - #1      W3cCoreHandler.parseExecuteResponse (package:webdriver/src/handler/w3c/core.dart:59:19)
FlutterDriveProcess - #2      WebDriver.execute.<anonymous closure> (package:webdriver/src/async/web_driver.dart:264:37)
FlutterDriveProcess - #3      AsyncRequestClient.send (package:webdriver/src/common/request_client.dart:96:32)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #4      FlutterWebConnection.sendCommand (package:flutter_driver/src/driver/web_driver.dart:316:7)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #5      WebFlutterDriver.sendCommand (package:flutter_driver/src/driver/web_driver.dart:126:14)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #6      FlutterDriver.requestData (package:flutter_driver/src/driver/driver.dart:573:7)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #7      integrationDriver (package:integration_test/integration_test_driver_extended.dart:87:25)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #8      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:22:3)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - 
FlutterDriveProcess - 
FlutterDriveProcess - #0      FlutterWebConnection.sendCommand (package:flutter_driver/src/driver/web_driver.dart:318:7)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #1      WebFlutterDriver.sendCommand (package:flutter_driver/src/driver/web_driver.dart:126:14)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #2      FlutterDriver.requestData (package:flutter_driver/src/driver/driver.dart:573:7)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #3      integrationDriver (package:integration_test/integration_test_driver_extended.dart:87:25)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - #4      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:22:3)
FlutterDriveProcess - <asynchronous suspension>
FlutterDriveProcess - Application finished.
Unhandled exception:
Exception: Unhandled exception:
DriverError: Driver extension has not been initialized correctly.
If the test uses a custom VM service extension, make sure it conforms to the protocol used by package:integration_test and package:flutter_driver.
If the test uses VM service extensions provided by the Flutter SDK, then this error is likely caused by a bug in Flutter. Please report it by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=02_bug.yml
Original error: ScriptTimeoutException (500): script timeout
  (Session info: chrome=140.0.7339.207)
Original stack trace:
#0      parseW3cResponse (package:webdriver/src/handler/w3c/utils.dart:78:9)
#1      W3cCoreHandler.parseExecuteResponse (package:webdriver/src/handler/w3c/core.dart:59:19)
#2      WebDriver.execute.<anonymous closure> (package:webdriver/src/async/web_driver.dart:264:37)
#3      AsyncRequestClient.send (package:webdriver/src/common/request_client.dart:96:32)
<asynchronous suspension>
#4      FlutterWebConnection.sendCommand (package:flutter_driver/src/driver/web_driver.dart:316:7)
<asynchronous suspension>
#5      WebFlutterDriver.sendCommand (package:flutter_driver/src/driver/web_driver.dart:126:14)
<asynchronous suspension>
#6      FlutterDriver.requestData (package:flutter_driver/src/driver/driver.dart:573:7)
<asynchronous suspension>
#7      integrationDriver (package:integration_test/integration_test_driver_extended.dart:87:25)
<asynchronous suspension>
#8      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:22:3)
<asynchronous suspension>


#0      FlutterWebConnection.sendCommand (package:flutter_driver/src/driver/web_driver.dart:318:7)
<asynchronous suspension>
#1      WebFlutterDriver.sendCommand (package:flutter_driver/src/driver/web_driver.dart:126:14)
<asynchronous suspension>
#2      FlutterDriver.requestData (package:flutter_driver/src/driver/driver.dart:573:7)
<asynchronous suspension>
#3      integrationDriver (package:integration_test/integration_test_driver_extended.dart:87:25)
<asynchronous suspension>
#4      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/test_driver/integration_test.dart:22:3)
<asynchronous suspension>

#0      IntegrationTestRunner.run.runTest (package:devtools_shared/src/test/integration_test_runner.dart:154:11)
<asynchronous suspension>
#1      IntegrationTestRunner.run (package:devtools_shared/src/test/integration_test_runner.dart:160:5)
<asynchronous suspension>
#2      runFlutterIntegrationTest (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/test_infra/run/run_test.dart:121:5)
<asynchronous suspension>
#3      _runTest (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/run_tests.dart:84:3)
<asynchronous suspension>
#4      runOneOrManyTests (package:devtools_shared/src/test/integration_test_runner.dart:354:9)
<asynchronous suspension>
#5      main (file:///Users/runner/work/devtools/devtools/packages/devtools_app/integration_test/run_tests.dart:53:3)
<asynchronous suspension>
Error: Process completed with exit code 255.

elliette avatar Oct 16 '25 17:10 elliette

Based on the error message [SEVERE]: Timed out receiving message from renderer, I believe these two flakes have the same underlying cause - ChromeDriver isn't starting up in time to receive the commands from flutter_driver.

elliette avatar Oct 16 '25 17:10 elliette

Digging in a bit more, I think the ScriptTimeoutException we are hitting is the default WebDriver script timeout. The 30,000 ms timeout matches the error we are seeing ([SEVERE]: Timed out receiving message from renderer: 30.000)

This makes think the other timeout exception we are seeing might be coming from the WebDriver pageload timeout. The 300,000 ms timeout nearly matches the error we are seeing ([SEVERE]: Timed out receiving message from renderer: 298.218)

elliette avatar Oct 16 '25 18:10 elliette