ruby ããSelenium ãã±ã±ã£ã¨ä½¿ã
ã¤ããããã¯ãã¨ã£ã¦ãç°¡åã
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.close()
è¦ç´ 辿ãç³»ã¯ã¡ãã£ã¨ã³ãã³ãã¿ã¤ãéãããããªãæé ãå¤ãã®ã§ãRubyãªã watir ã使ãã»ãã楽ãããããªããã
çµäºããã«ã¯
driver.quit()
Chromeã¯quit()ãå¿ è¦ã ã£ããFirefoxã¯close()ã§çµäºãããOSXã ãï¼
ãããã¡ã¤ã«ãæå®ããã«ã¯
Capabilities ã使ããã¨ã§å®ç¾ããã
Chromeã®èµ·åãªãã·ã§ã³ãæ¸ãã¦ããã
require 'selenium-webdriver' caps = Selenium::WebDriver::Remote::Capabilities.chrome( "chromeOptions" => { "args" => ["--user-data-dir=/path/to/Google/Chrome/profile"] }) driver = Selenium::WebDriver.for :chrome , :desired_capabilities => caps
ç¹å®ã®ãµã¤ãã表示ãã
driver.navigate.to "http://www.yahoo.co.jp/"
ãã¼ã¸ã®ãã¼ãå¾ ã¡æéãè¨å®ãã
driver.manage.timeouts.implicit_wait = 10 # seconds
ããããreadyState ãè¦ã¦ãã¨æãã
javascript ã®å®è¡
driver.execute_script("alert()")
ã¹ã¯ãªã¼ã³ã·ã§ãããä¿åãã
driver.navigate.to "http://www.yahoo.co.jp/" driver.save_screenshot "path/to/out.png"
è¦ç´ ãæ¢ãï¼æåã«è¦ã¤ãã£ãè¦ç´ ãè¿ã)
driver.find_element(:id => "name-of-id")
è¦ç´ ãæ¢ãï¼è¦ã¤ãã£ãè¦ç´ ããã¹ã¦è¿ãï¼
driver.find_elements(:id => "name-of-id")
åæ°å½¢ element 㨠è¤æ°å½¢ elements ã§åºå¥ãã
ç¹å®ã®è¦ç´ ãåºã¦ããã¾ã§å¾ æ©ããã
wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds begin element = wait.until { driver.find_element(:id => "name-of-id") } ensure driver.quit end
ãã®æ¹æ³ã¯ãè¦ç´ ãDOMã«ãããå¤æããã®ã§ãdisplay:none ã height:0pxã visibility:hidden ã¯å¾ æ©ã§ããªãã
æ¤ç´¢ï¼ã¯ã¨ãªï¼ã®è¨èªãæå®ããã
driver.find_element(:css => "#name-of-id") driver.find_element(:xpath => "id(name-of-id)") driver.find_element(:xpath => "/path/to/node[ conditions ]") driver.find_element(:tag_name => "form") # css/xpath ã¢ã¬ã°ä½¿ããã¨ãªããã driver.find_element(:class => "enabled") # css/xpath ã¢ã¬ã°ä½¿ããã¨ãªããã
åæ°å½¢ element 㨠è¤æ°å½¢ elements ã§åºå¥ããã®ã§æ³¨æ
å±æ§ãåå¾ããã«ã¯
element.attribute("href")
a.href
ãªã©ã¯ä¸å¯ãããã©ããããã ãã
ãã©ã¦ã¶ãæä½ãããï¼ï¼è¦ç´ ãæä½ããï¼
element = driver.find_element(:xpath => "id(name-of-id)") element.click()
ãã©ã¦ã¶ãæä½ãã(æ»ãã»é²ãï¼
driver.navigate.back driver.navigate.forward
ãã®è¾ºã¯ãJSå®è¡ã§ããããã
ãã©ã¼ã ãæä½ãã
ãã©ã¼ã ãæä½ããã
element.send_keys("takuya");
ã¤ãã³ãéä¿¡ã§æä½ãããã¨ã«ãªããè¦ç´ ãç´æ¥ãããããã§ã¯ãªããã
JSã§ç´æ¥è¦ç´ ã触ãã¨æãããé¢åããããµã¤ããããã®ã§send_key 使ã£ãã»ããç¡é£ãã
å¤ã®ã¯ãªã¢
element.clear
select ããã¯ã¹ã®æä½
options = driver.find_elements(:css => "select[name=age] option") options.each{| option | option.click if option.attribute("value") == "10" #åã«æ³¨æ }
window.alert() ãªã©ã®ãã©ã¦ã¶ã»ãã¤ã¢ãã°ãå¦çããã
driver.switch_to.alert.accept
prompt ã®å¦ç
OSXã®å ´åãå ¥åæåãç»é¢ã«åæ ãããªããã確ãã«å ¥åæåãéä¿¡ããã¦ããã
driver.execute_script("alert(prompt('enter your name'))") a = driver.switch_to.alert a.send_keys "aaa" a.text #=> enter your name ã¨ããã³ããã®æåãåºã¦ãã a.accept ##ok a.dissmiss ##ng
ãªããBASICèªè¨¼ã«ã¯é対å¿ãªã®ã ããã ãï¼è©¦ãã®é¢åã ãã試ãã¦ãªã)
ãããã¢ãããªã©è¤æ°ã¦ã¤ã³ãã¦ãæä½ããã
window_handlesã§åå¾ãããã®å¾ãswitch_to ã§åãæ¿ããã
>> driver.window_handle => "CDwindow-90E486B1-FD10-4251-90B2-75A66C524182" >> driver.window_handles => ["CDwindow-90E486B1-FD10-4251-90B2-75A66C524182"....] >> driver.switch_to driver.window_halders[2]
DragDropã«ã¤ãã¦
element = driver.find_element(:name => 'source') target = driver.find_element(:name => 'target') driver.action.drag_and_drop(element, target).perform
è¦ç´ ãDragDropåºæ¥ãããããã©ããããJSã§ãã¦ã¹ã¤ãã³ããéã£ãã»ããç´°ãå¶å¾¡åºæ¥ãæ°ãããªãããªãããJSããã©ãããããªã®ã§ãåºçªãããã ããã
java/C# ã ruby ã¨ã®ã¡ã½ããèªã¿æ¿ãè¦å
Seleniumã®ã¡ã½ããåã¯ãåè¨èªã§å ±éã
ãã ãrubyã§ã¯ãruby ã®ã¡ã½ããåã®å½åè¦åãåªå ãããã
ruby
a.text
java
a.getText()
ãã®ä»ã®ä¾
ruby
a.send_key
java
a.sendKey
ç¥ã£ã¦ããã¨ãã°ã°ã£ãæã«ä¾¿å©ã
åå空éã¨ãã
Stackoverflowã§è¦ã¦ãéãã§ã¯ãjava ç³»ã¯import ããã®ã§çç¥ããã¡ãããã¨ãå¤ãã¿ãã
Selenium::WebDriver::Remote::Capabilities.chrome #ruby Capabilities.chrome # java
ãã®ããã«åå空éãã¤ããã¤ããªãã¯ãã®å®è¡ã¹ã³ã¼ãã®åå空éã«ãããã
é¢é£è³æ
HTMLフォームにキーボードイベントでキー値を突っ込む(出来ないから代替案 - それマグで!