代码之家  ›  专栏  ›  技术社区  ›  ken4ward

使用颤振的简单集成测试

  •  0
  • ken4ward  · 技术社区  · 8 年前

    findById 还有浓缩咖啡,我们可以用, R.id.unique_element_id .

    mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Text(
                  'You have pushed the button this many times:',
                ),
                new TextFormField(
                  decoration: new InputDecoration(
                      labelText: 'Enter your username'
                  ),
                ),
                new TextFormField(
                  decoration: new InputDecoration(
                      labelText: 'Enter your phone number'
                  ),
                  keyboardType: TextInputType.number,
                ),
    
                new Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
    

    像这样设置测试文件

        import 'package:flutter_driver/flutter_driver.dart';
        import 'package:test/test.dart';
    
        void main() {
          FlutterDriver driver;
    
          setUpAll(() async {
            driver = await FlutterDriver.connect();
          });
    
          tearDownAll(() async {
            if(driver != null){
              driver.close();
            }
          });
    
    
    test('tap on the button, verify result', () async {
        final SerializableFinder username = find.byValueKey('usernametextfield');
        expect(username, isNotNull);
        //insert value into username
    
        final SerializableFinder phonenumber = find.byValueKey('phone');
        expect(phonenumber, isNotNull);
        //insert value into phonenumber
    });
    

    //insert value into username //insert value into phonenumber 是我想要完成的实际测试用例。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Paras Arora    5 年前

    integration_test 我创建了一个登录流示例

    1. 首先在dev下的pubspec.yaml中添加一个依赖项

             dev_dependencies:
               flutter_test:
                 sdk: flutter
               test: ^1.9.4
               integration_test: ^1.0.1
      
    2. 包的结构应如下所示: enter image description here

    3. 将此添加到test/test\u driver/integration\u test.dart中

                     import'package:integration_test/integration_test_driver.dart';
      
                                     Future<void> main() => integrationDriver(); 
      

    4.将此添加到integration\u test/foo\u test.dart中

                                        void main() {
                                          IntegrationTestWidgetsFlutterBinding.ensureInitialized();
      
                                          testWidgets("Sign in test example", (WidgetTester tester) async {
                                            final Finder signInEmailField = find.byKey(Key('signInEmailField'));
                                            final Finder signInPasswordField = find.byKey(Key('signInPasswordField'));
                                            final Finder signInSaveButton = find.byKey(Key('signInSaveButton'));
      
                                            await tester.pumpWidget(MyApp());
      
                                            await tester.pumpAndSettle();
      
                                            await tester.tap(find.byKey(Key('signInEmailField')));
                                            await tester.enterText(signInEmailField, "paras@gmail.com");
      
                                            await tester.tap(signInPasswordField);
                                            await tester.enterText(signInPasswordField, "123456");
      
                                            await tester.tap(signInSaveButton);
                                            print("button tapped");
                                            await tester.pumpAndSettle(Duration(seconds: 1));
                                            expect(
                                                find.byWidgetPredicate((widget) =>
                                                    widget is AppBar &&
                                                    widget.title is Text &&
                                                    (widget.title as Text).data.startsWith("ToDoApp")),
                                                findsOneWidget);
      
                                            await tester.pumpAndSettle(Duration(seconds: 1));
                                          });
                                        }
    
    1. 添加键就像我们在颤振驱动设置

                         appBar: AppBar(
                           title: Text(
                             'ToDoApp',
                             key: Key("toDoKey"),
                           ),
                           backgroundColor: Colors.brown[400],
                         ),
      
    2. Foo上次在终端中运行命令 颤振驱动
      --驱动程序=测试\驱动程序/集成\测试.dart
      --目标=集成测试/foo测试.dart

        2
  •  0
  •   Darshan    7 年前

    不确定你是否找到了问题的答案,但我在这里发布了一个解决方案。希望有帮助。

    基本上,你需要定义 key TextFormField widget,它将帮助您唯一地识别该widget,然后您可以对其执行操作。 例子:

    new TextFormField(
                  key: Key('userNameTextField'),
                  decoration: new InputDecoration(
                      labelText: 'Enter your username'
                  ),
                ),
    

    test('tap on the button, verify result', () async {
        final SerializableFinder username = find.byValueKey('userNameTextField');
        expect(username, isNotNull);
        await driver.waitFor(username);
        await driver.enterText('Test');
    
      // repeat above for `phoneNumber` widget.
    
        final SerializableFinder phonenumber = find.byValueKey('phone');
        expect(phonenumber, isNotNull);
        //insert value into phonenumber
    });
    
        3
  •  0
  •   Hubert Arciszewski    5 年前

    我创建了一个输入文本的方法。 也许这对某人有用。

      Future<void> enterText(SerializableFinder itemFinder, String text) async {
        final isTextFieldPresent = await isPresent(itemFinder);
    
        if (isTextFieldPresent) {
          await _driver.tap(itemFinder);
          await _driver.enterText(text);
          await _driver.waitFor(find.text(text));
        } else {
          expect(isTextFieldPresent, true, reason: 'Cannot find text field');
        }
      }
    

    下面是我在上面使用的isPresent方法

      Future<bool> isPresent(SerializableFinder itemFinder,
          {int delayInMilis = 1000}) async {
        final timeout = Duration(milliseconds: delayInMilis);
        try {
          await _driver.waitFor(itemFinder, timeout: timeout);
          return true;
        } catch (exception) {
          return false;
        }
      }
    
    推荐文章