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

cre*_*not 8 flutter flutter-test

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

使用WidgetTestereg确实很容易执行findsOneWidget
但是,在使用进行集成测试期间FlutterDriver,无法访问WidgetTester对象。

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

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

Dar*_*han 6

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

主要代码:

body: Center(
      child:
      Text('This is Test', key: Key('textKey'))
Run Code Online (Sandbox Code Playgroud)

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');
      }
    });
Run Code Online (Sandbox Code Playgroud)

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

在此处输入图片说明

希望这可以帮助。