Selenium實戰教程系列(三)--- Selenium中的動做

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_bydown_by是移動的控制參數,顧名思義表示向右和向下的偏移。app

移動光標

Selenium中提供了兩個移動鼠標光標的方法:測試

  1. 以當前光標位置爲基準移動
driver.action.move_by(100, 100).perform

move_by(right_by, down_by) 方法的兩個參數也是分別控制移動的偏移量。ui

  1. 以某個元素爲基準移動
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上的瀏覽器配置爲例介紹:

Chrome

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

Firefox

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

這樣文件就會自動下載到指定的路徑下。

相關文章
相關標籤/搜索