1. 程式人生 > >基於python語言的Selenium自動化測試

基於python語言的Selenium自動化測試

log 轉換成 body odi 執行 con 行為 般的 按鈕

一、Selenium簡介

Selenium是一個web自動化應用測試工具,還支持所有的web的管理任務自動化。並且開源免費,也是一個web自動化輕量級框架。它支持多種瀏覽器、跨平臺、跨操作系統、支持多種編程語言編寫腳本,還能進行分布式測試用例的執行。

Selenium經歷三個版本,Selenium1、Selenium2、Selenium3。它不是單獨的一個工具,而是由一些類庫、插件、工具等組合而成。主要的工具:

Selenium IDESelenium IDE是嵌入火狐瀏覽器中的一個插件,主要用於瀏覽器操作失誤錄制與回放,而且錄制的腳本可以轉換成多種語言,可以通過轉換的語言進行開發測試腳本。初級學習人員可以先通過該插件入手學習Selenium自動化測試。

Selenium Grid自動化輔助工具,能夠加快Web-APP的功能測試。

Selenium RCSelenium 核心部分,能夠支持多種不同編程語言進行編寫自動化測試腳本,例如常用Java和python語言進行編寫selenium自動化測試腳本。

WebDriver在Selenium 2.0版本中,新增加了WebDriver. WebDriver是專門針對各個瀏覽器而開發,取代了嵌入到被測Web應用中的JavaScript。與瀏覽器的緊密集成支持創建更高級的測試,避免了JavaScript安全模型導致的限制。除了來自瀏覽器廠商的支持,WebDriver還能夠利用操作系統級的調用來模擬用戶輸入。除了支持各個瀏覽器,還能支持安卓跟iPhone移動應用測試。

二、Windows測試環境的搭建

1、安裝Python

本文主要是基於python語言的自動化測試,首先要安裝python。在網絡上下載最新本的python3.6版本。如果Windows是32位,則選擇x86版本下載安裝,如果是64位操作系統,則選擇64版本。本文以64版本為例。下載完成後,雙擊安裝程序包進行安裝,一般選擇自定義安裝,並且勾選自動添加環境變量,如下圖所示:

(1)安裝過程跟安裝一般的軟件一樣操作,安裝完成之後可以在開始菜單中看到安裝好的python目錄,如下圖所示:

(2)安裝完成之後就可以打開自帶的IDLE編寫Python程序,如圖所示:

2、pip安裝

pip是一個安裝和管理python包的工具。導入一些python非內置的類庫、模塊、工具等就是用pip安裝。但現在版本的Python安裝包已集成pip,不需要我們另外進行安裝了。檢查python是否已經集成安裝pip,我們可以通過在安裝目錄下查看Script是否有pip.exe等文件,如下圖:如果有可以直接使用pip命令。

3、seleniumd安裝

上述所述安裝pip,就是為了方便安裝Selenium包。通過pip命令可以直接安裝Selenium包,不過在安裝Selenium時最好選擇低版本的,一般選擇Selenium2.0以上,Selenium3.0以下的版本比較合適。要想安裝selenium某個版本,需要在命令裏面指定版本號安裝,例如:

>>>pip install selenium==2.53.0

4、JetBrains PyCharm 安裝

JetBrains PyCharm是python開發環境的編譯器。PyCharm具備一般IDE的功能,比如, 調試代碼、語法高亮、Project管理、智能提示、單元測試等。

(1)首先下載安裝包,然後自定義安裝,按照一般軟件安裝即可。

(2)安裝好後首次使用需要進行配置,一般選擇默認即可。

(3)設置好後新建項目會提示選擇python版本,選擇我們安裝的路徑即可。如圖:

5、瀏覽器驅動安裝

WebDriver支持各種瀏覽器,但是需要安裝對應的瀏覽器驅動才能正常調用瀏覽器運行。根據自己的系統和瀏覽器下載不同版本的驅動,下載的驅動文件需要放置到系統環境變量Path下面,瀏覽器安裝文件下,例如火狐瀏覽器驅動,如圖:

三、selenium自動化測試基礎知識

1、調用瀏覽器驅動,訪問地址方法

driver = webdriver.Firefox()

driver.get("網址")

2、定位元素方法

Id 定位: find_element_by_id() id必須是唯一的

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定位:find_element_by_partial_link_text()

Xpath定位:

(1)絕對路徑定位

find_element_by_xpath(“html/body/div/div[2]/div/div/div/from/span/input”)

(2)元素屬性定位:find_element_by_xpath(“//input[@id=’kw’]”)

(3)層級與屬性結合:find_element_by_xpath(“//form[@id=’form’]/span/input”)

(4)使用邏輯運算符find_element_by_xpath(“//input[@id=’kw’ and @class=’su’/span/input]”)

CSS 定位:

(1)通過class屬性定位:find_element_by_css_selector(“.s_ipt”)

(2)通過id屬性定位:find_elememt_by_css_selector(“#kw”)

(3)通過標簽名定位:find_element_css_selector(“input”)

1)通過父子關系定位:find_element_css_selector(“span>input”)

2)通過屬性定位:find_element_by_css_selector(“[name=’kw’]”)

3)通過組合定位:find_element_by_css_selector(“form.fm>span>input.s_ipt”)

By定位元素:find_element(By.ID,”kw”)

3、設置瀏覽器大小

driver.set_window_size(480, 800):設置瀏覽器大小(480,800)

4、提交輸入框數據

driver.find_element_by_id(‘txtUser‘).send_keys(‘黃文婷‘):提交登錄賬號黃文婷

5、鼠標操作

ActionChains 類提供的鼠標操作的常用方法:

perform() 執行所有ActionChains 中存儲的行為

context_click() 鼠標右擊

double_click() 鼠標雙擊

drag_and_drop() 鼠標拖動

move_to_element() 鼠標懸停

6、休眠方法

sleep(3):設置休眠3秒

7、表單切換

switch_to_frame() 默認可以直接取表單的id 或name 屬性進行切換。

8、多窗口切換

current_window_handle:獲得當前窗口句柄

window_handles:返回的所有窗口的句柄到當前會話

switch_to_window():用於切換到相應的窗口

9、處理警告框

text :獲取alert/confirm/prompt 中的提示信息。

Accept:點擊確認按鈕。

dismiss :擊取消按鈕。

四、簡單示例

以下是一個簡單的自動化登錄測試用例:

#coding=utf-8

from selenium import webdriver

import unittest

import time

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

class SouthInfoManagePlatform(unittest.TestCase):

def setUp(self):

print(‘開始執行測試用例‘)

self.driver = webdriver.Firefox()

self.driver.get("http://192.168.10.42:8787/")

def tearDown(self):

# self.driver.quit()

print(‘測試用例執行結束!‘)

def test_scenario_001(self):

"一個簡單的測試場景"

print(‘用戶登錄:‘)

self.driver.find_element_by_id(‘txtUser‘).clear()#取消默認賬號

self.driver.find_element_by_id(‘txtUser‘).send_keys(‘黃文婷‘)#用戶名

self.driver.find_element_by_id(‘txtUser‘).clear()

self.driver.find_element_by_id(‘txtPwd‘).send_keys(‘123‘)#密碼

logincode=self.driver.get_cookies()[1]["value"]

self.driver.find_element_by_xpath(".//*[@id=‘txtCheckCode‘]").send_keys(logincode)

#time.sleep(3)

self.driver.find_element_by_name(‘IbtnLogin‘).click()

time.sleep(3)

基於python語言的Selenium自動化測試