Web自動化測試學習

前短時間看到測試的同事在用 Python 寫自動化測試,自己雖然是開發,但對自動化測試還是很感興趣的,有時候自己要測一個功能的時候,需要登錄,然後點擊菜單,還要點擊按鈕等等一系列的操作,很費時且低效,希望能夠寫一點簡單的自動化測試代碼幫助自己減少不必要的操作的想法,再加上前兩天看了點 Python 的教程,試着在網上找了個自動化測試的示例,並且能夠寫一些簡單的測試腳本,所以記錄在此,方便下次查找。

框架

這裏使用的是 Selenium3.0 Web測試框架,這個框架支持了多種編程語言和腳本語言,JavaC#JavaScript 等等。Selenium官方網站

WebDriver

Selenium 需要使用 WebDriver

Browser(瀏覽器) Component(組件)
Chrome Chromedriver.exe
Internet Explorer IEDriverServer.exe
Edge MicrosoftWebDriver.msi
Firefox 47+ geckodriver(.exe)
PhantomJS phantomjs(.exe)
Opera operadriver(.exe)
Safari SafariDriver.safariextz

把這些驅動下載,並存放到一個目錄中,例如 D:/driver/ ,然後,把這這個目錄添加到系統環境變量 path 下面。

Python3 + Selenium3.0

Python 是現在比較火的一門腳本語言,易學易用。

Windows 下安裝 Python3

Python 下載地址:https://www.python.org/downloads/ 下載以後,點擊運行開始安裝,點擊 next 直到 finish Python3 不需要配置環境變量就可以直接在命令行使用

用 Python 安裝 Selenium3.0

Selenium 可以使用 Python 的 pip 命令安裝擴展庫。 pip 是一個安裝和管理 Python 包的工具,安裝 Python 時就自動安裝好了 在 Windows 命令行輸入 pip 出現說明信息,說明可以正常使用 Selenium 2.x 已經升級到 Selenium3.x ,所以我們下載最新版就好

安裝命令(找不到對應的版本,pip 會下載默認的版本)
pip install selenium==3.0
# 卸載命令
pip uninstall selenium

測試示例

#coding=utf-8

#第一句表示代碼的編碼格式是uft-8格式,方便添加中文註釋等

# 導入 selenium 的 webdriver 包,只有導入 webdriver 包我們才能使用 webdriver API 進行腳本的開發
from selenium import webdriver

# 實例化一個 Chrome瀏覽器 的驅動對象(即打開瀏覽器)
driver=webdriver.Chrome()

# 窗口最大化
driver.maximize_window()

# 定義一個變量,接收我們要訪問的網站的網址
first_url='http://www.baidu.com'

# 使用 GET 方法訪問網址
driver.get(first_url)

# 在 python 的輸出窗口打印一句話(訪問某某某網址,可有可無)
print ("access to %s " %(first_url))

# 找到網頁上 id 爲 kw 的 HTML 標籤,並設置它的值是 "hello world"
driver.find_element_by_id("kw").send_keys("hello world")

# 找到網頁上 id 爲 su 的 HTML 標籤,並點擊它
driver.find_element_by_id("su").click()

# 關閉瀏覽器(如果開啓這句話,瀏覽器會執行完腳本後自動關閉,測試時可關閉這句)
# driver.quit()

NodeJS + Selenium3.0

在用 Python 以後發現似乎 JavaScript 也可以做自動化測試,因爲 Selenium 支持 JavaScript ,所以我又上網搜索資料,果然發現可以使用 NodeJS + Selenium 進行自動化測試,和上面用 Python 差不多。

Windows 下安裝 NodeJS

NodeJS 下載地址: https://nodejs.org/en/ 下載完成,點擊安裝,一直到安裝完成。

用 NodeJS 安裝 Selenium

Selenium 可以通過 npm 安裝。( npm 是隨同 NodeJS 一起安裝的包管理工具。)

# 安裝命令
npm install selenium-webdriver

# 卸載命令
npm uninstall selenium-webdriver

測試示例

當 Selenium-webdriver 被 npm 下載完成,將到在當前目錄下多出一個 ./node_modules/目錄。然後,在與這個目錄同級的目錄下創建第一個 Selenium 測試腳本 baidu.js 。

// 導入 selenium-webdriver 組件,並獲取 By 和 until 兩個對象
var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

// 實例化
var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .build();

// 打開百度
driver.get('https://www.baidu.com');

// 通過 id,找到搜索文本框元素,並輸入文字 'webdriver'
driver.findElement(By.id('kw')).sendKeys('webdriver');

// 通過 id,找到搜索按鈕,並點擊它
driver.findElement(By.id('su')).click();

// 等待1秒鐘(1000毫秒=1秒),設置搜索結果的網頁標題爲 'webdriver_百度搜索'
driver.wait(until.titleIs('webdriver_百度搜索'), 1000);

// 關閉瀏覽器
driver.quit();

這段代碼的作用和上班的示例是一樣的,就不再贅述。 在 bandu.js 文件所在目錄,按住 shift 鍵,用鼠標右鍵點擊空白處,選擇 在此處打開 Powershell 窗口 即可在命令行打開當前目錄,輸入一下命令:

node baidu.js

注意事項

  1. 在自己編寫其他網站的腳本時,發現會獲取不到頁面元素,即 HTML 標籤,那是因爲網頁使用了 frame 這個標籤,那麼我們可以使用 driver.switch_to.frame(frame name) 方法切換到相應的 frame,然後就可以獲取到這個 frame 裏面的元素了。
>>> Python

# 切換到某個frame
switch_to.frame('frame id/name') 
# 切換到第幾個frame,從0開始
switch_to.frame(0) 

# 切換到父級frame
switch_to.parent_frame()

# 切換到主文檔
switch_to.default_content()
>>> NodeJS

// 切換到某個frame
switchTo().frame('frame id/name') 
// 切換到第幾個frame,從0開始
switchTo().frame(0) 

// 切換到父級frame
switchTo().parentFrame()

// 切換到主文檔
switchTo().defaultContent()

// 獲取 frame 的 src 屬性,並打開這個地址
String URL = driver.findElement(By.id("Frame Id")).getAttribute("src").toString();
driver.get(URL);

NodeJS 語法和 Python 語法不同,需要注意某些方法名稱是否正確。

  1. 可能出現打開瀏覽器後,閃退的情況,或者打開瀏覽器後,地址欄沒有自動輸入並跳轉網址,這時候我們檢查一下 webdriver 的版本,如果版本太低,就去先前的地址下載高版本的就行了。

異常

報錯 selenium.common.exceptions.NoSuchFrameException: Message: no such frame 無法切換 frame

錯誤信息:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
錯誤原因: 所在的框架不對 導致找不到元素
解決方法:

  1. 先回到最外層框架 2.進入要定位元素的框架 3.定位
driver.switch_to.default_content()	# 回到主框架
driver.switch_to_frame("xxx")		# 進入要定位元素被包含的那層框架,框架可以用id和name直接定位
driver.find_element_by_xpath('xxx')	# 用xpath定位

End

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章