【问题标题】:How to check if widget is visible using FlutterDriver如何使用 FlutterDriver 检查小部件是否可见
【发布时间】:2019-10-29 08:42:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 用例是什么?那可能不是你想要的。集成测试不应该关心小部件树的样子。
  • 但是小部件测试是可能的吗?小部件测试也可用于小型集成测试。
  • @RémiRousselet 不,不是。我目前可以通过在集成测试运行时采取手动操作来避免该问题,因为它只会在某个时候发生,但是,这不利于自动化,因为我不能始终确保集成测试一直运行。
  • 您可以获取商品的尺寸

标签: flutter flutter-test


【解决方案1】:

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;
  }
}

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

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

【讨论】:

  • 如果小部件不存在,我们可以故意让测试失败吗?
  • @Donki:只使用一个期望:expect(await isPresent(find.byValueKey('textKey'), driver), isTrue);
  • 嗨...我尝试使用它,但出现“意外 哨兵”之类的错误。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2023-01-30
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2023-03-04
相关资源
最近更新 更多