Skip to content

Driver not support custom command of flutter driver #688

Open
@DangCao1999

Description

@DangCao1999

The flutter allows us add new custom command extension CommandExtension
But the appium flutter driver just allows the basic command execute

I tried to use @appium/execute-driver-plugin to reach to driver.executeElementCommand but can not. Could I implement more code for custom commands?

Example for flutter code

import 'package:flutter/material.dart';
import 'package:flutter_driver/src/common/find.dart';
import 'package:flutter_driver/src/common/message.dart';
import 'package:flutter_test/src/controller.dart';
import 'package:flutter_test/src/finders.dart';
import 'package:flutter_driver/driver_extension.dart';

import './main.dart' as app;

/// Custom command
class CustomCommandResult extends Result {
  final Finder finder;
  const CustomCommandResult(this.finder);

  @override
  Map<String, dynamic> toJson() {
    return <String, dynamic>{
      "hasFound": finder.hasFound,
      // "foundMany": finder.found.toList().length,
    };
  }
}

class CustomCommand extends CommandWithTarget {
  CustomCommand(super.finder);

  @override
  String get kind => 'checkVisible';

  CustomCommand.deserialize(super.json, super.finderFactory)
      : super.deserialize();
}

class CustomCommandExtension extends CommandExtension {
  @override
  Future<Result> call(Command command, WidgetController prober,
      CreateFinderFactory finderFactory, CommandHandlerFactory handlerFactory) {
    FlutterDriverExtension flutterDriverExtension =
        handlerFactory as FlutterDriverExtension;

    final CustomCommand customCommand = command as CustomCommand;

    Finder finder = flutterDriverExtension.createFinder(customCommand.finder);

    return Future.value(CustomCommandResult(finder));
  }

  @override
  String get commandKind => "checkVisible";

  @override
  Command deserialize(
      Map<String, String> params,
      DeserializeFinderFactory finderFactory,
      DeserializeCommandFactory commandFactory) {
    return CustomCommand.deserialize(params, finderFactory);
  }
}

void main() {
  enableFlutterDriverExtension(
      commands: [CustomCommandExtension()]);
  app.main();
}

Example for client script

driver.execute("flutter:commandExtension", "checkVisible", finder);

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions