一什么是Selenium ?
Selenium 是一個瀏覽器自動化測試框架,它主要用於web應用程序的自動化測試,其主要特點如下:開源、免費;多平台、瀏覽器、多語言支持;對web頁面有良好的支持;API簡單靈活易於使用;支持分布式測試用例執行。
Selenium經歷了兩個版本,Selenium1.0和2.0,Selenium1.0主要由以下幾部分構成:
-
Selenium IDE:是一個嵌入到Firefox中的插件,可以實現瀏覽器的錄制於回放功能。
-
Selenium Grid:自動化測試輔助工具,可以很方便地同時在多台機器上並行運行多個測試事例。
-
Selenium RC:是Selenium的核心工具,支持多種不同的語言編寫的測試腳本,通過Selenium RC的服務器作為代理服務器去訪問應用從而達到測試的目的。主要分為以下兩部分:
1.Client:用來編寫測試腳本來控制Selenium server的庫。
2.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環境搭建
1.安裝python
python的安裝此處就不細說,去python官網下載地址,下載對應的python版本安裝,注意環境變量的配置。
2.安裝Selenium
使用pip 命令安裝 selenium pip install selenium , Mac電腦 安裝過python3 使用pip3 install selenium 來安裝。
3.安裝瀏覽器驅動
使用chrome瀏覽器,需要下載對應版本的chromedriver
4.安裝上述工具后,可以測試下環境是否正常,使用以下這段代碼
# -*- coding:utf-8 -*-
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://baidu.com")
driver.close()
瀏覽器能正常打開百度,那么環境安裝是正常的
三WebDriver API
1.定位元素
-
通過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定位元素
1.通過id屬性定位元素
文本框:
find_element_by_css_selector("#kw")
按鈕:find_element_by_css_selector("#su")
2.通過class屬性定位元素
文本框:
find_element_by_css_selector(".s_ipt")
按鈕:find_element_by_css_selector(".bg s_btn")
3.通過其他屬性值來定位元素
文本框:
find_element_by_css_selector("[name = 'wd']")
find_element_by_css_selector("[maxlength = 255]")
find_element_by_css_selector("[autocomplete = 'off']")
1.控制瀏覽器
控制瀏覽器窗口大小:
driver=webdriver.Firefox()
#設置窗口大小為x,y
driver.set_window_size(x,y)
#最大化窗口
driver.maxmize_window()
2.元素操作
當我們獲取了元素之后,還要對其進行操作,如點擊按鈕、輸入文字、提交表單等。大多數頁面交互的方法通過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_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了。