python+selenium UI自動化測試環境搭建及使用

牛哄哄的QA發表於2018-10-20

一、什麼是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定位元素

    • 通過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']")

  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()元素是否可見
  1. 滑鼠、鍵盤事件

模擬滑鼠右鍵、雙擊、懸停、拖拽等操作,會用到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) ——傳送某個鍵到指定元素
複製程式碼
  1. 設定等待時間
  • 顯示等待: - 主要使用的類和方法:WebDriverWait、uitil\until_not、Expected Conditions。

  • 隱式等待: - implicitly_wait

  1. 其他操作 還有其他一些操作如:上傳下載檔案、操作cookie、驗證碼的處理等等操作還沒有用到過,用到的時候再去學習就好了。 熟練使用以上的各部分,可以寫出各種常用的指令碼,我們算是入門Selenium了

相關文章