All notable changes to this project will be documented in this file.
Read release_notes.md for commit level details.
- Add validation for direct connect URL when
direct_connectcapability istrue.
- Replace internal
add_commandmethod with Selnium Bridge'sadd_commandto simplify the codebase.
- Improve Steep
- Remove
Appium::Core::WebSocketwhich was forappium/device/logcatendpoint. Please use BiDi log endpoint such as this test instead. - update RBS files
update RBS files
- Add more RBS files
- Add WebDriver BiDi support. Please set
webSocketUrlin the capabilities to enable it.test/functional/android/webdriver/bidi_test.rbcan be an example usage.- Older versions of the Selenium Ruby bindings may raise exceptions due to missing module dependencies.
- Add more sig definitions #571
- Remove
::Selenium::WebDriver::DriverExtensions::HasWebStorageimport to follow selenium webdriver 4.30.0
- Remove deprecated marked commands
get_network_connection/set_network_connection,toggle_wifi,toggle_data,toggle_airplane_mode- Please use
mobile: setConnectivity/mobile: getConnectivityinstead
- Please use
start_activity- Please use
mobile: startActivityinstead
- Please use
- Use mobile command for existing methods (the backend method call has changed. Old appium such as Appium v1 or before may have an issue as no matched command)
toggle_location_services,get_performance_data,get_performance_data_types,finger_print,open_notifications,current_activity,current_package,get_system_bars,system_bars,toggle_location_services,hide_keyboard,background_app,set_clipboard,get_clipboard,send_sms,gsm_call,gsm_signal,gsm_voice,set_network_speed,set_power_capacity,set_power_ac,get_display_density,lock,unlock,locked?,hide_keyboard,press_keycode,long_press_keycode,app_strings,app_state,shake,device_time
- Use
http://127.0.0.1:4723as the default url destination instead ofhttp://127.0.0.1:4723/wd/hub--base-pathin appium server may need to drop the/wd/hub
- Fix yardoc
- Added a module to search context to improve documentation
- Drop Ruby 3.0 by following selenium binding
- Update
/se/log/typesand/se/logendpoint call instead of/log/typesand/logfor W3C WebDrier era.
- Remove deprecated
Appium::Core#quit_driver. Please useAppium::Core::Driver.quitinstead.
- Fix to return symbols for
Core#deviceandCore#automation_name
- Raise defined errors in this library instead of Ruby general errors in some places.
- Most of errors have already followed this method. This version has updated rest of them.
- Fix
server_urlusage incore.start_driverto respect the given value every time.
- Simplify internal code with Selenium 4.21.0 further.
- Require Selenium 4.21.0+
- Simplify internal code with Selenium 4.21.0. Now it requires selenium webdriver v4.21.0.
- Stop converting snake cases to camel case for symbols in capabilities
- Please define camel/snake cases in capabilities as-is for the WebDriver capabilities
- Stop implicit symbolizing capabilities
- Historically ruby_lib/ruby_lib_core symbolized capabilities keys from string internally.
Appium.symbolize_keysto build symbolized capabilities if issues occurred by this change.
- Bump thor for publishment module
- Do not ignore an empty string/nil values as caps
- Removed deprecated methods
launch_app,close_appandreset- Please use
activate_app,terminate_app, or launch/activate/terminate commands bymobile:command
- Please use
TouchAction,MultiTouch- Please refer to W3C WebDriver actions
- https://www.rubydoc.info/gems/appium_lib_core/Appium/Core/Base/Bridge#action-instance_method
immediate_valueandreplace_valueend_coveragesessionsandsession_capabilitiessince they are not W3C WebDriver spec and already removed from the dependent selenium clients.- To get events info, please use
driver.logs.eventsinstead
- To get events info, please use
switch_to_default_context- Please set proper context instead
- Remove upper limitation in
selenium-webdriver- Users can control the version in their Gemfile
- ruby_lib_core will fix when the future release requires changes
- Bump
selenium-webdrivermax
- Removed deprecated
core#platform_versionandcore#write_session_id- Please refer to the capabilities' value and
driver.session_id
- Please refer to the capabilities' value and
- Fix default value fo set context
- Bump
selenium-webdrivermax
- Add deprecation marks that will be removed from Appium or this library to move to extension commands such as
mobile:
- Append
selenium-webdriver4.12support
- Add deprecation marks in
immediate_valueandreplace_value
- Append
selenium-webdriver4.11support
- Drop Ruby 2.7 support
- Append
selenium-webdriver4.10support
- Simplify internal http client implementation a bit
- Fixed
driver.execute_cdpcommand error in a chrome session
- Append
selenium-webdriver4.9support
- Support custom listener
- e.g. A listener named
CustomListenerwhich inherits::Selenium::WebDriver::Support::AbstractEventListenercan set asappium_lib: { listener: CustomListener.new}capability
- e.g. A listener named
- Add
uia_device_orientation_landscaperightanduia_device_orientation_portrait_upsidedownsymbols in thedrivede.rotation= - Add
drivede.orientation=as a syntax sugar ofdrivede.rotation=
- Append
selenium-webdriver4.8support - Add
::Appium::Locationsince::Selenium::WebDriver::Locationno longer exists
::Selenium::WebDriver::Locationis deprecated in favor of::Appium::Locationin Appium Ruby binding
Element#immediate_valuesendstextas the request body
- Remove iOS/UiAutomation classes
- The version may work for iOS 8. XCUITest driver will be the default behavior for iOS.
- Add
::Appium::Core::Driver#attach_toto generate a driver instance which has the given session id.- The primary usage is for debugging to attach to an existing session.
- Allow selenium webdriver version 4.7 #423
- Append
selenium-webdriver4.6support
- Fix wrong deprecation message
- Keep converting String to Symbol for
capabilities,capsandappium_libfor the backward compatibility - Wrong
automationNameandplatformNamedetection in this library before starting a session
- Converting
capabilities,capsandappium_libfrom String to Symbol- They are expected to be Symbol. Nothing affects existing users who already give the above keys as Symbol for
Appium::Core.for.
- They are expected to be Symbol. Nothing affects existing users who already give the above keys as Symbol for
- Removed forcefully converting keys of capabilities into symbol, which caused unexpected capabilities format issue ruby_lib/945
- Append
selnium-webdriver4.5support
- Allow selenium webdriver version 4.4 #404
- Relax the selenium webdriver version restriction of
4.2.0
- Remove undefined module in selenium webdriver version
4.3.0
- Restrict the selenium webdriver version to
4.2.0
- Update base Selenium Ruby client to
4.2+- Please call
key_actionor set[::Selenium::WebDriver::Interactions.key('keyboard')]as the deviecs parameter to builddriver.send_keys().performW3C action.driver.key_action.send_keys('xxx').performinstead ofdriver.action.send_keys('xxx').perform, ordriver.action(devices: [::Selenium::WebDriver::Interactions.key('keyboard')]).send_keys('xxx').perform.- This PR change will help to update your some actions.
- Please call
- Limit selenium webdriver version less than
4.2
- Remove unneccessry files from gem package to reduce the size.
- Make default pointerType
touchfor the pointer in W3C actions instead ofmousefor Appium- This change should not affect W3C actions
- Can add more arguments in
install_app- e.g. Add
timeoutMsfor XCUITest driver as@driver.install_app("/path/to/test.ipa", timeoutMs: 20000)
- e.g. Add
- (internal) Allow to access to
bridgeattribute indriverinstance for appium_flutter_finder
- (internal) Fix firstMatch format in a new session creation
- Relaxed version restriction of selenium-webdriver
- Update base selenium webdriver version to
v4- Base Selenium Ruby binding is now v4
- Support only W3C WebDriver spec (and a few Appium specific commands)
- Support Ruby 2.6+
- Add
driver#wait,driver#wait_until,driver#wait_true,driver#wait_until_truesyntaxes- Can give
driverinstance as its block variable
- Can give
element.idreturns the element id instead ofelement.ref.element.refnow returns an array.
- Removed
desired_capabilitiesas capabilities forAppium::Core#for. Please usecapabilitieskey name instead.- e.g.
Appium::Core.for capabilities: {...}instead ofAppium::Core.for desired_capabilities: {...}
- e.g.
- Removed methods that had Deprecated mark
- Removed
driver#screenshot. Please usedriver#save_screenshotinstead - Removed
driver#send_keysto send keys to an active element. Please usedriver.action.send_keys('happy testing').performinstead - Removed
forceMjsonwpto send only MJSONWP capabilities since Selenium cleint v4 no longer supports MJSONWP
- Removed
- No longer set default
timeoutsas0- ruby_lib_core calls
/timeoutsendpoint only whenappium_lib: { wait: 5 }is provided explicitly
- ruby_lib_core calls
- Raises
::Appium::Core::Error::ArgumentErrorinstead ofArgumentErrorfor this library specific argument errors - Removed Selendroid related methods
Appium::Core::TouchActionandAppium::Core::MultiTouchare deprecated- Please use W3C actions instead http://appium.io/docs/en/commands/interactions/actions/
- More working examples:
- test/functional/android/webdriver/w3c_actions_test.rb
- test/functional/ios/webdriver/w3c_actions_test.rb
- test/functional/common_w3c_actions.rb
- https://www.selenium.dev/documentation/support_packages/mouse_and_keyboard_actions_in_detail/
- https://www.youtube.com/watch?v=oAJ7jwMNFVU
- https://appiumpro.com/editions/30-ios-specific-touch-action-methods
- https://appiumpro.com/editions/29-automating-complex-gestures-with-the-w3c-actions-api
launch_app,close_appandreset. Please read issues#15807 for more details.activate_appor a new session request can be alternatives oflaunch_appterminate_appor close the session request can be alternatives ofclose_app- Close current session and creating a new session, or
terminate_appandlaunch_appcan be alternatives ofreset
- Allow to override an existing method by
Appium::Core::Base::Driver#add_commandsince Appium drivers/plugins allow to override them
- Add
satellitesoption inAppium::Core::Base::Driver#set_location
- Add
Appium::Core::Base::Driver#add_commandto allow you to add your own command
- Add
speedargument forAppium::Core::Base::Driver#set_locationsince Appium 1.21.0 - Add
multipleandmatch_neighbour_thresholdarguments forAppium::Core::Base::Driver#find_image_occurrence
- Returns
{}any errors inCore#appium_server_versionto prevent errors in some cases
- Add
start_recording_screenfor Mac2 driver
- Refactor routable
- Add
Element#screenshot,Element#screenshot_asandElement#save_screenshotin Element moduleElement#screenshot_asandElement#save_screenshotare same asDriver#element_screenshot_asandDriver#save_element_screenshotElement#screenshotis same asElement#screenshot_as(:base64)
- Ruby 3.0 support
- Arguments in
@driver.execute_cdp- It should be like
@driver.execute_cdp 'Page.captureScreenshot', quality: 50, format: 'jpeg'as keyword arguments instead of@driver.execute_cdp 'Page.captureScreenshot', { quality: 50, format: 'jpeg' }in Ruby 3
- It should be like
- Arguments in
Supported Ruby version is 2.4+
- No longer work with
forceMjsonwpcapability to force the session MJSONWP
- Fix
install_appto be able to set no args for options
- Security update GHSA-2v5c-755p-p4gv
- Affects only ::Appium::Core::WebSocket
- Fix duplication warning of
execute_cdp
- Remove deprecated
Selenium::WebDriver::Error::TimeOutError
capabilities:is available in addition todesired_capabilities:andcaps:as a capability# case 1 opts = { caps: { }, appium_lib: { } } @driver = Appium::Core.for(opts).start_driver # case 2 opts = { capabilities: { }, appium_lib: { } } @driver = Appium::Core.for(opts).start_driver # case 3 opts = { desired_capabilities: { }, appium_lib: { } } @driver = Appium::Core.for(opts).start_driver
- Add options for
start_recording_screenfile_field_name,form_fieldsandheadersare available since Appium 1.18.0
- Fix
x-idempotency-keyheader to add it only in new session request (#262)
- Add
x-idempotency-keyheader support (appium/appium-base-driver#400)- Can disable the header with
enable_idempotency_header: falseinappium_libcapability. Defaults totrue.
- Can disable the header with
- Add chrome devtools endpoint which is available chrome module in Selenium Ruby binding
- Add screen record feature for Windows driver (appium/appium-windows-driver#66)
#start_recording_screen,#stop_recording_screen
- Add
:viewmatcherselector like@driver.find_elements :view_matcher, { name: 'withText', args: %w(Accessibility), class: 'androidx.test.espresso.matcher.ViewMatchers' }
- Add
attr_reader :bridgefor flutter driver not to usesend
- Fix Ruby 2.7 warnings
- Add
Logs#eventto post a custom log by@driver.logs.event vendor: 'appium', event: 'funEvent' - Add
Logs#eventsto get events by@driver.logs.events. It is equal to@driver.session_capabilities['events']
- Add
system_barsas an alias toget_system_bars
- Fixed parameters of
remove_app
- Add
video_filtersargument forstart_recording_screeniOS- It is available over Appium 1.15.0
- Fix wrong warning message in driver detection
Driver#set_immediate_value(element, *value)- Use
Element#immediate_value(*value)instead
- Use
Driver#replace_value(element, *value)- Use
Element#replace_value(*value)instead
- Use
- Add
execute_driverto run a batch script- It requires Appium version which has
execute_driversupport
- It requires Appium version which has
- Add arguments for
start_activityintentAction,intentCategory,intentFlags,dontStopAppOnReset
- Add
sessionscommand to get all available sessions on the Appium server - [internal] Tweak error messages in emulator module
- [internal] Catch
Selenium::WebDriver::Error::TimeoutErrorwhich will be used instead ofSelenium::WebDriver::Error::TimeOutError
tvOSplatform supportplatformName: :tvos, automationName: :xcuitestcan work for iOS tvOS- It requires Appium 1.13
- Add
pixelFormatargument in screen record for iOS
- [internal] Bump Rubocop target Ruby version to Ruby 2.3
- Append more examples for use case in
test/functionalas functional test cases
- [internal] Fixed typo in
Emulator#gsm_signal#196- Thanks khanhdodang
- Add
:data_matcherfind_element/s attribute appium-espresso-driver#386
This release has a breaking change about an implicit wait.
Ruby client sets 0 seconds as implicit wait by default instead of 20 seconds.
The behaviour follows the default spec in WebDriver.
- Breaking changes
- Set implicit wait zero by default #186
- Can configure
wait: 20asappium_libcapability to keep the behaviour
- Can configure
- Set implicit wait zero by default #186
- [Experimental] Add
direct_connectcapability for the Ruby client in order to handledirectConnectcapability in a create session response by Appium server #189- Update http client following
directConnectProtocol,directConnectHost,directConnectPortanddirectConnectPathifdirect_connectcapability for ruby_lib_core istrue - This will resolve a performance issue if a user has a proxy server to handle requests from client to Appium server.
With this feature, the user can send requests directly to the Appium server after create session skipping the proxy server.
# create session client <---> proxy server <---> appium server <> devices # Following requests after the create session client <----------------------> appium server <> devices
- Update http client following
- Fix potential override of
AppManagement#background_app#188
- Add 3D touch option for
TouchAction#pressappium/WebDriverAgent#79:pressureoption
- Stop sending blank value in
start_activity
- Add
*args, &blockin method missing inSelenium::WebDriver::Element#184
- Add alias for some method calls
ServerErrorinheritsCoreErrorin order to handle it as an exception
set_network_connectionaccepts keys as same asnetwork_connection_typein addition to numbers{ :airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0 }- Read documentation more
- Use
Base64.strict_encode64when this client sendsBase64encoded data to server- Follows RFC 4648 format. It should not affect server side which is front Appium node server
- Continues to decode base 64 data following
decode64to accept RFC 2045 format
- Add
query_app_stateas an alias ofapp_stateto get application status
- Append
appiumin header:appium/ruby_lib_core/2.2.1 (selenium/3.141.0 (ruby macosx))
- Reduce warnings for method definitions
- Add
::Appium::Core::Base.platformto call::Selenium::WebDriver::Platform- Can identify platform using
::Appium::Core::Base.platform.windows?for example
- Can identify platform using
:offset_xand:offset_yinTouchAction#swipeis deprecated in favor of:end_xand:end_y
desired_capabilities:is available in addition tocaps:as a capability# case 1 opts = { caps: { }, appium_lib: { } } @driver = Appium::Core.for(opts).start_driver # case 2 opts = { desired_capabilities: { }, appium_lib: { } } @driver = Appium::Core.for(opts).start_driver
- Update
start_recording_screenfor iOS, Appium 1.10.0- Add
:video_scaleand update:video_type
- Add
- Support below style 1, has url parameter, in addition to style 2
# 1 Appium::Core.for url: "http://127.0.0.1:8080/wd/hub", caps: {...}, appium_lib: {...} # 2 Appium::Core.for caps: {...}, appium_lib: {...} - Add
:video_fpsparam for screen recording in iOS(XCUITest) to sync with Appium 1.10.0
- Allow selenium update following Pi versioning like 3.141.0
- [internal] Update dev libraries
- [internal] No longer send
strategy: :tapOutsideas default value in Android
- Add custom locator in the future work: element-finding-plugins
@driver.find_element :custom, "f:foo"
- Set
'selenium-webdriver', '~> 3.14.1'
- Add finger print feature for Android emulators #13
- Add
keyboard_shown?andcontext=as aliases ofis_keyboard_shownandset_contex
- Add
Appium::Core::Base::Driver#perform_actionsto send multiple actions. Seetest_multiple_actionsas an example.
- Fix desired capability for W3C protocol under selenium grid environment #137
This release has a breaking change for creating core. Thus, I've bumped the major version.
- use
autoloadto load Android/iOS modules
@core = Appium::Core.for(self, opts)is deprecated in favor of@core = Appium::Core.for(opts)- Call
extend Appium::Core::Deviceif you'd like to extend methods defined inAppium::Core- Read #816 as an example
- Call
- fix unexpected method missing against
:to_hashin Element
- Add
:viewtagfor Espresso driver appium-espresso-driver#189 - Add missing
take_viewport_screenshotfor mjsonwp #127
- [internal] Fix raising error in
set_implicit_wait_by_default#130
- Update documentation about
start_recording_screen - Port
send_keys/typefor active element #122 - Support
find_element/s :image, partial_image#119 - Requires
selenium-webdriver 3.14+because of W3C actions #115
- [Internal] Deprecate experimental
ImageElementin favor ofElement
- silence warning for pointeractions #113
- Use method missing to get attributes like
e.resource_idinstead ofe.attribute 'resource-id'#116 - Set
'~> 3.5', '< 3.14'
- Relax the logic of
:appcapability
- Fix
within_context
- Available packages over HTTP #106
- Remove warning of camelCase capability for W3C format
- Fix including search context in
::Selenium::WebDriver::Elemenetinclude ::Appium::Core::Base::SearchContextinstead of::Selenium::WebDriver::SearchContext
- Add Tizen case
- [Internal] reduce method definition by
add_endpoint_method
- Add
find_element_by_imageandfind_elements_by_imageto handleImageElement- Read here for more details
- Add a
ImageElementto handle images as elements bymatchTemplate- Experimental feature
- [Internal] Define screenshot methods in appium_lib_core instead of Selenium's one
- Add a
formatargument fordevice_time#94
- Return empty array
[]for find_elements
- Has one Breaking Change
- Add
flagsinpress_keycodeandlong_press_keycode- New:
@driver.press_keycode 66, metastate: [1], flags: [0x20, 0x2000]metastateshould set as a keyword argumentlong_press_keycodeas well
- Before:
@driver.press_keycode 66, 1(Can set only metastate)- How to change: add
metastate:for the metastate argument
- How to change: add
- New:
- Add
- [Internal] Change directory and file structure
- [Internal] Set default content-type
- Breaking Change
- Change the results of
app_state.- Before: A number or const.
0, 1, 2, 3, 4orNOT_INSTALLED, NOT_RUNNING, RUNNING_IN_BACKGROUND_SUSPENDED, RUNNING_IN_BACKGROUND, RUNNING_IN_FOREGROUND
- After: Symbol.
:not_installed, :not_running, :running_in_background_suspended, :running_in_background, :running_in_foreground
- Before: A number or const.
- Change the results of
- add
battery_infoto get battery information - add
is_keyboard_shownfor iOS ( see also https://github.com/appium/appium-xcuitest-driver/pull/664/files )
- Revert timeout logic in
1.4.1
- [internal] Remove hot fix for XCUITest action
- Changed the name of arguments
swipe(start_x:, start_y:, end_x:, end_y:)instead ofswipe(start_x:, start_y:, offset_x:, offset_y:)
- Revert
delegate_from_appium_driverforruby_libcompatibility
- add base image comparison
match_images_features,find_image_occurrence,get_images_similarity,compare_images
- [internal] No longer have dependency for Selenium's wait
- Raise
::Appium::Core::Wait::TimeoutErrorinstead of::Selenium::WebDriver::Error::TimeOutError
- Raise
- [internal] Separate mjsonwp commands module and w3c commands module from one command module
- Add a support for WebSocket client based on Faye::WebSocket::Client #74
- Make no-argument commands friendly for IDE
- Only for
ruby_lib_coreinternal process- Remove
touchaction by default and followingselenium-webdriverin W3C action.- Since XCUITest and UA2 drivers force handling the pointer as
touch.
- Since XCUITest and UA2 drivers force handling the pointer as
- Remove
- Be able to change
kindin W3C touch action.
- Add a
bug_reportoption instart_recording_screen, Android - Add clipboard apis #69
- Add
save_viewport_screenshotwhich get screenshot except for status bar. - [iOS] Add
start_performance_recordandget_performance_record
- Fix create_session attempt to throw non-existent error type Appium::Core::Error::WebDriverError #66
- add
session_capabilities: https://appium.io/docs/en/commands/session/get/
- Add Android emulator commands
send_sms,gsm_call,gsm_signal,gsm_voice,set_network_speed,set_power_capacity,set_power_ac
- Add toggles
toggle_location_services,toggle_wifi,toggle_data
- add some app management commands #58
- Require Appium 1.8.0+
- Both platforms work absolute based axis for
move_toandswipe- Breaking Changes
- Android was relevant, previously.
- e.g.:
# Do not move because of the start and end point is the same # Tap (75, 500) and move the point to (75, 500) with duration 500ms. Appium::Core::TouchAction.new(@driver) .swipe(start_x: 75, start_y: 500, offset_x: 75, offset_y: 500, duration: 500) .perform # Tap (75, 500) and move the point to (75, 1000) with duration 500ms. Appium::Core::TouchAction.new(@driver) .swipe(start_x: 75, start_y: 500, offset_x: 75, offset_y: 1000, duration: 500) .perform
- Breaking Changes
start_recording_screen/stop_recording_screensupport iOS fromAppium 1.8.0#48- Breaking Changes
start_recording_screen- The argument,
file_path, was removed.
- The argument,
- Breaking Changes
- Print warning messages to use camelCase if capability key names are snake_case
- For W3C adaption for Appium Server
- Make
@driver.automation_namedowncase #50
- Add
window_rect
- Make
@driver.automation_namesymbol when someone define theautomationNamewith the server argument. #50
- Enhance W3C support
- Timeout related methods
- Refactor
create_sessioninAppium::Core::Base::Bridge - Be able to communicate with Appium by
W3Cbased webdriver protocol if the Appium supports W3C protocol.- If
forceMjsonwp: trueexists in the capability, the client try to communicatemjsonwpbased protocol- By default, it depends on the response from the server
- Read API doc for
Appium::Core::Base::Bridge#create_sessionto read the example offorceMjsonwp
- If
- Backport some commands from OSS module to W3C module
- Read
lib/appium_lib_core/common/base/w3c_bridge.rbfor more details
- Read
- Can get logs like
driver.logs.available_typesanddriver.logs.get
- Fix some w3c methods to work with Appium part 2 #38
- Fix some w3c methods to work with Appium #37
- override default duration to make some action fast #36
- Append
appium:prefix for capabilities automatically due to W3C format. - add take element screenshot for oss module #33
- add w3c touch action tests and some supports for w3c #35
- IME related
- Touch actions based on W3C spec
- Add guidelines in
.github - session/:session_id/appium/device/keyevent #21
- fix creating sessions #31 for W3C creating sessions
Initial release