-1
require 'rubygems'
require 'appium_lib'

desired_caps = {
    caps: {
        platformName:  'iOS',
        platformVersion: '11.4',
        deviceName:    'iPhone 7',
        app:           Path,
        automationName: 'XCUITest',
    },
    appium_lib: {
        sauce_username:   nil,
        sauce_access_key: nil,
        wait: 60
    }
}

driver = Appium::Driver.new(desired_caps)
Appium.promote_appium_methods AppiumWorld
driver.start_driver

#login test class

    #find the email textfield
    def email(driver)
        return driver.find_element(:name, "Email")
    end

    #find the password textfield
    def password(driver)
        return driver.find_element(:name, "Password")
    end

    #find the login button
    def loginButton(driver)
        return driver.find_element(:name, "Login")
    end

    #find Forgot Password button
    def forgotPasswordButton(driver)
        return driver.find_element(:name, "Forgot Password?")
    end

    #find Don't have an account button
    def forgotAccountButton(driver)
        return driver.find_element(:name, "Don't have an account?")
    end

$driver.driver_quit

I haven't included the path but it is correct. I have installed all the gems needed, the only dependency for ruby to run appium ruby test is appium_lib which I have installed. I want to just make sure that I have the 2 required textfields for email and password and 3 button that include the login, forgot password, and the don't have an account button. Here is the error that I am getting, I can't seem to find a solution to this error:

Traceback (most recent call last):
    2: from loginScreenTest.rb:2:in `<main>'
    1: from /usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
/usr/local/Cellar/ruby/2.5.1/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- appium_lib (LoadError

)

Sara
  • 103
  • 1
  • 13
  • Ignoring all of your actual code for now, the error you have is purely to do with the installation of `appium_lib`. I just tried installing it myself (`gem install appium_lib`, then created a ruby file which **only** contains the line `require 'appium_lib'`), and it works fine. So something must be wrong with your environment. – Tom Lord Jun 08 '18 at 16:38
  • Perhaps this code is within a project using `bundler`? Do you need to add `gem 'appium_lib'` to the `Gemfile`, and run `bundle install`? Or perhaps you actually installed the gem within a different ruby version on your machine? What happens if you just launch `irb` and enter `require 'appium_lib'`? – Tom Lord Jun 08 '18 at 16:40
  • Thank you @Tom Lord – Sara Jun 08 '18 at 16:44
  • Your comment was super useful – Sara Jun 08 '18 at 17:59

1 Answers1

0

The purpose of this test was to check that all the UI elements were present on the view controller. In order to find those "elements", those elements need to be referenced using either a name, id, or even xpath (this isn't recommended because it creates flaky tests, based on what the Appium simulator says, not my words). The problem in particular with my code was first I needed to have the gem installed, so I ran that code but the code that eventually worked is the following.

require 'rubygems'
require 'appium_lib'

desired_caps = {
    caps: {
        platformName:  'iOS',
        platformVersion: '11.4',
        deviceName:    'iPhone 7',
        app:           PATH,
        automationName: 'XCUITest',
    },
    appium_lib: {
        sauce_username:   nil,
        sauce_access_key: nil,
        wait: 60
    }
}

@driver = Appium::Driver.new(desired_caps,)

@driver.start_driver

#login test class

    #find the email textfield
    def email(driver)
        if driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTextField')
            return driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTextField')
        end
    end

    #find the password textfield
    def password(driver)
        if driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeSecureTextField')
            return driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeSecureTextField')
        end
    end

    #find the login button
    def loginButton(driver)
       if driver.find_element(:name, "Login")
           return driver.find_element(:name, "Login")
        end
    end

    #find Forgot Password button
    def forgotPasswordButton(driver)
        if driver.find_element(:name, "Forgot your password?")
            return driver.find_element(:name, "Forgot your password?")
        end
    end

    #find Don't have an account button
    def forgotAccountButton(driver)
        if driver.find_element(:name, "Don't have an account?")
            return driver.find_element(:name, "Don't have an account?")
        end
    end

    #remember me button
    def rememberMeButton(driver)
        if driver.find_element(:name, "Remember me")
            return driver.find_element(:name, "Remember me")
        end
    end

    #toggle
    def toggle(driver)
        if driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeSwitch')
            return driver.find_element(:xpath, '//XCUIElementTypeApplication[@name="DataSiteOne"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeSwitch')
        end
    end


    email(@driver)
    password(@driver)
    loginButton(@driver)
    forgotPasswordButton(@driver)
    forgotAccountButton(@driver)
    rememberMeButton(@driver)
    toggle(@driver)

@driver.driver_quit
Sara
  • 103
  • 1
  • 13