flutter - 如何使用 FlutterDriver 检查小部件是否可见

标签 flutter flutter-test

我不确定如何使用 FlutterDriver 检查小部件当前是否显示。 .

使用 WidgetTester这真的很容易使用例如findsOneWidget .
但是,在使用 FlutterDriver 的集成测试期间,无法访问 WidgetTester 对象。

FlutterDriver.waitFor方法不指示是否在给定的持续时间内找到小部件。

如何使用 FlutterDriver 检查小部件是否在屏幕上?

最佳答案

Flutter Driver 没有明确的方法来检查小部件是否存在/存在,但我们可以创建一个自定义方法,使用 waitFor 方法来实现该目的。例如,我在屏幕上有一个简单的 text 小部件,我将使用自定义方法 isPresent 编写一个 Flutter 驱动程序测试来检查该小部件是否存在。

主要代码:

body: Center(
      child:
      Text('This is Test', key: Key('textKey'))

检查此小部件是否存在的 Flutter 驱动程序测试如下:

test('check if text widget is present', () async {
      final isExists = await isPresent(find.byValueKey('textKey'), driver);
      if (isExists) {
        print('widget is present');
      } else {
        print('widget is not present');
      }
    });

isPresent是自定义方法,定义如下:

isPresent(SerializableFinder byValueKey, FlutterDriver driver, {Duration timeout = const Duration(seconds: 1)}) async {
  try {
    await driver.waitFor(byValueKey,timeout: timeout);
    return true;
  } catch(exception) {
    return false;
  }
}

运行测试检测到小部件存在:

enter image description here

如果我注释掉 text 小部件代码然后运行测试,它会检测到该小部件不存在:

enter image description here

关于flutter - 如何使用 FlutterDriver 检查小部件是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602769/

相关文章:

flutter 测试 : How to only run one group or test

dart - 如何根据动态返回的数据在更平坦的测试组中创建参数化测试运行

FlutterDriver.Connect 需要 VM_SERVICE_URL 还是字符串?

android - Flutter 应用程序规模巨大

ios - Flutter(iOS) -"No CupertinoLocalizations found",如何解决?

list - 如何将我的数据保存在列表中,以便在Flutter应用程序的整个生命周期中都可以使用?

android-layout - 如何在列表中显示不同的小部件:Flutter

flutter - 获取 Container 获取 Header 下面屏幕的剩余空间

android - Flutterfire firebase_auth 不再有效

json - 10.0.2.2 可以在我的 Android 模拟器中运行,但不能在我的 Flutter 物理设备中运行