Драйвер Flutter - Как узнать, какая команда "waitFor" не прошла?
Я использую драйвер Flutter, чтобы написать несколько интеграционных тестов для нашего приложения, и я пытаюсь использовать waitFor
команда, чтобы дождаться появления элемента.
Команда работает нормально и ждет моего элемента или терпит неудачу, если не нашла его. Моя проблема в том, что в случае сбоя журналы консоли не сообщают мне, какой изwaitFor
звонки не удалось.
Я запускаю, например, следующий код, чтобы дождаться myButton1 и myButton2:
Duration timeout = new Duration(seconds: 2);
await _driver.waitFor(myButton1, timeout: timeout);
await _driver.waitFor(myButton2, timeout: timeout);
Однако, когда я запускаю тесты, они терпят неудачу со следующим сообщением об ошибке:
00:04 +0 -1: Buttons shown when app is started [E]
DriverError: Error in Flutter application: Timeout while executing waitFor: TimeoutException after 0:00:02.000000: Future not completed
package:flutter_driver/src/driver/vmservice_driver.dart 343:7 VMServiceFlutterDriver.sendCommand
00:04 +0 -1: Buttons (tearDownAll) [ +77 ms] test 0: process with pid 87459 no longer needed by test harness
[ ] test 0: cleaning up...
[ ] test 0: ensuring end-of-process for shell
[ +10 ms] test 0: deleting temporary directory
[ +4 ms] test 0: shutting down test harness socket server
[ +2 ms] test 0: finished
00:04 +0 -1: Some tests failed.
[ +13 ms] Deleting /var/folders/xt/0fckrj2558746_v71h2vwqh00000gn/T/flutter_tools.WEuo76/flutter_test_compiler.u7VNn4...
[ +9 ms] killing pid 87444
[ +37 ms] Deleting /var/folders/xt/0fckrj2558746_v71h2vwqh00000gn/T/flutter_tools.WEuo76/flutter_test_fonts.FDpcXF...
[ +6 ms] test package returned with exit code 1
[ +13 ms] "flutter test" took 4,890ms.
[ +6 ms]
#0 throwToolExit (package:flutter_tools/src/base/common.dart:14:3)
#1 TestCommand.runCommand (package:flutter_tools/src/commands/test.dart:292:7)
<asynchronous suspension>
#2 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:860:18)
#3 _rootRunUnary (dart:async/zone.dart:1198:47)
#4 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#5 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#6 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#7 Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#8 Future._completeWithValue (dart:async/future_impl.dart:529:5)
#9 Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
#10 _rootRun (dart:async/zone.dart:1190:13)
#11 _CustomZone.run (dart:async/zone.dart:1093:19)
#12 _CustomZone.runGuarded (dart:async/zone.dart:997:7)
#13 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
#14 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#15 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#16 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#17 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)
[ +254 ms] ensureAnalyticsSent: 251ms
[ +1 ms] Running shutdown hooks
[ ] Shutdown hook priority 4
[ ] Shutdown hooks complete
[ ] exiting with code 1
Эта информация не сообщает мне, произошла ли ошибка myButton1 или myButton2. Он также не дает мне никакой строки кода из моих тестов, чтобы указать, в какой из строк действительно была ошибка.
Есть идеи по этому поводу?
1 ответ
Я еще не понял, есть ли встроенный способ сделать это, но я написал вспомогательный метод для получения нужной мне информации:
Future waitForObject(SerializableFinder object, Duration timeout, {String errorMessage = "waitForObject timed out"}) async {
var message = "ERROR ==> $errorMessage";
return await _driver.waitFor(object, timeout: timeout).catchError((e) { throw(message);});
}
Это все равно вызовет ошибку после истечения времени ожидания, если объект не найден, но также укажет мне на точную строку в коде, вызвавшую тайм-аут.