【问题标题】:Widget test cannot find Widget inside a Drawer小部件测试在抽屉内找不到小部件
【发布时间】:2021-12-27 16:06:59
【问题描述】:

我正在尝试创建一个小部件测试,该测试创建一个抽屉,然后在抽屉中找到小部件。当我运行以下 Widget 测试时,响应是:

预期:小部件树中恰好有一个匹配节点 实际:_KeyFinder:]> 其中:表示没有找到,但应该有一个

任何人都知道为什么 Widget 测试没有在 Drawer 中找到 Text Widget?

如果我使用文本小部件将正文添加到脚手架,则可以按预期找到。所以它似乎只与抽屉有关。

    testWidgets('shows drawer', (WidgetTester tester) async {
      await tester.pumpWidget(
        const MaterialApp(
          home: Scaffold(
            drawer: Drawer(
                child: Text(
              'test',
              key: Key('test'),
            )),
          ),
        ),
      );
      await tester.pumpAndSettle();
      expect(
        find.byKey(const Key('test'), skipOffstage: false),
        findsOneWidget,
      );
    });

【问题讨论】:

    标签: flutter flutter-test drawer


    【解决方案1】:

    首先,您的抽屉在您等待文本时未打开,因此您将无法找到文本。为此,您需要使用脚手架钥匙打开抽屉。

    final _scaffoldKey = GlobalKey<ScaffoldState>();
    testWidgets('shows drawer', (WidgetTester tester) async {
      await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          key: _scaffoldKey,
          drawer: Drawer(
              child: Text(
            'test',
             key: Key('test'),
           )),
         ),
       ),
     );
      _scaffoldKey.currentState!.openDrawer();
      await tester.pumpAndSettle();
      expect(
        find.byKey(const Key('test'), skipOffstage: false),
        findsOneWidget,
      );
    });
    

    【讨论】:

    • 这很奏效。谢谢@Monik
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2020-08-09
    • 2021-02-04
    • 2022-12-12
    • 2018-07-07
    • 2021-02-22
    • 2019-09-14
    • 2021-03-09
    相关资源
    最近更新 更多