Selenium中針對元素進行的動做在代碼中能夠分爲兩類:chrome
Selenium::WebDriver::ActionBuilder
類中的動做方法Selenium::WebDriver::Element
類中的動做方法其中ActionBuilder
類中的動做方法比較豐富,基本涵蓋了全部能夠進行的操做。
而Element
類的動做比較少,基本上只有點擊和輸入等簡單的操做。windows
driver.find_element(:link_text, 'Link1').click
el = driver.find_element(id: "some_id") driver.action.double_click(el).perform
el = driver.find_element(id: "some_id") driver.action.context_click(el).perform
把元素el1
拖到元素el2
上面瀏覽器
el1 = driver.find_element(id: "some_id1") el2 = driver.find_element(id: "some_id2") driver.action.drag_and_drop(el1, el2).perform
還能夠按照指定的與某個元素的相對位置來拖放ruby
el = driver.find_element(id: "some_id1") driver.action.drag_and_drop_by(el, 100, 100).perform
#drag_and_drop_by(source, right_by, down_by)
方法有三個參數,source
是操做的對象元素,right_by
和down_by
是移動的控制參數,顧名思義表示向右和向下的偏移。app
Selenium中提供了兩個移動鼠標光標的方法:測試
driver.action.move_by(100, 100).perform
move_by(right_by, down_by)
方法的兩個參數也是分別控制移動的偏移量。ui
el = driver.find_element(id: "some_id") driver.action.move_to(el).perform #移動到元素el上 driver.action.move_to(el, 100, 100).perform #移動到元素el的右下方(100,100)的位置
鍵盤上進行的最經常使用的操做就是輸入了。
Selenium中經過send_keys
方法來實現spa
el = driver.find_element(id: "some_id") #在元素el中輸入help driver.action.send_keys(el, "help").perform
有時候須要模擬按住鍵盤上的各類修飾鍵的操做,例如按照ctrl鍵和shift鍵的動做。firefox
#按住CTRL鍵 driver.action.key_down(:control).perform #釋放CTRL鍵 driver.action.key_up(:shift).perform #在元素el上按住和釋放SHIFT鍵 el = driver.find_element(id: "some_id") driver.action.key_down(el, :shift).perform driver.action.key_up(el, :shift).perform
Selenium中定義了鍵盤上全部按鍵,能夠在Selenium::WebDriver::Keys
中查找對應的名稱。code
在頁面操做中有時候須要清空一個輸入框中已有的內容,這時候須要用到clear
方法。
el = driver.find_element(id: "some_id") el.clear
須要注意的是,這個操做僅限於在INPUT和TEXTAREA元素上操做,同時也可能沒法達到指望的結果,這個時候能夠利用鍵盤的操做CRTL+A(全選)以後再DELETE。
el = driver.find_element(id: "some_id") el.send_keys([:control, 'a'],:backspace)
在頁面操做中時常要處理彈窗,Selenium中也提供了處理的方法。
alert = driver.switch_to.alert alert.accept()
在運行自動化測試的過程當中,有可能會出現打開了多個窗口的狀況,這個時候須要在不一樣的窗口間切換。
driver = Selenium::WebDriver.for :chrome driver.get 'http://test.com/windows' driver.find_element(:id, 'new_window').click #獲取當前全部window對象 windows_array = driver.window_handles #切換到第一個window driver.switch_to.window(windows_array.first)
上傳文件是一個比較獨特的用戶與瀏覽器進行交互的場景,和以前的鼠標鍵盤操做有很大的不一樣。
在Selenium中,主要是經過send_keys
方法向上傳文件的入口元素輸入文件路徑來實現的。這個操做有一個限制就是這個元素的類型必須是input。
driver = Selenium::WebDriver.for :chrome filename = 'test.txt' file_path = File.join(Dir.pwd, filename) driver.get 'http://test.com/upload' driver.find_element(:tagname, 'input').send_keys file_path
下載文件其實並非由某種動做來實現的,由於界面上觸發下載的通常是一個按鈕,點擊以後觸發下載。須要腳本開發者配置的是瀏覽器對於下載行爲的處理,通常是設置一個默認的下載路徑,同時設置自動下載不彈窗讓用戶確認。
下面就以Chrome和firefox上的瀏覽器配置爲例介紹:
DOWNLOAD_PATH = "path to store files" prefs = {:download => {:prompt_for_download => false, :default_directory => DOWNLOAD_PATH }, } prefs['profile.default_content_settings.multiple-automatic-downloads'] = 1 driver = Selenium::WebDriver.for :chrome, :prefs => prefs
profile = Selenium::WebDriver::Firefox::Profile.new profile['browser.download.dir'] = DOWNLOAD_PATH profile['browser.download.folderList'] = 2 profile['browser.helperApps.neverAsk.saveToDisk'] = 'images/jpeg, application/pdf, application/octet-stream' profile['pdfjs.disabled'] = true driver = Selenium::WebDriver.for :firefox, profile: profile
這樣文件就會自動下載到指定的路徑下。