All notable changes to this project will be documented in this file.
Read release_notes.md
for commit level details.
- Remove deprecated
Appium::Core#quit_driver
. Please useAppium::Core::Driver.quit
instead.
- Fix to return symbols for
Core#device
andCore#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_url
usage incore.start_driver
to 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_keys
to 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_app
andreset
- 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_value
andreplace_value
end_coverage
sessions
andsession_capabilities
since they are not W3C WebDriver spec and already removed from the dependent selenium clients.- To get events info, please use
driver.logs.events
instead
- 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-webdriver
max
- Removed deprecated
core#platform_version
andcore#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-webdriver
max
- Add deprecation marks that will be removed from Appium or this library to move to extension commands such as
mobile:
- Append
selenium-webdriver
4.12
support
- Add deprecation marks in
immediate_value
andreplace_value
- Append
selenium-webdriver
4.11
support
- Drop Ruby 2.7 support
- Append
selenium-webdriver
4.10
support
- Simplify internal http client implementation a bit
- Fixed
driver.execute_cdp
command error in a chrome session
- Append
selenium-webdriver
4.9
support
- Support custom listener
- e.g. A listener named
CustomListener
which inherits::Selenium::WebDriver::Support::AbstractEventListener
can set asappium_lib: { listener: CustomListener.new}
capability
- e.g. A listener named
- Add
uia_device_orientation_landscaperight
anduia_device_orientation_portrait_upsidedown
symbols in thedrivede.rotation=
- Add
drivede.orientation=
as a syntax sugar ofdrivede.rotation=
- Append
selenium-webdriver
4.8
support - Add
::Appium::Location
since::Selenium::WebDriver::Location
no longer exists
::Selenium::WebDriver::Location
is deprecated in favor of::Appium::Location
in Appium Ruby binding
Element#immediate_value
sendstext
as 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_to
to 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-webdriver
4.6
support
- Fix wrong deprecation message
- Keep converting String to Symbol for
capabilities
,caps
andappium_lib
for the backward compatibility - Wrong
automationName
andplatformName
detection in this library before starting a session
- Converting
capabilities
,caps
andappium_lib
from 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-webdriver
4.5
support
- 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_action
or set[::Selenium::WebDriver::Interactions.key('keyboard')]
as the deviecs parameter to builddriver.send_keys().perform
W3C action.driver.key_action.send_keys('xxx').perform
instead 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
touch
for the pointer in W3C actions instead ofmouse
for Appium- This change should not affect W3C actions
- Can add more arguments in
install_app
- e.g. Add
timeoutMs
for XCUITest driver as@driver.install_app("/path/to/test.ipa", timeoutMs: 20000)
- e.g. Add
- (internal) Allow to access to
bridge
attribute indriver
instance 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_true
syntaxes- Can give
driver
instance as its block variable
- Can give
element.id
returns the element id instead ofelement.ref
.element.ref
now returns an array.
- Removed
desired_capabilities
as capabilities forAppium::Core#for
. Please usecapabilities
key 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_screenshot
instead - Removed
driver#send_keys
to send keys to an active element. Please usedriver.action.send_keys('happy testing').perform
instead - Removed
forceMjsonwp
to send only MJSONWP capabilities since Selenium cleint v4 no longer supports MJSONWP
- Removed
- No longer set default
timeouts
as0
- ruby_lib_core calls
/timeouts
endpoint only whenappium_lib: { wait: 5 }
is provided explicitly
- ruby_lib_core calls
- Raises
::Appium::Core::Error::ArgumentError
instead ofArgumentError
for this library specific argument errors - Removed Selendroid related methods
Appium::Core::TouchAction
andAppium::Core::MultiTouch
are 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_app
andreset
. Please read issues#15807 for more details.activate_app
or a new session request can be alternatives oflaunch_app
terminate_app
or close the session request can be alternatives ofclose_app
- Close current session and creating a new session, or
terminate_app
andlaunch_app
can be alternatives ofreset
- Allow to override an existing method by
Appium::Core::Base::Driver#add_command
since Appium drivers/plugins allow to override them
- Add
satellites
option inAppium::Core::Base::Driver#set_location
- Add
Appium::Core::Base::Driver#add_command
to allow you to add your own command
- Add
speed
argument forAppium::Core::Base::Driver#set_location
since Appium 1.21.0 - Add
multiple
andmatch_neighbour_threshold
arguments forAppium::Core::Base::Driver#find_image_occurrence
- Returns
{}
any errors inCore#appium_server_version
to prevent errors in some cases
- Add
start_recording_screen
for Mac2 driver
- Refactor routable
- Add
Element#screenshot
,Element#screenshot_as
andElement#save_screenshot
in Element moduleElement#screenshot_as
andElement#save_screenshot
are same asDriver#element_screenshot_as
andDriver#save_element_screenshot
Element#screenshot
is 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
forceMjsonwp
capability to force the session MJSONWP
- Fix
install_app
to 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_screen
file_field_name
,form_fields
andheaders
are available since Appium 1.18.0
- Fix
x-idempotency-key
header to add it only in new session request (#262)
- Add
x-idempotency-key
header support (appium/appium-base-driver#400)- Can disable the header with
enable_idempotency_header: false
inappium_lib
capability. 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
:viewmatcher
selector like@driver.find_elements :view_matcher, { name: 'withText', args: %w(Accessibility), class: 'androidx.test.espresso.matcher.ViewMatchers' }
- Add
attr_reader :bridge
for flutter driver not to usesend
- Fix Ruby 2.7 warnings
- Add
Logs#event
to post a custom log by@driver.logs.event vendor: 'appium', event: 'funEvent'
- Add
Logs#events
to get events by@driver.logs.events
. It is equal to@driver.session_capabilities['events']
- Add
system_bars
as an alias toget_system_bars
- Fixed parameters of
remove_app
- Add
video_filters
argument forstart_recording_screen
iOS- 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_driver
to run a batch script- It requires Appium version which has
execute_driver
support
- It requires Appium version which has
- Add arguments for
start_activity
intentAction
,intentCategory
,intentFlags
,dontStopAppOnReset
- Add
sessions
command to get all available sessions on the Appium server - [internal] Tweak error messages in emulator module
- [internal] Catch
Selenium::WebDriver::Error::TimeoutError
which will be used instead ofSelenium::WebDriver::Error::TimeOutError
tvOS
platform supportplatformName: :tvos, automationName: :xcuitest
can work for iOS tvOS- It requires Appium 1.13
- Add
pixelFormat
argument in screen record for iOS
- [internal] Bump Rubocop target Ruby version to Ruby 2.3
- Append more examples for use case in
test/functional
as functional test cases
- [internal] Fixed typo in
Emulator#gsm_signal
#196- Thanks khanhdodang
- Add
:data_matcher
find_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: 20
asappium_lib
capability to keep the behaviour
- Can configure
- Set implicit wait zero by default #186
- [Experimental] Add
direct_connect
capability for the Ruby client in order to handledirectConnect
capability in a create session response by Appium server #189- Update http client following
directConnectProtocol
,directConnectHost
,directConnectPort
anddirectConnectPath
ifdirect_connect
capability 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#press
appium/WebDriverAgent#79:pressure
option
- Stop sending blank value in
start_activity
- Add
*args, &block
in method missing inSelenium::WebDriver::Element
#184
- Add alias for some method calls
ServerError
inheritsCoreError
in order to handle it as an exception
set_network_connection
accepts keys as same asnetwork_connection_type
in addition to numbers{ :airplane_mode: 1, wifi: 2, data: 4, all: 6, none: 0 }
- Read documentation more
- Use
Base64.strict_encode64
when this client sendsBase64
encoded 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
decode64
to accept RFC 2045 format
- Add
query_app_state
as an alias ofapp_state
to get application status
- Append
appium
in header:appium/ruby_lib_core/2.2.1 (selenium/3.141.0 (ruby macosx))
- Reduce warnings for method definitions
- Add
::Appium::Core::Base.platform
to call::Selenium::WebDriver::Platform
- Can identify platform using
::Appium::Core::Base.platform.windows?
for example
- Can identify platform using
:offset_x
and:offset_y
inTouchAction#swipe
is deprecated in favor of:end_x
and: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_screen
for iOS, Appium 1.10.0- Add
:video_scale
and 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_fps
param 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: :tapOutside
as 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_shown
andset_contex
- Add
Appium::Core::Base::Driver#perform_actions
to send multiple actions. Seetest_multiple_actions
as 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
autoload
to load Android/iOS modules
@core = Appium::Core.for(self, opts)
is deprecated in favor of@core = Appium::Core.for(opts)
- Call
extend Appium::Core::Device
if you'd like to extend methods defined inAppium::Core
- Read #816 as an example
- Call
- fix unexpected method missing against
:to_hash
in Element
- Add
:viewtag
for Espresso driver appium-espresso-driver#189 - Add missing
take_viewport_screenshot
for mjsonwp #127
- [internal] Fix raising error in
set_implicit_wait_by_default
#130
- Update documentation about
start_recording_screen
- Port
send_keys/type
for active element #122 - Support
find_element/s :image, partial_image
#119 - Requires
selenium-webdriver 3.14+
because of W3C actions #115
- [Internal] Deprecate experimental
ImageElement
in favor ofElement
- silence warning for pointeractions #113
- Use method missing to get attributes like
e.resource_id
instead ofe.attribute 'resource-id'
#116 - Set
'~> 3.5', '< 3.14'
- Relax the logic of
:app
capability
- Fix
within_context
- Available packages over HTTP #106
- Remove warning of camelCase capability for W3C format
- Fix including search context in
::Selenium::WebDriver::Elemenet
include ::Appium::Core::Base::SearchContext
instead of::Selenium::WebDriver::SearchContext
- Add Tizen case
- [Internal] reduce method definition by
add_endpoint_method
- Add
find_element_by_image
andfind_elements_by_image
to handleImageElement
- Read here for more details
- Add a
ImageElement
to handle images as elements bymatchTemplate
- Experimental feature
- [Internal] Define screenshot methods in appium_lib_core instead of Selenium's one
- Add a
format
argument fordevice_time
#94
- Return empty array
[]
for find_elements
- Has one Breaking Change
- Add
flags
inpress_keycode
andlong_press_keycode
- New:
@driver.press_keycode 66, metastate: [1], flags: [0x20, 0x2000]
metastate
should set as a keyword argumentlong_press_keycode
as 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, 4
orNOT_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_info
to get battery information - add
is_keyboard_shown
for 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_driver
forruby_lib
compatibility
- 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::TimeoutError
instead 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_core
internal process- Remove
touch
action by default and followingselenium-webdriver
in 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
kind
in W3C touch action.
- Add a
bug_report
option instart_recording_screen
, Android - Add clipboard apis #69
- Add
save_viewport_screenshot
which get screenshot except for status bar. - [iOS] Add
start_performance_record
andget_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_to
andswipe
- 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_screen
support 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_name
downcase #50
- Add
window_rect
- Make
@driver.automation_name
symbol when someone define theautomationName
with the server argument. #50
- Enhance W3C support
- Timeout related methods
- Refactor
create_session
inAppium::Core::Base::Bridge
- Be able to communicate with Appium by
W3C
based webdriver protocol if the Appium supports W3C protocol.- If
forceMjsonwp: true
exists in the capability, the client try to communicatemjsonwp
based protocol- By default, it depends on the response from the server
- Read API doc for
Appium::Core::Base::Bridge#create_session
to read the example offorceMjsonwp
- If
- Backport some commands from OSS module to W3C module
- Read
lib/appium_lib_core/common/base/w3c_bridge.rb
for more details
- Read
- Can get logs like
driver.logs.available_types
anddriver.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