FLUTTER ECOSYSTEM

KazuCocoa/appium_dart

基于 webdriver.dart 的 Dart 版 Appium 客户端

appium_dart 项目封面
Stars
45
Forks
15
最近推送(UTC)
2025年10月27日
项目状态
未归档
Kazuaki Matsuo GitHub avatar
GITHUB User

Kazuaki Matsuo ↗

Software Engineer at @sony (PlayStation). Maintaining @appium. ex-@projectxyzio (@headspinio), @cookpad, @access-company

California, US官方网站 ↗
语言Dart

此仓库发布的插件

使用的依赖

依赖清单 3 项

原始 README

以下为英文项目原文快照,最新内容请访问 GitHub。

展开 / 收起项目 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.