You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Dart替代Appium+WDIO+Appium Flutter Driver做Flutter应用独立回归测试?

可行方案:用Dart实现Flutter移动端独立自动化测试

完全可以用Dart替代Appium+WDIO的方案,实现不依赖应用源码、仅基于构建包的Flutter移动端自动化测试,以下是两种落地方案:


方案一:基于Flutter Driver的纯Dart测试(推荐,速度快)

这种方案利用Flutter官方的flutter_driver库编写测试代码,测试仓库完全独立,仅依赖打好的应用构建包(需提前在应用中开启Flutter Driver扩展)。

前置要求

你用来测试的APK/IPA必须是开启了Flutter Driver扩展的构建包:

在应用源码(构建包时的源码)的main.dart中添加扩展初始化代码:

void main() {
  enableFlutterDriverExtension(); // 必须添加这一行
  runApp(const MyApp());
}

构建debug或profile版本的安装包(release版本默认不支持该扩展,需额外配置)。

搭建独立测试仓库

  1. 初始化Flutter测试项目:
    flutter create flutter_app_auto_tests
    cd flutter_app_auto_tests
    
  2. 在pubspec.yaml中添加依赖:
    dev_dependencies:
      flutter_driver:
        sdk: flutter
      test: any
    

编写Dart测试代码

在test_driver目录下创建测试文件(如app_functional_test.dart),示例如下:

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
import 'package:flutter_driver/src/common/logical_key.dart';

void main() {
  group('Flutter App 功能测试', () {
    late FlutterDriver driver;

    setUpAll(() async {
      // 连接到已安装在设备上的应用
      driver = await FlutterDriver.connect();
    });

    tearDownAll(() async {
      await driver.close();
    });

    test('点击登录按钮并验证跳转', () async {
      // 通过应用中预设的ValueKey定位元素(需应用开发时给元素设置该key)
      final loginButton = find.byValueKey('login_btn');
      await driver.tap(loginButton);

      // 等待首页元素出现,验证跳转成功
      final homeScreen = find.byValueKey('home_page');
      await driver.waitFor(homeScreen);
    });

    test('模拟系统按键操作', () async {
      // 模拟返回键
      await driver.sendKeyEvent(LogicalKeyboardKey.backspace);
      // 模拟主页键
      await driver.sendKeyEvent(LogicalKeyboardKey.home);
    });
  });
}

注意:若应用未给元素设置ValueKey,也可使用find.text('登录')或find.byType('ElevatedButton')定位,但稳定性不如key定位。

运行测试

  1. 在模拟器/真机上安装好你的应用构建包;
  2. 执行测试命令:
    flutter drive --target=test_driver/app_functional_test.dart
    

方案二:Dart结合Appium客户端(兼容原生/Flutter,无需修改应用)

如果你不想依赖Flutter Driver扩展,可直接用Dart版本的Appium客户端库,完全复刻Appium+WDIO的流程,只是将JS测试代码换成Dart,无需修改应用源码,仅依赖构建包。

步骤

  1. 启动本地或远程Appium服务;
  2. 在测试仓库中添加Dart的Appium依赖(如appium_client)到pubspec.yaml;
  3. 编写测试代码连接Appium服务,控制已安装的应用:
import 'package:appium_client/appium_client.dart';
import 'package:appium_client/src/commands/element.dart';
import 'package:test/test.dart';

void main() {
  late AppiumDriver driver;

  setUpAll(() async {
    // 配置设备和应用信息
    final capabilities = {
      'platformName': 'Android',
      'deviceName': 'emulator-5554',
      'appPackage': 'com.your.app.package', // 替换为你的应用包名
      'appActivity': 'com.your.app.MainActivity', // 替换为启动Activity
      'noReset': true // 保留应用状态,避免重复初始化
    };

    // 连接到Appium服务
    driver = await AppiumDriver.connect(
      Uri.parse('http://localhost:4723/wd/hub'),
      capabilities,
    );
  });

  tearDownAll(() async {
    await driver.quit();
  });

  test('点击登录按钮', () async {
    // 通过元素ID定位(也可用XPath、文本等方式)
    final loginBtn = await driver.findElement(By.id('login_button'));
    await loginBtn.click();
  });
}

两种方案对比

方案优点缺点
Flutter Driver测试速度快,元素定位精准需应用构建包开启扩展,依赖元素key设置
Dart+Appium无需修改应用,兼容原生/Flutter元素测试速度稍慢,定位稳定性略低

内容的提问来源于stack exchange,提问作者Vlad Easy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:41