Skip to content

refine Appium ruby binding #602

@KazuCocoa

Description

@KazuCocoa

Just proposal.

Current Appium ruby binding have many monkey patches for Selenium webdriver.
So, the library is affected by selenium-webdriver's changes such as Update selenium-webdriver related methods #558 .

To reduce the impact and enhance maintainability, I'd like to refine the implementations.


  1. refactor/rewrite the library such as selenium's other drivers
  2. ...?


for various drivers

  • default(iOS or Android) inherit selenium
    • bridge for Android, override default driver for some Android specific methods
      • uiautomator1
      • uiautomator2
      • espresso
      • ...
    • bridge for iOS, override default driver for some iOS specific methods
      • UIAutomation
      • XCUITest
      • EarlGrey, etc...

  • example
    class Driver
      include SearchContext

      class << self
        def for(os, driver, opts = {})
          listener = opts.delete(:listener)

          bridge = case os
            when :android
               case driver
               when :uiautomator2
                 Android::UIAutomator2::Bridge.new(opts)
               when :espresso
                 Android::Espresso::Bridge.new(opts)
               else # default for android
                 Android::UIAutomato1::Bridge.new(opts)
            when :ios
               case driver
               when :xcuitest
                 IOS::XCUITest::Bridge.new(opts)
               when :earlgrey
                 IOS::EarlGrey::Bridge.new(opts)
               else # default for ios
                 IOS::UIAutomation::Bridge.new(opts)
            else
              # Default::Bridge < :: Selenium::WebDriver::Driver::Remote::Bridge
              Default::Bridge.new(ops) # default. Each driver inherit this default bridge
          end

          bridge = Support::EventFiringBridge.new(bridge, listener) if listener

          new(bridge)
        end
      end

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions