搜索分类、插件与代码仓

插件详情v0.9.2

appium_driver

一个用于 Dart 的 Appium 绑定。支持继承 webdriver.dart 的 WebDriver W3C 规范。

AndroidiOSmacOSWindowsLinux
近 30 天下载
4800
喜欢数
24
Pub 分数
150

安装插件

flutter pub add appium_driver

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

AppiumDriver 是 Appium 的 Dart 绑定,可实现对 Android、iOS、macOS、Windows 和 Linux 上移动应用的自动化测试。它支持 WebDriver W3C 规范,并基于 webdriver.dart 库,为与原生和混合应用交互提供了一致的接口。该包允许开发者使用 Dart 编写跨平台测试脚本,利用 Appium 在真实设备和模拟器上的测试能力。非常适合在移动开发流程中使用 Flutter 或 Dart 的团队,需要强大的自动化工具。

适合场景

  • 自动化移动应用测试
  • 跨平台 UI 测试
  • 真实设备和模拟器测试
  • 与 CI/CD 流水线集成
  • Dart 中的测试脚本开发

主要特点

  • W3C WebDriver 兼容性
  • 与 webdriver.dart 的集成
  • 支持 Android、iOS、macOS、Windows、Linux
  • Dart 原生 API 设计
  • 强大的会话管理

适合对象

  • Flutter 开发者
  • 移动质量保证工程师
  • CI/CD 自动化团队
  • 基于 Dart 的测试框架
  • 跨平台测试项目

使用建议

  • 需要运行 Appium 服务器
  • 需要正确的设备/模拟器设置
  • 仅限 WebDriver 兼容操作
  • 依赖外部 Appium 服务器
  • 可能需要为复杂场景进行额外配置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

appium_driver

Dart CI

An appium binding in Dart

About

Flutter has flutter_driver which runs UI tests like Espresso/EarlGrey/Appium for Flutter elements. The driver is really awesome, but it can automate only flutter view. It cannot handle outside Flutter.

This client aims to be able to write test cases in Dart for Appium. It may help to write test code with the same programming language as the production code.

Example

Take a look at functional tests

Lint

$ dartanalyzer --options analysis_options.yaml .

format

$ dartfmt -w --fix .

pana (analyze on pub.dev)

$ dart pub run pana --source path .

Run tests

Get dependencies

$ dart pub get

Functional

$ dart pub run test test/functional

Unit

$ dart pub run test test/unit

release

  • Bump the version in pubspec.yaml
  • Run dart pub publish

Supported Commands

WebDriver commands

Please refer webdriver.dart APIshttps://pub.dev/documentation/webdriver/latest

  • Some W3C actions
    • https://pub.dev/documentation/webdriver/latest/webdriver.io/Mouse-class.html
    • https://github.com/google/webdriver.dart/blob/6d7943ef098d3c938b1f4da5a8590fe827f3dd80/lib/src/handler/w3c/mouse.dart
Appium actions

All W3C webdriver commands are available such as find_element/s, click and send keys. Below Appium specific commands are implementing.

  • [x] directConnectXxxx
  • [x] batch command
  • [x] CDP command: [HttpMethod.httpPost, 'session/:session_id/goog/cdp/execute']
  • [x] [HttpMethod.httpGet, 'sessions']
  • [x] [HttpMethod.httpGet, 'session/:session_id/contexts']
  • [x] [HttpMethod.httpPost, 'session/:session_id/context']
  • [x] [HttpMethod.httpGet, 'session/:session_id/context']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/element/:id/value'] Deprecated.
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/element/:id/replace_value'] Deprecated.
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/app/launch'] Deprecated
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/app/close'] Deprecated
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/app/reset'] Deprecated
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/app/background']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/app/strings']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/is_locked']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/unlock']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/lock']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/system_time']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/install_app']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/remove_app']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/app_installed']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/activate_app']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/terminate_app']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/app_state']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/shake']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/hide_keyboard']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/press_keycode']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/long_press_keycode']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/push_file']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/pull_file']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/pull_folder']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/get_clipboard']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/set_clipboard']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/settings']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/settings']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/is_keyboard_shown']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/open_notifications']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/device/start_activity']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/current_activity']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/current_package']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/system_bars']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/device/display_density']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/stop_recording_screen']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/start_recording_screen']
  • [x] [HttpMethod.httpGet, 'status']
  • [x] [HttpMethod.httpGet, 'session/:session_id/element/:id/displayed']
  • [x] [HttpMethod.httpGet, 'session/:session_id']
  • [x] [HtMethod.httpGet, 'session/:session_id/location']
  • [x] [HttpMethod.httpPost, 'session/:session_id/location']
  • [x] [HttpMethod.httpGet, 'session/:session_id/ime/available_engines']
  • [x] [HttpMethod.httpGet, 'session/:session_id/ime/active_engine']
  • [x] [HttpMethod.httpGet, 'session/:session_id/ime/activated']
  • [x] [HttpMethod.httpPost, 'session/:session_id/ime/deactivate']
  • [x] [HttpMethod.httpPost, 'session/:session_id/ime/activate']
  • [x] [HttpMethod.httpGet, 'session/:session_id/log/types']
  • [x] [HttpMethod.httpPost, 'session/:session_id/log']
  • [x] [HttpMethod.httpGet, 'session/:session_id/appium/events']
  • [x] [HttpMethod.httpPost, 'session/:session_id/appium/log_event']
  • [x] [HttpMethod.httpGet, 'session/:session_id/orientation']
  • [x] [HttpMethod.httpPost, 'session/:session_id/orientation']
  • [x] Add finder for https://github.com/truongsinh/appium-flutter-driver

Low priority

Most of the commands below are available via extension commands, starting with mobile: in https://github.com/appium/appium-uiautomator2-driver, for example. Thus, they would not be implemented.

  • [ ] [HttpMethod.httpPost, 'session/:session_id/touch/perform'] # W3C actions should be an alternative
  • [ ] [HttpMethod.httpPost, 'session/:session_id/touch/multi/perform'] # W3C actions should be an alternative
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/keyevent'] # Only for Selendroid
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/finger_print']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/compare_images']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/toggle_airplane_mode']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/toggle_wifi']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/toggle_data']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/toggle_location_services']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/app/end_test_coverage']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/performanceData/types']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/getPerformanceData']
  • [ ] [HttpMethod.httpGet, 'session/:session_id/network_connection']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/network_connection']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/send_sms']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/gsm_call']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/gsm_signal']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/gsm_voice']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/network_speed']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/power_capacity']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/device/power_ac']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/simulator/touch_id']
  • [ ] [HttpMethod.httpPost, 'session/:session_id/appium/simulator/toggle_touch_id_enrollment']
  • [ ] [HtMethod.httpGet, 'session/:session_id/timeouts'] <= already has
  • [ ] [HttpMethod.httpPost, 'session/:session_id/keys'] <= will be deprecated in W3C. Use W3C actions instead.

所属分类

依赖

依赖清单 1 项

源码仓库

使用此插件的项目

暂无相关数据。