一、什麼是Selenium ?
Selenium 是一個瀏覽器自動化測試框架,它主要用於web應用程式的自動化測試,其主要特點如下:開源、免費;多平臺、瀏覽器、多語言支援;對web頁面有良好的支援;API簡單靈活易於使用;支援分散式測試用例執行。 Selenium經歷了兩個版本,Selenium1.0和2.0,Selenium1.0主要由以下幾部分構成:
-
Selenium IDE:是一個嵌入到Firefox中的外掛,可以實現瀏覽器的錄製於回放功能。
-
Selenium Grid:自動化測試輔助工具,可以很方便地同時在多臺機器上並行執行多個測試事例。
-
Selenium RC:是Selenium的核心工具,支援多種不同的語言編寫的測試指令碼,通過Selenium RC的伺服器作為代理伺服器去訪問應用從而達到測試的目的。主要分為以下兩部分:
- Client:用來編寫測試指令碼來控制Selenium server的庫。
- Server:負責控制瀏覽器的行為,包含三部分:Launcher;HttpProxy;Core。
明白了Selenium1.0的家族關係,Selenium2.0可以簡單的認為是將WebDriver加入到了Selenium RC這一部分中去。那麼Selenium RC和WebDriver有什麼區別呢? RC和 WebDriver 類似,都可以看做是一套操作web頁面的規範。當然,他們的工作原理不一樣。
- Selenium RC 在瀏覽器中執行 JavaScript 應用,使用瀏覽器內建的 JavaScript 翻譯器來翻譯和執行selenese 命令(Selenium 命令集合) 。
- WebDriver 通過原生瀏覽器支援或者瀏覽器擴充套件直接控制瀏覽器。WebDriver 針對各個瀏覽器而開發,取代了嵌入到被測 Web 應用中的 JavaScript。與瀏覽器的緊密整合支援建立更高階的測試,避免了JavaScript 安全模型導致的限制。除了來自瀏覽器廠商的支援,WebDriver 還利用作業系統級的呼叫模擬使用者輸入。
二、Selenium環境搭建
-
安裝python
python的安裝此處就不細說,去python官網下載地址,下載對應的python版本安裝,注意環境變數的配置。
-
安裝Selenium
使用pip 命令安裝 selenium
pip install selenium
, Mac電腦 安裝過python3 使用pip3 install selenium
來安裝。 -
安裝瀏覽器驅動 使用chrome瀏覽器,需要下載對應版本的chromedriver 下載地址
-
安裝上述工具後,可以測試下環境是否正常,使用以下這段程式碼
# -*- coding:utf-8 -*-
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://baidu.com")
driver.close()
複製程式碼
瀏覽器能正常開啟百度,那麼環境安裝是正常的
三、WebDriver API
- 定位元素
-
通過id屬性來定位元素(id屬性在html文件中必須具有唯一性)
find_element_by_id()方法
-
通過name屬性來定位元素(name屬性在當前頁面中)
find_element_by_name()方法
-
通過class屬性來定位元素
find_element_by_class_name()方法
-
通過tag來定位元素
find_element_by_tag_name()方法
-
通過link元素標籤對之間的文字資訊來定位元素
find_element_by_link_text()方法
-
通過partial link定位元素,和link類似,只不過是部分文字資訊來進行定位
find_element_by_partial_link_text()方法
-
find_element_by_xpath()方法
絕對路徑來定位:find_element_by_xpath('/html/body/.........')
文字框:find_element_by_xpath("/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input")
-
通過CSS定位元素
- 通過id屬性定位元素
文字框:find_element_by_css_selector("#kw")
按鈕:find_element_by_css_selector("#su")
- 通過class屬性定位元素
文字框:find_element_by_css_selector(".s_ipt")
按鈕:find_element_by_css_selector(".bg s_btn")
- 通過其他屬性值來定位元素
文字框:
find_element_by_css_selector("[name = 'wd']")
find_element_by_css_selector("[maxlength = 255]")
find_element_by_css_selector("[autocomplete = 'off']")
-
控制瀏覽器
控制瀏覽器視窗大小:
driver=webdriver.Firefox() #設定視窗大小為x,y driver.set_window_size(x,y) #最大化視窗 driver.maxmize_window() 複製程式碼
-
元素操作
當我們獲取了元素之後,還要對其進行操作,如點選按鈕、輸入文字、提交表單等。大多數頁面互動的方法通過WebElement介面提供,常用的有:
- clear() 清除文字框中的文字
- send_keys(*value) 模擬按鍵輸入
- click() 單擊元素 這幾個方法很簡單,很方便使用。 submit() 用於提交表單,例如搜尋框中的提交按鈕。比如我們可以用如下程式碼直接輸入搜尋的關鍵字後用submit()提交,而不用獲取搜尋按鈕再點選。
driver.find_element_by_css_selector("#kw").send_keys("selenium2").submit()
還有幾個常用的方法:
- size() 獲取元素的大小尺寸
- text()獲取元素的文字
- is_displayed()元素是否可見
- 滑鼠、鍵盤事件
模擬滑鼠右鍵、雙擊、懸停、拖拽等操作,會用到ActionChains類。selenium.webdriver.common.action_chains.ActionChains(driver)當呼叫ActionChains的方法時,不會立即執行,而是會將所有的操作按順序存放在一個佇列裡,當你呼叫perform()方法時,佇列中的時間會依次執行。
ActionChains方法列表:
click(on_element=None) ——單擊滑鼠左鍵
click_and_hold(on_element=None) ——點選滑鼠左鍵,不鬆開
context_click(on_element=None) ——點選滑鼠右鍵
double_click(on_element=None) ——雙擊滑鼠左鍵
drag_and_drop(source, target) ——拖拽到某個元素然後鬆開
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個座標然後鬆開
key_down(value, element=None) ——按下某個鍵盤上的鍵
key_up(value, element=None) ——鬆開某個鍵
move_by_offset(xoffset, yoffset) ——滑鼠從當前位置移動到某個座標
move_to_element(to_element) ——滑鼠移動到某個元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移到距某個元素(左上角)多少距離的位置
perform() ——執行鏈中的所有動作
release(on_element=None) ——在某個元素位置鬆開滑鼠左鍵
send_keys(*keys_to_send) ——傳送某個鍵到當前焦點的元素
send_keys_to_element(element, *keys_to_send) ——傳送某個鍵到指定元素
複製程式碼
- 設定等待時間
-
顯示等待: - 主要使用的類和方法:WebDriverWait、uitil\until_not、Expected Conditions。
-
隱式等待: - implicitly_wait
- 其他操作 還有其他一些操作如:上傳下載檔案、操作cookie、驗證碼的處理等等操作還沒有用到過,用到的時候再去學習就好了。 熟練使用以上的各部分,可以寫出各種常用的指令碼,我們算是入門Selenium了