class FirstDirectLatestDownload::Download

Constants

FIRST_DIRECT_URL

Public Class Methods

new(options) click to toggle source
# File lib/first_direct_latest_download/download.rb, line 7
def initialize(options)
  @options = options
end

Public Instance Methods

fill_out_password_character(driver, field_number) click to toggle source

field_number should be 1, 2 or 3

# File lib/first_direct_latest_download/download.rb, line 53
def fill_out_password_character(driver, field_number)
  label = driver.find_element(id: "hiddenpasswordcharacterposition_#{field_number}-label")

  character_number = label.attribute('innerText').scan(/\d|penultimate/).first

  character = case character_number
    when "penultimate"
      @options[:password][@options[:password].length-2, 1]
    else
      @options[:password][character_number.to_i-1, 1]
    end

  field_id = label.attribute('for')

  driver.find_element(:id, field_id).send_keys(character)
end
run!() click to toggle source
# File lib/first_direct_latest_download/download.rb, line 11
def run!
  driver = Selenium::WebDriver.for :chrome
  driver.navigate.to FIRST_DIRECT_URL

  element = driver.find_element(:name, 'userid')
  element.send_keys @options[:username]
  element.submit

  wait = Selenium::WebDriver::Wait.new(:timeout => 10)
  wait.until { driver.find_element(:partial_link_text =>  'Log on without your Secure Key') }

  driver.find_element(partial_link_text: 'Log on without your Secure Key').click

  driver.find_element(name: 'memorableAnswer').send_keys(@options[:memorable_answer])

  (1..3).each { |n| fill_out_password_character(driver, n) }

  driver.find_element(xpath: "//*[@type='submit']").click

  wait.until { driver.find_element(:link_text =>  @options[:account_name]) }


  driver.find_element(:link_text, @options[:account_name]).click
  driver.find_element(:link_text, 'download').click

  wait.until { driver.find_element(:name =>  'DownloadFormat') }

  file_type = driver.find_element(:name, 'DownloadFormat')
  file_type.find_elements(:tag_name => "option").find do |option|
    option.text == ' Microsoft Excel '
  end.click

  driver.find_element(:link_text, 'download').click

  sleep 10

  driver.find_element(partial_link_text: 'log off').click
  driver.find_element(partial_link_text: 'confirm').click
  driver.quit
end