class MyBitcasa::LoginEngine::Selenium

Attributes

Public Class Methods

available?() click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 81
def available?
  new && true rescue false
end
new() click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 6
def initialize
  require 'selenium-webdriver'
  @use_headless = nil
end

Public Instance Methods

login(user, password) click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 33
def login(user, password)
  if use_headless
    login_with_headless(user, password)
  else
    login_without_headless(user, password)
  end
end
login_with_headless(user, password) click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 41
def login_with_headless(user, password)
  Headless.ly do
    login_without_headless(user, password)
  end
end
login_without_headless(user, password) click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 47
def login_without_headless(user, password)
  profile = ::Selenium::WebDriver::Firefox::Profile.new
  driver = ::Selenium::WebDriver.for :firefox, :profile => profile

  begin
    driver.navigate.to "https://my.bitcasa.com/login"

    input_user_tag = nil
    input_password_tag = nil

    5.times {
      sleep 1
      input_user_tag ||= driver.find_element(:xpath, "//input[@name='user']") || next
      input_password_tag ||= driver.find_element(:xpath, "//input[@name='password']") || next
      break
    }

    input_user_tag.send_keys(user)
    input_password_tag.send_keys(password)
    sleep 1

    input_password_tag.submit()
    sleep 3

    @cookie = driver.manage.all_cookies.map{|cookie|
      "#{cookie[:name]}=#{cookie[:value]}"
    }.join("; ")

  ensure
    driver.quit
  end
end
use_headless() click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 18
def use_headless
  if @use_headless.nil?
    # autodetect
    begin
      require 'headless'
      Headless::CliUtil.ensure_application_exists!('Xvfb', 'Xvfb not found on your system')
      @use_headless = true
    rescue => e
      @use_headless = false
    end
  end

  @use_headless
end
use_headless=(use) click to toggle source
# File lib/my_bitcasa/login_engine/selenium.rb, line 11
def use_headless=(use)
  if use
    require 'headless'
  end
  @use_headless = use
end