Skip to content

Conversation

@cbracken
Copy link
Member

@cbracken cbracken commented May 5, 2018

Also removes a previous hack that no longer appears to help (adding a 1
second delay in setUpAll() does seem to work around this issue though).

This test fails consistently on mac2 and mac3 with the attached Moto G4
devices but passes consistently on other machines.

Adding a delay of 1s right after driver.connect() in setUpAll() causes
it to pass on the machines in question, which suggests a race condition.
Specifically it looks like connect returns the moment Flutter Driver
identifies that the isolate is up and running, but empirically it looks
like we start running the first test before the UI is actually up. This
triggers a failure wherein we start looking for elements before they're
onstage.

Link to viewport.dart:213 at HEAD:

return renderSliver.geometry.visible;

Stack trace:
FlutterDriver waitFor should find text "present"

  DriverError: Error in Flutter application: Uncaught extension error while executing waitFor: NoSuchMethodError: The getter 'visible' was called on null.
  Receiver: null
  Tried calling: visible
  #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:46:5)
  #1      _ViewportElement.debugVisitOnstageChildren. (package:flutter/src/widgets/viewport.dart:213:36)
  #2      WhereIterator.moveNext (dart:_internal/iterable.dart:439:11)
  #3      Iterable.forEach (dart:core/iterable.dart)
  #4      _ViewportElement.debugVisitOnstageChildren (package:flutter/src/widgets/viewport.dart:214:8)
  #5      _DepthFirstChildIterator._reverseChildrenOf (package:flutter_test/src/all_elements.dart:54:15)
  #6      _DepthFirstChildIterator.moveNext (package:flutter_test/src/all_elements.dart:45:19)
  #7      CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  #8      _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  #9      WhereIterator.moveNext (dart:_internal/iterable.dart:438:22)
  #10     CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  #11     _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  #12     Iterable.isEmpty (dart:core/iterable.dart:449:33)
  #13     Iterable.isNotEmpty (dart:core/iterable.dart:456:27)
  #14     FlutterDriverExtension._waitForElement. (package:flutter_driver/src/extension/extension.dart:215:51)
  #15     FlutterDriverExtension._waitUntilFrame (package:flutter_driver/src/extension/extension.dart:197:19)
  #16     FlutterDriverExtension._waitForElement (package:flutter_driver/src/extension/extension.dart:215:11)

  #17     FlutterDriverExtension._waitFor (package:flutter_driver/src/extension/extension.dart:286:11)

  #18     FlutterDriverExtension.call (package:flutter_driver/src/extension/extension.dart:168:51)

  #19     BindingBase.registerServiceExtension. (package:flutter/src/foundation/binding.dart:370:32)

@cbracken cbracken requested a review from Hixie May 5, 2018 04:55
@cbracken
Copy link
Member Author

cbracken commented May 5, 2018

Another alternative: #17320

This test fails consistently on mac2 and mac3 with the attached Moto G4
devices but passes consistently on other machines.

Adding a delay of 1s right after driver.connect() in setUpAll() causes
it to pass on the machines in question, which suggests a race condition.
Specifically it looks like connect returns the moment Flutter Driver
identifies that the isolate is up and running, but empirically it looks
like we start running the first test before the UI is actually up. This
triggers a failure wherein we start looking for elements before they're
onstage.

Link to viewport.dart:213 at HEAD:
https://github.com/flutter/flutter/blob/b2b46659262c66ff13abc2b8016a94a47646eaad/packages/flutter/lib/src/widgets/viewport.dart#L213

Stack trace:
FlutterDriver waitFor should find text "present"

