class MixpanelTesting::SeleniumProvider

Public Class Methods

new(selenium_url, capabilities = :firefox) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 11
def initialize(selenium_url, capabilities = :firefox)
  @selenium_url = selenium_url
  @log = Logger.new(STDOUT)
  @log.info "Selenium initializer"
  if ![:chrome, :firefox].include? capabilities
    @caps = Selenium::WebDriver::Remote::Capabilities.new
    if capabilities['device'].nil?
      @log.info "Creating capabilities, desktop environment"
      # REQUIRED capabilities
      ['os', 'os_version', 'browser',
       'browser_version', 'resolution'].each { |key|
        @caps[key] = capabilities[key]
      }

      # NOT REQUIRED capabilities
      [ 'platform', 'browserName'].each { |key|
        @caps[key.gsub('_','.')] = capabilities[key] unless
          capabilities[key].nil?
      }
    else
      @log.info "Creating capabilities, mobile environment"
      @caps["device"] = capabilities['device']
      @caps[:platform] = capabilities['platform']
      @caps[:browserName] = capabilities['browserName']
    end
    ['build', 'project', 'browserstack_local', 'browserstack_debug',
     'browserstack_localIdentifier' ].each { |key|
        @caps[key.gsub('_','.')] = capabilities[key] unless
          capabilities[key].nil?
    }

  else
    @caps = capabilities
  end

  @driver = nil
  @test_cases = []
  @wait = 2
  @log.info "Ready to connect"
end

Public Instance Methods

click(selector) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 134
def click(selector)
  # Click in the object given by selector. It should be visible in the
  # browser area.
  @log.debug "Clicking at #{selector}"
  link = @driver.find_element(selector)
  @driver.execute_script("arguments[0].scrollIntoView(true);", link)
  link = @driver.find_element(selector)
  link.click
  waitfor()
end
connect!() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 52
def connect!
  @log.info "Connecting to selenium through #{@selenium_url}"
  @log.debug @caps.inspect
  @driver = Selenium::WebDriver.for(
    :remote,
    :url => @selenium_url,
    :desired_capabilities => @caps)
  @log.info('Connected to selenium')
  @driver.manage.timeouts.implicit_wait = Settings.timeout
end
driver() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 109
def driver
  @driver
end
end_session(site_url = nil) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 87
def end_session(site_url = nil)
  puts @site_url
  site_url = site_url.nil? ? @site_url : site_url
  end_url = site_url.include?('?') ? "#{site_url}&" : "#{site_url}?"
  end_url = "#{end_url}mp_session_end=#{@session_id}"
  @driver.get end_url
  waitfor()
end
get_page_source() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 96
def get_page_source
  @driver.page_source
end
navigate(url) click to toggle source
quit() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 100
def quit
  @log.info "Clossing selenium connection BYE!!"
  @driver.quit
end
reset_cookies() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 77
def reset_cookies
  @log.info "Reset cookies!!"
  @driver.deleteAllCookies
end
session_id() click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 105
def session_id
  @session_id
end
start_session(site_url) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 63
def start_session(site_url)
  @session_id = SecureRandom.uuid
  @session_timestamp = Time.now.getutc
  connect! if @driver.nil?
  @site_url = site_url

  @log.info "Start mixpanel session #{@session_id}"

  start_url = site_url.include?('?') ? "#{site_url}&" : "#{site_url}?"
  start_url = "#{start_url}mp_session_start=#{@session_id}"
  @driver.get start_url
  waitfor()
end
waitfor(n=false) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 113
def waitfor(n=false)
  # Use waitfor for correct mixpanel js loading and tracking
  wait = n ? n : @wait
  (1..wait).each {
    print "."
    sleep(1)
  }
  print "\r"
end
waitfor_object_displayed(*selector) click to toggle source
# File lib/mixpaneltesting/selenium.rb, line 123
def waitfor_object_displayed(*selector)
  # Use this method to tell selenium to wait until one element is displayed
  # Arguments:
  #   selector:  is selenium find_element selector
  #            ex: waitfor_object_displayed(:class, 'cookies-eu-ok')
  @log.debug "Waiting for #{selector} to be displayed"
  return if @driver.find_element(*selector).displayed?
  wait = Selenium::WebDriver::Wait.new(:timeout =>  Settings.timeout)
  wait.until { !@driver.find_element(*selector).displayed? }
end