flutter - 如何在 Flutter 集成测试中等待按钮启用
问题描述
在 Flutter 集成测试中,我想在按下按钮之前等待它启用。这可能吗?
解决方案
这个函数让你知道一个小部件是否被启用,然后你可以等待它改变状态:
Future<bool> isEnabled(FlutterDriver driver, SerializableFinder widgetFinder) async {
Map widgetDiagnostics = await driver.getWidgetDiagnostics(widgetFinder);
return widgetDiagnostics["properties"]
.firstWhere((property) => property["name"] == 'enabled')["value"];
}
更新:这是那个等待的朋友
Future<void> waitForEnabled(
FlutterDriver driver, SerializableFinder widgetFinder,
{Duration timeout,
Duration interval,
bool value = true,
String reason}) async {
await driver.waitFor(widgetFinder, timeout: timeout);
timeout ??= Duration(seconds: 5);
interval ??= Duration(milliseconds: 250);
var endTime = DateTime.now().add(timeout);
while (true) {
if (await isEnabled(driver, widgetFinder) == value) {
return;
} else if (DateTime.now().isAfter(endTime)) {
throw TimeoutException(reason ??
'widget did not become ${value ? 'enabled' : 'disabled'} within timeout');
} else {
await Future.delayed(interval);
continue;
}
}
}
您可以通过value: false
让它等待未启用
推荐阅读
- javascript - 为什么在线缩小器会更改我的代码?
- android - Android studio 3.1.4 工具栏卡在角落里
- html - 为什么我的新 div 会影响它之前的 div?
- mysql - 每次将新数据添加到数据库时如何从 1 增加 Id 列
- azure - 如何在 Azure 数据工厂的 Lookup 活动中只读取几行数据
- asynchronous - 如何为异步 WinHttpWebSocketSend 调用设置上下文?
- cordova - 离子代码推送更新失败:无法在 preInstallFailure 获取包起始页
- javascript - Javascript 正则表达式 UTF-8
- python - 创建鼠标聚光灯
- python - 如何使用 python 发送加密和 dkim 签名的邮件?