appium / ruby_lib_core

Core library for the Ruby client
Apache License 2.0
32 stars 23 forks source link

AppiumLibCore

Gem Version

Build Status

This library is a Ruby client for Appium. The gem is available via appium_lib_core.

This library wraps selenium-webdriver and adapts WebDriver APIs for Appium. ruby_lib calls all of Appium/Selenium related APIs via this core library. It works instance based driver.

Documentation

Migration from v4 to v5

Please read [5.0.0] section in CHANGELOG

Related library

How to start

Run tests

Unit Tests

Run unit tests which check each method and command, URL, using the webmock.

$ bundle install
$ bundle exec parallel_test test/unit/

or

$ bundle install
$ bundle exec rake test:unit

Functional Tests

Run functional tests which require the Appium server and real device, Simulator/Emulator.

Real device for iOS

# Create derivedDataPath in "/tmp/#{org_id}" and reuse xctestrun in the directory
$ REAL=true BUNDLE_ID='target-bundleid' WDA_BUNDLEID="ios.appium.WebDriverAgentRunner" ORG_ID=XXXXXXX rake test:func:ios

# Run with xcconfig file. The template is in 'test/functional/ios/temp.xcconfig'
# The PROVISIONING_PROFILE is in '~/Library/MobileDevice/Provisioning\ Profiles/'
$ REAL=true XCODE_CONFIG_FILE='/path/to/xcconfig' ORG_ID=XXXXXXX rake test:func:ios

Run parallel tests with parallel_tests gem

Android

# Generate 3 emulators. Running 3 emulators require much machine power.
# It requires an image which is for Google Play and x86 CPU architecture's image.
$ bundle exec rake android:gen_device
$ PARALLEL=1 bundle exec parallel_test test/functional/android -n 3
iOS
$ PARALLEL=1 bundle exec parallel_test test/functional/ios -n 2

CI

$ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android

Run a test case

  1. Launch the Appium server locally.
  2. Run the following script.

Appium::Core.for documentation has more example to build a new driver instance.

More examples are in test/functional

As of version 5.8.0, the client can attach to an existing session. The main purpose is for debugging.

# @driver is the driver instance of an existing session
attached_driver = ::Appium::Core::Driver.attach_to @driver.session_id, url: 'http://127.0.0.1:4723/wd/hub', automation_name: 'XCUITest', platform_name: 'ios'
assert attached_driver.session_id == @driver.session_id
attached_driver.page_source

Capabilities

Read Appium/Core/Driver to catch up with available capabilities. Capabilities affect only ruby_lib is Appium/Core/Options.

Gives custom listener

An example to define a customer listener with Selenium::WebDriver::Support::AbstractEventListener

class CustomListener < ::Selenium::WebDriver::Support::AbstractEventListener
  // something
end
capabilities: {
  platformName: :ios,
  platformVersion: '11.0',
  deviceName: 'iPhone Simulator',
  automationName: 'XCUITest',
  app: '/path/to/MyiOS.app'
},
appium_lib: {
  listener: CustomListener.new
}
@core = Appium::Core.for capabilities: capabilities, appium_lib: appium_lib
@core.start_driver

Development

Release

Use appium_thor to release this gem.

$ thor bump # bumpy,
$ thor release

Contribution

  1. Fork it ( https://github.com/appium/ruby_lib_core/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

Apache License v2