それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

watir をぱぱっと使うための、使い方まとめ。


MechanizeWatir

Watir

Q:Watir骨董品じゃん?Capybara-webkitで良いんじゃない?


A1: Capybara 

A2: Capybara 

A3: Selenium  wait_until_present? 便

A4: PhantomJS PDF


使rSelenium

OSXCapybaraWatir使

gem install watir watir-webdriver

WindowsWin32OLE

require "watir"
require "watir-webdriver"
profile = Selenium::WebDriver::Firefox::Profile.new
browser = Watir::Browser.new :firefox, :profile => profile
browser.goto "https://id.auone.jp/"

Headless(xvfb)


X Virtual Framebuffer X11 ( DISPLAY:99 )  xvfb  X11  vfb vfb  virtual frame buffer
require 'headless'
require "watir"
require "watir-webdriver"
Headless.new
headless.start
profile = Selenium::WebDriver::Firefox::Profile.new
b = Watir::Browser.new :firefox, :profile => profile
headless.destroy



Windows/mac OS X xvfb-run 使Xvfbx11

IEWin32 OLE使 IEOSXSafari

調

b.driver.capabilities

exec_script window.navigator.userAgentUA

watir XPATH

browser.element( xpath: "//a[contains(.,'ポイント利用状況')]" ).click

watir CSS

browser.element( css: "input[type='password']" )

watir JS

browser.execute_script("document.querySelector('div#side').remove()")

watir HTML

browser.html

watir HTML

browser.(css:"#sample").html

watir 

browser.a(:css => "div.foo").html
browser.a(:css => "div.foo").href
browser.a(:css => "div.foo").text

CSS

browser.h1( css: ".header" )
browser.a(:css => "div.foo")

Xpath

browser.h1( xpath: "./a[contains...]" )

browser.a( html: /login/ )
browser.a( text: /ログイン/ )

JS

browser.execute_script("document.querySelector('a#side').click()")

browser.element( css: "input[type='password']" ).set "mypassword"

Watir#set 



JS使
browser.execute_script(
"document.querySelector('input[type=password]').value='%s'" % password
 )

reload

browser.refresh

js


js
browser.a( href: /dpoint/).target="" # 出来ない

Javascript
  ret = document.evaluate("(//a[contains(@href,'dpoint')])[1]",document,null,XPathResult.ANY_TYPE,null);
  a = ret.iterateNext();
  a.target=''


Ajax 


JS browser.wait


browser.div(css:"#active_content").wait_until_present


browser.div(css:"#deActive_content").wait_while_present



exec_scriptjs


removeDOMJS
browser.execute_script("document.querySelector('#{selector}').remove();")


DOM調
if my.browser.img(alt:/未認証/).present? then
 do_something
end

3


exits?使
Element .exists? .present? .visible?
Displayed (browser.div(:id => 1)) true true true
Not Displayed (browser.div(:id => 2)) true false false
Non-Existent (browser.div(:id => 3)) false false exception

wait / wait{while,until}present 



wait document.readyState == 'complete' or timeout 5 sec 

wait{while,until}presentElements


wait wait{while,until}present 使



browser.windows[n].use  

browser.activate

watir 


rake irb 使
takuya@~:$ rake irb
>> init
>> browser 
>> browser.goto "http://au.kddi.com"
Rakefile
task :pry do
  require 'pry'
  $LOAD_PATH  << "./lib"
  def init; 
     # 初期化処理
     require 'headless'
     require "watir"
     require "watir-webdriver"
     # よく使う関数とか
  end
  binding.pry
end
irb 
task :irb do
  ARGV.clear
  IRB.conf[:SAVE_HISTORY] = 100000
  IRB.conf[:PROMPT_MODE] = :SIMPLE
  IRB.conf[:AUTO_INDENT] = true
  IRB.start
end

Document


watir-webdriver


Selenium Driver使Selenium

https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings


http://stackoverflow.com/questions/9296353/running-javascript-in-watir-webdriver

http://stackoverflow.com/questions/9302737/ruby-watir-to-get-html-of-a-page

http://stackoverflow.com/questions/9006223/watirexceptionmissingwayoffindingobjectexception-invalid-attribute-css

http://stackoverflow.com/questions/12531705/how-to-get-element-with-css-in-pageobject

http://grokbase.com/t/gg/watir-general/144adwpzh3/wtr-general-need-info-about-how-to-get-browser-version-in-watir-classic-and-about-ie8-and-ie9-support

https://jkotests.wordpress.com/2012/11/02/checking-for-an-element-exists-visible-present/