sgur
6/26/2015 - 7:34 AM

webapi を使って WebDriver を叩くサンプル

webapi を使って WebDriver を叩くサンプル

" Naviaget webdriver via vimscript
" https://code.google.com/p/selenium/wiki/JsonWireProtocol
scriptencoding utf-8

let s:webdriver_path = expand('chromedriver.exe', 1)

function! s:webdriver_start(port)
  " execute printf('!start %s --port=%d', s:webdriver_path, a:port)
  return vimproc#popen3(printf('%s --port=%d', tr(s:webdriver_path, '\', '/'), a:port))
endfunction

function! s:webdriver_status(port)
  let response = webapi#http#get(printf('http://localhost:%d/status', a:port))
  echo 'STATUS:' eval(response.content)
endfunction

function! s:webdriver_create_session(port)
  let response = webapi#http#post(printf('http://localhost:%d/session', a:port)
        \ , webapi#json#encode({'desiredCapabilities': {}}))
  let result = webapi#json#decode(response.content)
  if result.status == 0
    return result.sessionId
  else
    return ''
  endif
endfunction

function! s:webdriver_sessions(port)
  let response = webapi#http#get(printf('http://localhost:%d/sessions', a:port))
  if empty(response.content)
    return []
  endif
  return map(webapi#json#decode(response.content).value, 'v:val.sessionId')
endfunction

function! s:webdriver_show_url(port, sessionId, url)
  let response = webapi#http#post(
        \   printf('http://localhost:%d/session/%s/url', a:port, a:sessionId)
        \ , webapi#json#encode({'url': a:url}))
  echo 'URL:' webapi#json#decode(response.content)
endfunction

function! s:webdriver_delete(port, sessionId)
  let response = webapi#http#post(
        \   printf('http://localhost:%d/session/%s', a:port, a:sessionId)
        \ , {}, {}, 'DELETE')
  echo 'DELETE:' webapi#json#decode(response.content)
endfunction

let s:proc = s:webdriver_start(9513)
try
  let s:sessionId = s:webdriver_create_session(9513)

  call s:webdriver_show_url(9513, s:sessionId, 'https://news.google.com/')

  " call s:webdriver_status(9515)
finally
  for s:id in s:webdriver_sessions(9513)
    call s:webdriver_delete(9513, s:id)
  endfor
  unlet s:id
  echo 'finalize'
  call s:proc.kill(9)
endtry