lib/cxeed/proxy.rb in cxeed-0.3.2 vs lib/cxeed/proxy.rb in cxeed-0.3.4
- old
+ new
@@ -3,58 +3,91 @@
module Cxeed
class Proxy
BACKSPACE = "\ue003".freeze
- def initialize(credential)
+ def initialize(credential, verbose: false, save_screenshot: false)
caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions': {args: %i(--headless --disable-gpu window-size=1920,1080)})
@driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
@credential = credential
+ @verbose = verbose
+ @save_screenshot = save_screenshot
end
def login
+ verbose_log 'start login'
+
@driver.navigate.to(@credential.login_url)
+ verbose_log "at #{ @driver.current_url }"
+ save_screenshot
+
# 会社コード入力
@driver.find_element(:name, 'DataSource').send_keys(@credential.company_code)
# 個人コード入力
@driver.find_element(:name, 'LoginID').send_keys(@credential.employee_code)
# パスワード入力
@driver.find_element(:name, 'PassWord').send_keys(@credential.password)
+
+
+ verbose_log "input DataSource: #{ @driver.find_element(:name, 'DataSource').attribute('value')}"
+ verbose_log "input login id: #{ @driver.find_element(:name, 'LoginID').attribute('value')}"
+ verbose_log "input password: #{ @driver.find_element(:name, 'PassWord').attribute('value')}"
+ save_screenshot
+
# ログイン処理
@driver.find_element(:xpath, '//td[@class="loginBtn"]/a').click
+
+ verbose_log "after click login page: #{ @driver.current_url }"
+ save_screenshot
end
def login_test
login
@driver.current_url
end
def navigate_to_input_form
+ verbose_log "start navigate input form: frame2=#{ @driver.find_element(:name, 'FRAME2').attribute('src') }"
+ save_screenshot
+
# frameの指定
@driver.switch_to.frame @driver.find_element(id: 'FRAME1')
# 勤務データ入力遷移
@driver.find_element(:xpath, '//a[@title="勤務データ入力"]').click
# 一旦main documentに戻る
@driver.switch_to.default_content
# frameの指定
@driver.switch_to.frame @driver.find_element(name: 'FRAME2')
+
+ verbose_log "finish navigate input form: #{ @driver.current_url }"
+ save_screenshot
end
# 引数の日付の入力画面に遷移する
def open_date(date)
+ verbose_log "start open date command: #{ @driver.current_url }: #{ @driver.find_element(:class, 'cxCmnTitleStr').text }"
+
# 処理期間の入力
@driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(BACKSPACE * 8)
@driver.find_element(:xpath, '//input[@name="StartYMD"]').send_keys(date.strftime('%Y%m%d'))
@driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(BACKSPACE * 8)
@driver.find_element(:xpath, '//input[@name="EndYMD"]').send_keys(date.strftime('%Y%m%d'))
+
+ verbose_log "input start date: #{ @driver.find_element(:xpath, '//input[@name="StartYMD"]').attribute('value') }"
+ verbose_log "input end date: #{ @driver.find_element(:xpath, '//input[@name="EndYMD"]').attribute('value') }"
+ save_screenshot
+
# 検索
@driver.find_element(:xpath, '//input[@name="srchbutton"]').click
+
+ verbose_log "after click search button: #{ @driver.current_url }"
+ save_screenshot
end
def arrive(time = Time.now.strftime('%H:%M'), date = Time.now)
login
@@ -63,13 +96,17 @@
open_date(date)
# 出勤時間の入力
work_field = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-6"]')
@driver.action.send_keys(work_field, time).perform
+ save_screenshot
# 登録処理
@driver.find_element(:xpath, '//input[@name="regbutton"]').click
+
+ verbose_log "after click register button: #{ @driver.current_url }"
+ save_screenshot
end
def leave(time = Time.now.strftime('%H:%M'), date = Time.now)
login
@@ -78,13 +115,17 @@
open_date(date)
# 退勤時間の入力
work_field = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-9"]')
@driver.action.send_keys(work_field, time).perform
+ save_screenshot
# 登録処理
@driver.find_element(:xpath, '//input[@name="regbutton"]').click
+
+ verbose_log "after click register button: #{ @driver.current_url }"
+ save_screenshot
end
def today
login
@@ -121,7 +162,22 @@
arrive_at = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-6"]/nobr').text
leave_at = @driver.find_element(:xpath, '//td[@id="grdXyw1100G-rc-0-9"]/nobr').text
Cxeed::Attendance.new date, arrive_at, leave_at
end
+
+ private
+
+ def verbose_log(output_string)
+ puts "* #{ output_string }" if @verbose
+ end
+
+ def frame_source(frame_name)
+ @driver.find_element(:name, frame_name).attribute('src')
+ end
+
+ def save_screenshot
+ @driver.save_screenshot("./cxeed_#{ Time.now.strftime('%Y%m%d%H%M%S%L') }.png") if @save_screenshot
+ end
+
end
end