如何检查输入字段上的文本是否被遮挡

Hol*_*rdo 5 dart flutter widget-test-flutter

我正在尝试测试密码是否被遮挡,这就是我走了多远,但似乎颤振可以读取文本,即使它被遮挡。

 testWidgets('password must be hidden', (WidgetTester tester) async {
  await tester.pumpWidget(wrapWithMaterialApp(child: page));

  await tester.enterText(find.byKey(Key('pass')), '1234');
  final passFinder = find.text('1234');
  expect(passFinder, findsNothing);

});
Run Code Online (Sandbox Code Playgroud)

测试实际上找到了“1234”,但我完全确定它被掩盖了。

Spa*_*atz 9

无论标志如何obscureText,输入的文本始终存储在内存中(此参数仅影响视觉表示)。在测试中我们只能按如下方式检查此属性:

  testWidgets('TextField', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    final finder = find.byKey(Key('pass'));
    final input = tester.firstWidget<TextField>(finder);
    expect(input.obscureText, true);
  });
Run Code Online (Sandbox Code Playgroud)

测试TextFormField需要额外的努力(TextField是 的子项TextFormField):

  testWidgets('TextFormField', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    final finder = find.descendant(
      of: find.byKey(Key('pass')),
      matching: find.byType(TextField),
    );
    final field = tester.firstWidget<TextField>(finder);
    expect(field.obscureText, true);
  });
Run Code Online (Sandbox Code Playgroud)