标签: flutterdriver

Flutter Driver - 我们可以将命令行参数传递给 Flutter 驱动程序测试吗

我想将测试环境作为命令行参数传递给我的 flutter 驱动程序集成测试。是否可以 ?

我确实在下面的帖子中读到我们可以在 Flutter 驱动程序测试中使用环境变量。但我对命令行参数更感兴趣。

如何将环境变量传递给颤振驱动程序测试

command-line-arguments flutterdriver

11
推荐指数
1
解决办法
1035
查看次数

新的 integration_test 包只显示“测试开始...”[Android]

我尝试将旧的 flutter 驱动程序测试迁移到新的integration_test 包。我复制了示例项目中的几乎所有内容,并在本地执行了示例项目的集成测试。这按预期工作,我能够看到应用程序 UI。但是我自己的应用程序在显示启动画面后仅以紫色显示“测试开始...”。

example_test.dart:

void main() {
  group('My-App', () {
    final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;

    testWidgets('Tap on SkipAuthentication', (tester) async {
      app.main();

      await binding.traceAction(() async {
        await tester.pumpAndSettle();

        await Future.delayed(Duration(seconds: 5));

        final fab = find.byKey(ValueKey(WidgetKeys.authenticationScreenKeys.skipAuthenticationButton));
        await tester.tap(fab);

        await tester.pumpAndSettle();
      });
    });



integration_driver.dart:

Future<void> main() async {
  integrationDriver();
}
Run Code Online (Sandbox Code Playgroud)

我想通了,如果我不启动 tester.pumpWidget() 显示 Widget,我会传递给方法,但那是 WidgetTest 而不是集成测试。

我的猜测是,这是因为我的 main 函数是一个异步函数。我在旧的 flutter 驱动程序测试中也需要这个解决方法来等待第一帧。但是我不知道如何使用新的 integration_test 包来实现它。

希望您能够帮助我。

integration-testing flutter-test flutterdriver

9
推荐指数
2
解决办法
719
查看次数

Flutter 驱动程序处理最小化应用程序

我正在为我的颤振应用程序制作一些测试场景。其中一项功能是“关于我们”部分。当点击“关于我们”时,用户被重定向到网页并且应用程序被最小化。这是一个问题,因为测试场景在这一点上失败了。Flutter 无法找到任何组件,并且在此特定错误上失败

Unhandled exception:
DriverError: Failed to fulfill Tap due to remote error
Original error: Bad state: The client closed with pending request "ext.flutter.driver".
Original stack trace:
#0      new Client.withoutJson.<anonymous closure> (package:json_rpc_2/src/client.dart:70:24)
#1      _RootZone.run (dart:async/zone.dart:1445:54)
#2      _FutureListener.handleWhenComplete (dart:async/future_impl.dart:167:18)
#3      Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:666:39)
#4      Future._propagateToListeners (dart:async/future_impl.dart:722:37)
#5      Future._propagateToListeners (dart:async/future_impl.dart:621:9)
#6      Future._completeWithValue (dart:async/future_impl.dart:529:5)
#7      Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
#8      _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#9      _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#10     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#11     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:404:11)
#12     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:428:5)
#13     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)


#0      VMServiceFlutterDriver.sendCommand (package:flutter_driver/src/driver/vmservice_driver.dart:345:7)
<asynchronous suspension>
#1      FlutterDriver.tap (package:flutter_driver/src/driver/driver.dart:207:11) …
Run Code Online (Sandbox Code Playgroud)

testing mobile dart flutter flutterdriver

7
推荐指数
1
解决办法
286
查看次数

Flutter Driver 测试超时

我是 Flutter Driver 测试的新手,我有一个问题,即在等待小部件出现时,测试总是超时(30 秒)。我的主课只检查 Firebase 用户是否为空。如果用户登录,则显示仪表板,否则显示登录屏幕。在运行检查时,它会显示一个 SplashScreen。测试“检查颤振驱动程序健康”正常完成。

我试过find.byValueKey("auth_screen")而不是find.byType("AuthScreen"),它给出了同样的问题。

错误日志:

VMServiceFlutterDriver: Connected to Flutter application.
00:01 +0: rendin app check flutter driver health

HealthStatus.ok

00:01 +1: rendin app Check login screen widgets

Splash screen

VMServiceFlutterDriver: waitFor message is taking a long time to complete...
VMServiceFlutterDriver: waitFor message is taking a long time to complete...
00:31 +1 -1: rendin app Check login screen widgets [E]

  TimeoutException after 0:00:30.000000: Test timed out after 30 seconds.

    Bad state: The …
Run Code Online (Sandbox Code Playgroud)

android dart flutter flutterdriver

6
推荐指数
1
解决办法
3455
查看次数

Flutter 集成测试 - 无法停止应用程序 - 仅在 iOS 上

我正在 Android 和 iOS 模拟器上为我的应用程序进行集成测试

android 的完成如预期所有测试都通过并且应用程序停止

但是 iOS 完成了测试并且所有测试都通过了,但最终出现错误“无法停止应用程序”

我的 app.dart 文件

import 'package:flutter_driver/driver_extension.dart';
import 'package:myapp/main.dart' as app;

void main(){
  enableFlutterDriverExtension();
  app.main();
}
Run Code Online (Sandbox Code Playgroud)

我的 app_test.dart 文件

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main(){
  group('Empty App',(){

    FlutterDriver? driver;

    setUpAll(() async {
      driver = await FlutterDriver.connect();
    });

    tearDownAll(() async {
      if (driver != null){
        await driver!.close();
      }
    });

    test('find widgets',() async{
      final text1 = find.byValueKey('Today');
      expect(await driver!.getText(text1),'Today');
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

我在 MacBook Air M1 上使用 android studio

我该怎么做才能解决这个错误?

谢谢

integration-testing flutter flutter-test flutterdriver flutter-integration-test

6
推荐指数
1
解决办法
845
查看次数

我应该如何在颤振驱动程序测试中找到全局密钥?

通常我将 Key: ValueKey 放在一个 flutter 元素中,我想在测试用例中找到该元素进行测试,但是这个特定元素已经有一个 globalKey。那么,我应该使用什么来查找元素中使用的 globalkey 呢?

值键

key: ValueKey('nameField')

在测试用例中=> final nameField = find.byValueKey('nameField')

全局键

final LabeledGlobalKey<FormFieldState<String>> _passwordField = LabeledGlobalKey<FormFieldState<String>>("passwordFieldKey")

key: _passwordField

在测试用例中=> final passwordField = find.???('???')

flutter-test flutterdriver

5
推荐指数
1
解决办法
1732
查看次数


Flutter 小部件与 Flutter 驱动程序

我正在为用Flutter. 我按照这本关于测试 Flutter 应用程序的 Flutter Cookbook学习了如何编写小部件和集成测试。

本教程完美运行,但我仍然坚持自己的集成测试。

为了简化,我们假设我有一个应用程序,仅包含TextField

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MyAppp',
      home: Scaffold(
        body: Center(child: TextField()),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我想为这个应用程序编写一个测试。例如,我想测试以下场景:

  • 打开应用程序
  • 检查是否TextField为空
  • 选择TextField
  • 输入“你好,世界!”
  • 检查是否TextField包含“hello, world!”

我编写了以下Widget测试,效果很好:

void main() {
  testWidgets('TextField behavior', (WidgetTester tester) async {
    // Create app
    await tester.pumpWidget(MyApp());

    // Find TextField, check there …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-test flutterdriver

3
推荐指数
1
解决办法
3050
查看次数

Flutter 集成测试的热重载?

我已经按照此处的定义在我的项目上设置了 Flutter 集成测试:https : //flutter.dev/docs/testing/integration-tests

我使用了以下 devDepencendies:

integration_test: ^1.0.0
flutter_test:
  sdk: flutter
flutter_driver:
  sdk: flutter
Run Code Online (Sandbox Code Playgroud)

测试驱动程序只是来自项目页面的 C&P:

import 'package:integration_test/integration_test_driver.dart';

Future<void> main() => integrationDriver();
Run Code Online (Sandbox Code Playgroud)

最终测试:

void main() {
    IntegrationTestWidgetsFlutterBinding.ensureInitialized();

    testWidgets('CPCSA-TC-016: Vehicle Card with no alert',
    (WidgetTester tester) async {
        app.main();
        // Execute test code. 
    });
}
Run Code Online (Sandbox Code Playgroud)

最后我运行我的测试

flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test.dart

这基本上没问题,但它在每次执行时都会编译,这非常耗时。我是否有机会运行集成测试并拥有与常规开发相同的热重载功能?如何实现这一目标?

或者还有其他解决方法吗?我正在考虑首先将测试代码编写为单元/小部件测试,然后在执行正确后将其移植到集成测试中。

integration-testing flutter hot-reload flutterdriver flutter-integration-test

2
推荐指数
1
解决办法
407
查看次数