首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在小部件测试中找到屏幕外的ListView子程序?

如何在小部件测试中找到屏幕外的ListView子程序?
EN

Stack Overflow用户
提问于 2019-02-12 14:06:13
回答 5查看 6.5K关注 0票数 13

当在ListView中显示多个子程序时,如果一个子组件在屏幕外,则小部件测试无法找到它。下面是一个完整的例子:

main.dart

代码语言:javascript
复制
import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(body: Test()));
  }
}

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        Container(
          height: 600,
          color: Colors.red,
        ),
        Text("Find me!"),
      ],
    );
  }
}

main_test.dart

代码语言:javascript
复制
import 'package:flutter_app/main.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets("Find text", (WidgetTester tester) async {
    final testableWidget = App();

    await tester.pumpWidget(testableWidget);

    expect(find.text("Find me!"), findsOneWidget);
  });
}

但是,如果我将Container在main.dart中的高度更改为599,则此测试将失败。

有人知道为什么会这样吗?是虫子吗?有办法绕过它吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-02-12 14:18:24

测试应该像应用程序那样运行,否则,您的测试就会变得毫无用处(因为您不是在测试真正的行为)。因此,这不是一个bug。

您必须在测试中手动滚动ListView,以使其加载更多的小部件。

这可以使用tester完成

代码语言:javascript
复制
final gesture = await tester.startGesture(Offset.zero /* THe position of your listview */ );
// Manual scroll
await gesture.moveBy(const Offset(0, 100));

await tester.pump(); // flush the widget tree 
票数 8
EN

Stack Overflow用户

发布于 2020-09-25 08:51:37

在查找器中将skipOffstate设置为false是一种方法。试试这个:

代码语言:javascript
复制
expect(find.text("Find me!", skipOffstage: false), findsOneWidget);
票数 9
EN

Stack Overflow用户

发布于 2021-01-13 22:50:31

我强烈建议您注意屏幕/拖动运动中的“笛卡尔平面”。

让我解释一下:

  1. 您应该使用:等待tester.drag(keyCartItemProduct1,偏移量(-500.0,0.0));
  2. 然而,你的“偏移”命令,必须遵循相同的“笛卡尔方向”,而不是你的拖拽。

因此:(命令偏移使用笛卡尔的“方向”)-让我们看到: a)左拖动:偏移量(-500.0,0.0) b)右拖动:偏移量(+500.0,0.0) c)向上拖动:偏移:偏移(0.0,+500.0) d)向下拖动:偏移:偏移(0.0,-500.0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54651878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档