appium-flutter-driver 测试flutter项目
1.安装Appium:
安装就按照官网的就可以了:
http://appium.io/docs/en/about-appium/getting-started/?lang=zh
2.安装appium-flutter-driver:
npm i -g appium-flutter-driver
如果后面会提示找不到 appium-flutter-finder ,那就在运行:
npm i -g appium-flutter-finder
git地址:https://github.com/truongsinh/appium-flutter-driver
3.测试
环境搭建完毕,就可以开始测试了:
注意:被测试的flutter的app需要是debug或者是profiling包,不可以是realease包。
step1:在pubspec.yaml文件中,新增
dev_dependencies:
flutter_test:
sdk: flutter
test: any
flutter_driver:
sdk: flutter
step2:在runApp()前追加 enableFlutterDriverExtension();
void main() { enableFlutterDriverExtension(); runApp(MyApp()); }
step3:编写最简单的测试脚本:
// import * as wdio from 'webdriverio'; // import * as assert from 'assert'; const wdio = require('webdriverio'); const assert = require('assert'); const find = require('appium-flutter-finder'); const opts = { port: 4723, capabilities: { platformName: "Android", platformVersion: "10", deviceName: "one plus", app: "D:/Tests/Appium/flutter_test_demo.apk", automationName: "Flutter" } }; (async () => { // byValueKey是flutter driver的api,用于通过key来查找Widgets,key只能是String或者是int const buttonFinder = find.byValueKey('FloatingActionButton'); // 加载测试的配置 const driver = await wdio.remote(opts); // 点击按钮 await driver.elementClick(buttonFinder); })();
测试结果很明显:自动加1了呗。
注意: automationName: "Flutter" 这代码一定要加上,不然会报各种 not implement.
更多的测试案例,可以参考:
https://github.com/truongsinh/appium-flutter-driver/blob/master/example/nodejs/src/index.js
附上flutter代码:
import 'package:flutter/material.dart'; import 'package:flutter_driver/driver_extension.dart'; void main() { enableFlutterDriverExtension(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( key: Key('FloatingActionButton'), onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }
原理:
Appium Flutter driver is a cross-platform test automation tool for flutter applications. It is a part of the automation tool for the Appium mobile test. But how does the driver for Appium Flutter work? To instantiate the flutter engine, it uses WebSocket communication to hold the WDIO script, and the request will be sent to the particular application. The AUT will then submit the script response via the Appium Flutter driver.
来自:https://www.fleekitsolutions.com/automating-flutter-app-appium-flutter-driver/
简单的说,其实真正在测试的是flutter driver,就是flutter的测试工具,appium-flutter-driver类似于转发器,把脚本命令发给flutter driver去测试。
That is all.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端