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.

pasted image 0 (2)

 来自:https://www.fleekitsolutions.com/automating-flutter-app-appium-flutter-driver/

简单的说,其实真正在测试的是flutter driver,就是flutter的测试工具,appium-flutter-driver类似于转发器,把脚本命令发给flutter driver去测试。

 

That is all.

 

posted @   柏。  阅读(4818)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示