```
  DriverError: Error in Flutter application: Uncaught extension error while executing waitFor: NoSuchMethodError: The getter 'visible' was called on null.
  Receiver: null
  Tried calling: visible
  #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:46:5)
  flutter#1      _ViewportElement.debugVisitOnstageChildren. (package:flutter/src/widgets/viewport.dart:213:36)
  flutter#2      WhereIterator.moveNext (dart:_internal/iterable.dart:439:11)
  flutter#3      Iterable.forEach (dart:core/iterable.dart)
  flutter#4      _ViewportElement.debugVisitOnstageChildren (package:flutter/src/widgets/viewport.dart:214:8)
  flutter#5      _DepthFirstChildIterator._reverseChildrenOf (package:flutter_test/src/all_elements.dart:54:15)
  flutter#6      _DepthFirstChildIterator.moveNext (package:flutter_test/src/all_elements.dart:45:19)
  flutter#7      CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  flutter#8      _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  flutter#9      WhereIterator.moveNext (dart:_internal/iterable.dart:438:22)
  flutter#10     CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  flutter#11     _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  flutter#12     Iterable.isEmpty (dart:core/iterable.dart:449:33)
  flutter#13     Iterable.isNotEmpty (dart:core/iterable.dart:456:27)
  flutter#14     FlutterDriverExtension._waitForElement. (package:flutter_driver/src/extension/extension.dart:215:51)
  flutter#15     FlutterDriverExtension._waitUntilFrame (package:flutter_driver/src/extension/extension.dart:197:19)
  flutter#16     FlutterDriverExtension._waitForElement (package:flutter_driver/src/extension/extension.dart:215:11)

  flutter#17     FlutterDriverExtension._waitFor (package:flutter_driver/src/extension/extension.dart:286:11)

  flutter#18     FlutterDriverExtension.call (package:flutter_driver/src/extension/extension.dart:168:51)

  flutter#19     BindingBase.registerServiceExtension. (package:flutter/src/foundation/binding.dart:370:32)
```

Removes a previous hack that no longer appears to help (adding a 1
second delay in setUpAll() does seem to work around this issue though).
@Hixie
Copy link
Contributor

Hixie commented May 6, 2018

lgtm

@cbracken cbracken merged commit 4509b15 into flutter:master May 7, 2018
@cbracken cbracken deleted the mark-flaky branch May 7, 2018 01:00
DaveShuckerow pushed a commit to DaveShuckerow/flutter that referenced this pull request May 14, 2018
This test fails consistently on mac2 and mac3 with the attached Moto G4
devices but passes consistently on other machines.

Adding a delay of 1s right after driver.connect() in setUpAll() causes
it to pass on the machines in question, which suggests a race condition.
Specifically it looks like connect returns the moment Flutter Driver
identifies that the isolate is up and running, but empirically it looks
like we start running the first test before the UI is actually up. This
triggers a failure wherein we start looking for elements before they're
onstage.

Link to viewport.dart:213 at HEAD:
https://github.com/flutter/flutter/blob/b2b46659262c66ff13abc2b8016a94a47646eaad/packages/flutter/lib/src/widgets/viewport.dart#L213

Stack trace:
FlutterDriver waitFor should find text "present"

```
  DriverError: Error in Flutter application: Uncaught extension error while executing waitFor: NoSuchMethodError: The getter 'visible' was called on null.
  Receiver: null
  Tried calling: visible
  #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:46:5)
  flutter#1      _ViewportElement.debugVisitOnstageChildren. (package:flutter/src/widgets/viewport.dart:213:36)
  flutter#2      WhereIterator.moveNext (dart:_internal/iterable.dart:439:11)
  flutter#3      Iterable.forEach (dart:core/iterable.dart)
  flutter#4      _ViewportElement.debugVisitOnstageChildren (package:flutter/src/widgets/viewport.dart:214:8)
  flutter#5      _DepthFirstChildIterator._reverseChildrenOf (package:flutter_test/src/all_elements.dart:54:15)
  flutter#6      _DepthFirstChildIterator.moveNext (package:flutter_test/src/all_elements.dart:45:19)
  flutter#7      CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  flutter#8      _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  flutter#9      WhereIterator.moveNext (dart:_internal/iterable.dart:438:22)
  flutter#10     CachingIterable._fillNext (package:flutter/src/foundation/basic_types.dart:252:27)
  flutter#11     _LazyListIterator.moveNext (package:flutter/src/foundation/basic_types.dart:279:21)
  flutter#12     Iterable.isEmpty (dart:core/iterable.dart:449:33)
  flutter#13     Iterable.isNotEmpty (dart:core/iterable.dart:456:27)
  flutter#14     FlutterDriverExtension._waitForElement. (package:flutter_driver/src/extension/extension.dart:215:51)
  flutter#15     FlutterDriverExtension._waitUntilFrame (package:flutter_driver/src/extension/extension.dart:197:19)
  flutter#16     FlutterDriverExtension._waitForElement (package:flutter_driver/src/extension/extension.dart:215:11)

  flutter#17     FlutterDriverExtension._waitFor (package:flutter_driver/src/extension/extension.dart:286:11)

  flutter#18     FlutterDriverExtension.call (package:flutter_driver/src/extension/extension.dart:168:51)

  flutter#19     BindingBase.registerServiceExtension. (package:flutter/src/foundation/binding.dart:370:32)
```

Removes a previous hack that no longer appears to help (adding a 1
second delay in setUpAll() does seem to work around this issue though).
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 11, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants