flutter:如何在这个flutter测试中获得按钮控件?

pgky5nke  于 2023-06-24  发布在  Flutter
关注(0)|答案(4)|浏览(165)

我正在使用flutter test。我想测试tap a widget之后的东西,但我不知道如何找到按钮。因为我自定义它而不是使用IconiconButton。另外,我无法根据它的text找到它,因为另一个小部件具有相同的名称。还有两个InkWell小部件,如您所见。基本测试代码在这里。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:grpc/grpc.dart';

import 'package:project/page/login.dart';

void main() {
  testWidgets('login page test', (WidgetTester tester) async {
    // Build our app and trigger a frame
    await tester.pumpWidget(Login());

    expect(find.text('login'), findsNWidgets(2));
    expect(find.text('ID'), findsOneWidget);
    expect(find.text('password'), findsOneWidget);
    expect(find.text('end'), findsOneWidget);

    // how to find my custom button
    await tester.tap((find.byElementType(InkWell)));  <- my question here

    // test other things after tapping the button.
  });

}

klr1opcd

klr1opcd1#

像这样你必须提到key(key:const Key(“btnLogin”),)

ElevatedButton(
          key: const Key("btnLogin"),
          onPressed: () {
            _decrementCounter();
          },
          child: const Text(
            " Login ",
            textAlign: TextAlign.center,
            style: TextStyle(color: Colors.white),
          ),
        ),

在Widget测试中

await tester.tap(find.byKey(const Key('btnLogin')));
await tester.pump();
hc8w905p

hc8w905p2#

InkWell(
          key: const Key("btnLogin"),
          child: ElevatedButton(
            onPressed: () {
              _decrementCounter();
            },
            child: const Text(
              " Login ",
              textAlign: TextAlign.center,
              style: TextStyle(color: Colors.white),
            ),
          ),
        ),

像这样我们也能做到

await tester.tap(find.byKey(const Key('btnLogin')));
await tester.pump();
h79rfbju

h79rfbju3#

像这样给墨水盒按钮取一个键名。

  • -在您的登录屏幕中。*
InkWell(
      key: const Key("login"),
      child: ElevatedButton(
        onPressed: () {
        },
        child: const Text(
          " Login ",
          textAlign: TextAlign.center,
          style: TextStyle(color: Colors.white),
        ),
      ),
    ),

 **- in your testing file**
    
   var loginButton = find.byKey(const Key('login'));
   await tester.tap(loginButton );
eiee3dmh

eiee3dmh4#

使用***find. byType()***代替 find.byElementType()
所以你的代码应该是这样的:
wait tester.tap((find.byType(InkWell)));

相关问题