ruby
# Chrome用のドライバを指定
d = Selenium::WebDriver.for :chrome
# 要素を検索(最初に見つかった要素を返す)
e = d.find_element(:id => "hoge")
ドライバ操作
※ d はdriverのインスタンス
※ e はfind_elementで取得した要素
command | explain | example |
---|---|---|
get | 指定したURLにアクセス | d.get "http://google.com" |
current_url | ページのURLを取得 | d.current_url |
titile | ページタイトルを取得 | d.title |
page_source | ページのソースを取得 | d.page_source |
navigate.back | ブラウザバック | d.navigate.back |
navigate.forward | ブラウザフォアード | d.navigate.forward |
navigate.reload | ページリロード | d.navigate.reload |
navigate.to | ページ移動(内部でgetをcall) | d.navigate.to "http://google.com" |
execute_script | javascriptを実行 | d.execute_script("alert()") |
save_screenshot | スクリーンショットを撮影 | d.save_screenshot "path/to/a.png" |
manage.timeouts.implicit_wait | 要素を検索する際のタイムアウト(秒) | d.manage.timeouts.implicit_wait = 5 |
mouse.move_by | マウスポインタを指定座標に移動(hover) | d.mouse.move_to(x,y) |
mouse.move_to | マウスポインタを指定したエレメントへ移動(hover) | d.mouse.move_to(e) |
要素の操作
command | explain | example |
---|---|---|
find_element(:id, "hoge") | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:id, "ID名") |
find_element(:class, 'fuga') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:class, 'クラス名') |
find_element(:css, 'piyo') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:css, 'cssセレクタ') |
find_element(:link, 'hoge') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:link, 'aタグのテキスト') |
find_element(:name, 'fuga') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:name, 'name') |
find_element(:tag_name, 'piyo') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:tag_name, 'tag name') |
find_element(:xpath, 'xpath') | 要素検索(最初にヒットした要素を返す) | e = d.find_element(:xpath, 'xpath') |
find_elements(:class => "hoge") | 要素検索(全ての要素を配列で返す) | e = d.find_elements(:class => "hoge") |
rect.x | 要素のrectを取得(x, y, width, height) | e.rect.x |
tag_name | タグを取得 | e.tag_name |
click | 要素をクリック | e.click |
submit | 要素をサブミット | e.submit |
サクッと要素を取得したい時
ChromeのDeveloperToolを開いて
[要素をクリック]→[右クリック]→[copy]→[Copy Xpath]
ruby
# googleの検索ボタンをクリックするサンプル
d.find_element(:xpath, '//*[@id="fkbx"]').click
大体はこれで事足ります
Waitの設定
動的に生成される要素の操作などに役立つ
ruby
wait = Selenium::WebDriver::Wait.new(:timeout => 5) # seconds
begin
element = wait.until { driver.find_element(:id => "dynamic-element") }
ensure
driver.quit
end