一、WEB自動化簡介
1.1 什么是自動化?
1、概念
由機器設(shè)備代替人工自動完成指定目標的過程
2、優(yōu)點
- 減少人工勞動力
- 提高工作效率
- 產(chǎn)品規(guī)格統(tǒng)一標準
- 規(guī)格化(批量生產(chǎn))
1.2 什么是自動化測試?
概念:讓程序代替人工去驗證系統(tǒng)功能的過程
1.3 自動化測試能解決什么問題?
- 解決-回歸測試(重點)
- 解決-壓力測試
- 解決-兼容性測試(瀏覽器、分辨率、操作系統(tǒng))
- 提高測試效率,保證產(chǎn)品質(zhì)量
回歸測試:項目在發(fā)新版本之后對項目之前的功能進行驗證
壓力測試:可以理解多用戶同時去操作軟件,統(tǒng)計軟件服務(wù)器處理多用戶請求的能力
兼容性測試:不同瀏覽器(IE、Firefox、Chrome)等
1.4 自動化測試相關(guān)知識
1、優(yōu)點
- 較少的時間內(nèi)運行更多的測試用例
- 自動化腳本可重復(fù)運行
- 減少人為的錯誤
- 克服手工測試的局限性(圖片大小)
自動化測試覆蓋率50%~60%
2、誤區(qū)
- 自動化測試可以完全代替手工測試
- 自動化測試一定比手工測試厲害
- 自動化測試可以發(fā)掘更多的bug
- 自動化測試用于所有功能
3、自動化測試分類
- Web-自動化測試
- 移動-自動化測試
- 接口-自動化測試
- 單元測試-自動化測試
1.5 什么是Web自動化測試?
1、概念
程序代替人工自動驗證Web項目功能的過程
2、什么Web項目適合做自動化測試
- 需求變動不頻繁
- 項目周期長
- 項目需要回歸測試
3、Web自動化測試在什么階段開始?
功能測試完畢(手工測試)(1、時間問題;2、功能不完善)
4、Web自動化測試所屬分類
按照代碼可見度劃分:
- 黑盒測試(功能測試)
- 白盒測試(單元測試)
- 灰盒測試(接口測試)
Web自動化測試屬于黑盒測試(功能測試)
二、Web自動化測試工具選擇
1.1 主流的Web自動化測試工具
- QTP:收費,支持Web,桌面自動化測試
- Selenium(本階段學(xué)習(xí)):開源的Web自動化測試工具,免費,主要做功能測試
- Robot framework:基于Python可擴展地關(guān)鍵字驅(qū)動的測試自動化框架,2014停止更新
Web自動化測試的三板斧:
● 定位元素
● 交互元素
● 進行斷言
2.1、 什么是Selenium?
Selenium是一個用于Web應(yīng)用程序的自動化測試工具
1、 Selenium特點
- 開源軟件:源代碼開放可以根據(jù)需要來增加工具的某些功能
- 跨平臺:Linux、Windows、Mac
- 支持多種瀏覽器:Firefox、Chrome、IE
- 支持多種語言:Python、Java、C#、JavaScript、Ruby、PHP等
- 成熟穩(wěn)定:目前已經(jīng)被谷歌、百度、騰訊等公司廣泛使用
- 功能強大:支持商業(yè)化大部分功能,由于開源,可定制化功能
2、Python+Selenium環(huán)境搭建
python+Pychram+selenium+chrome+谷歌瀏覽器驅(qū)動
谷歌版本和瀏覽器驅(qū)動一定要一致
- Terminal中安裝selenium:pip install selenium
查看:pip show selenium
卸載:pip unistall selenium
擴展:
○ 安裝指定版本:pip install selenium==版本號
○ pip是python中包管理工具(可以安裝,卸載,查看python工具)
○ pip list:查看通過pip包管理工具安裝的插件或工具
提示:
使用pip必須聯(lián)網(wǎng);默認安裝python3.5版本以上工具,自帶pip包管理工具,默認會自動安裝并且添加path環(huán)境變量
-
查看Chorme的版本
-
打開中國鏡像站,下載驅(qū)動。中國鏡像網(wǎng)址
-
點擊Chrome Driver鏡像。Chrome驅(qū)動
-
選擇和Chrome版本最近的驅(qū)動進行下載
-
將驅(qū)動下載到指定文件夾,并將所在目錄添加到系統(tǒng)path環(huán)境變量中
-
導(dǎo)包,測試是否安裝成功
3、科普path
說明:指定系統(tǒng)搜索的目錄
dos命令默認搜索順序:
- 檢測是否為內(nèi)部命令
- 檢測是否為當下目錄可執(zhí)行文件
- 檢測path環(huán)境指定的目錄
- 如果以上搜索目錄都檢測不到輸入的命令或可執(zhí)行文件,系統(tǒng)會拋出不是內(nèi)部或外部命令
在web環(huán)境中,如果不將瀏覽器驅(qū)動添加到path中,會提示selenium驅(qū)動有誤
4、第一個案例
1、導(dǎo)包
import time
from selenium import webdriver
2、獲取谷歌瀏覽器對象
driver = webdriver.Chrome()
3、打開網(wǎng)頁
driver.get("https://www.baidu.com/")
#暫停三秒
time.sleep(3)
#退出瀏覽器
driver.quit()
5、pycharm安裝軟件
推薦原因:安裝到當前工程環(huán)境內(nèi)
提示:如果使用pip install插件名安裝過后,打開pycharm導(dǎo)包操作時,提示找不到此包,說明使用pip install默認安裝的路徑和當前工程的環(huán)境路徑不是同一個環(huán)境,進行以上處理可以解決問題。
三、八大元素定位
3.1 為什么要學(xué)習(xí)元素定位?
----讓程序操作執(zhí)行元素,就必須先找到此元素。
3.2 定位元素時依賴于什么?
● 標簽名
● 屬性
● 層級
● 路徑
3.3 面試題
如果元素定位不到,你是怎么去分析的?
- 元素沒有加載完成
- Frame中
- 元素不可用,不可讀,不可見
- 動態(tài)屬性/動態(tài)的DIV層
3.4 使用定位策略
- driver.find_element_by_id() # 被棄用了
- driver.find_element(By.ID,“”) # 推薦,定位一個元素
- driver.find_elements(By.ID,“”) # 定位一組元素
元素定位的前提:需要定位的元素或它的屬性必須要唯一。
3.5 八大元素
- id
- name
- class_name(使用元素的class屬性)
- xpath(基于文件路徑)
- css(元素選擇器定位)
- tag_name(元素的標簽名稱<input …/>)
- link_text(定位超鏈接,a標簽)
- partail_link_text(定位超鏈接,a標簽 模糊)
匯總:
1.基于元素屬性特有定有定位:id/name/class_name
2. 基于元素標簽名稱定位:tag_name
3. 定位超鏈接文本:link_text/partail_link_text
4. 基于元素路徑定位:xpath
5. 基于選擇器:css
"""底層代碼"""
from selenium.webdriver.common.by import By
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
1、id
HTML規(guī)定id屬性在HTML文檔中必須是唯一的
driver.find_element(By.ID, “id名”).send_keys(“輸入內(nèi)容”)
#打開瀏覽器
driver = webdriver.Chrome()
加載網(wǎng)頁
driver.get("https://www.baidu.com/")
定位元素(利于封裝)
driver.find_element(By.ID, "kw").send_keys("輸入的內(nèi)容")
2、name
driver.find_element(By.NAME, "wd").send_keys("輸入的內(nèi)容")
3、class_name
driver.find_element(By.CLASS_NAME,"login-top")
4、tag_name
通過標簽名來定位,一般很少使用
如果頁面中存在多個相同的標簽名,默認返回第一個
driver.find_element(By.TAG_NAME,"input").send_keys("admin")
5、link_text
精確匹配超鏈接
driver.find_element(By.LINK_TEXT,"新聞").click()
6、partail_link_text
模糊匹配超鏈接
driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()
7、xpath
如果要定位的元素沒有id、name、class屬性,該如何進行定位?
----使用xpath。
xPath是XML Path的簡稱,是一門在XML文檔中查找元素信息的語言
XML是一種標記語言。
● 本質(zhì)是一種查詢語言
●支持邏輯運算、函數(shù)
● 實現(xiàn)非常強大的功能
● 可以用于APP自動化測試
依賴于元素的路徑:
● 絕對路徑:/開頭是絕對路徑
● 相對路徑://開頭是相對路徑
#1、相對路徑+索引定位 //form/span/input
driver.find_element(By.XPATH,"http://form/span/input").send_keys("輸入的內(nèi)容")
#2、相對路徑+屬性定位 //input[@autocomplete='off']
driver.find_element(By.XPATH,"http://input[@autocomplete='off']").send_keys("輸入的內(nèi)容")
#3、相對路徑+通配符定位 *復(fù)制xpath不是萬能的,經(jīng)常會報錯
driver.find_element(By.XPATH,"http://*[@autocomplete='off']").send_keys("輸入的內(nèi)容")
driver.find_element(By.XPATH,"http://*[@*='off']").send_keys("輸入的內(nèi)容")
#4、相對路徑+部分屬性值定位 input[starts-with(@autocomplete,'of')]
driver.find_element( # auto屬性以of開頭:starts-with
By.XPATH,"http://input[starts-with(@autocomplete,'of')]"
).send_keys("輸入的內(nèi)容")
driver.find_element( # auto屬性從第二個字符開始截取,為ff的:substring
By.XPATH,"http://input[substring(@autocomplete,2)='ff']"
).send_keys("輸入的內(nèi)容")
driver.find_element( # auto屬性包含字符of:contains
By.XPATH,"http://input[contains(@autocomplete,'of')]"
).send_keys("輸入的內(nèi)容")
#5、相對路徑+文本定位
value = driver.find_element(
By.XPATH,"http://span[text()='按圖片搜索']"
).get_attribute('class')
1、XPATH的語法
語法:表示層級+屬性
- /(開頭)表示根路徑
/html/body/div- //(任意層級)(包括下級、下級的下級…)
//div- @屬性
‘//a[@target=“_top”]’- /(中間)表示下一級
‘//p//input’- .表示本級
- …表示上一級
2、 XPATH的函數(shù)
函數(shù)是XPATH另一個魅力,常用的函數(shù):
● text:獲取元素內(nèi)的文本
● contains:任意位置包含匹配
● starts-with:開頭
● substring:截取
$x(“//a[text=(vivoX5MAX L 移動4G 八核超薄大屏5.5雙卡)]”)
$x(“//a[contains( text=(),‘vivo’) ]”)
$x(“//a[start-with( text=(),‘vivo’) ]”)
$x(“//a[substring(@name,2)=‘vi’ ]”)
3.8 css
1. id選擇器
- 前提:元素必須有id屬性
- 語法:#id 如:#password
2. class選擇器
- 前提:元素必須是有class屬性
- 語法:.class 如:.telA
3. 元素選擇器
- 語法:element 如:input
4. 屬性選擇器
- 語法:[屬性名=屬性值]
5. 層級選擇器
- 語法:
p>input
p input - 提示:
大于號和空格的區(qū)別,大于號必須為子元素,空格則不用
6. 【css延伸】
input[type^=‘p’] type屬性以p字母開頭的元素
input[type$=‘d’] type屬性以d字母結(jié)束的元素
input[type*=‘w’] type屬性包含w字母的元素
#1.使用css id選擇器 定位用戶名 輸入admin
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
#2.使用css 屬性選擇器 定位密碼框 輸入123456
driver.find_element(By.CSS_SELECTOR, "[name='passwordA']").send_keys("123456")
#3.使用css class選擇器 定位電話號碼 輸入18611112222
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("18611112222")
#4.使用css 元素選擇器 定位span標簽獲取文本值
span = driver.find_element(By.CSS_SELECTOR, "span").text
print("獲取的span標簽文本值為:",span)
#5.使用層級選擇器 定位email 輸入123@qq.com
driver.find_element(
By.CSS_SELECTOR,"p>input[placeholder='電子郵箱A']"
).send_keys("123@qq.com")
3.9 XPATH和CSS類似功能對比
定位方式 | XPath | CSS |
---|---|---|
元素名 | //input | input |
id | //input[@id=‘userA’] | @userA |
class | //*[@class=‘telA’] | .telA |
屬性 | 1.//*[text()==“xxx”] 2.//input[starts-with(@attribute,‘xxx’)] 3.//input[contains(@attribute,‘xxx’)] |
1.input[type^=‘p’] 2.input[type$=‘d’ 3.input[type*=‘w’] |
3.10 定位一組元素
- 方法:find_elements(By.元素,xxx)
- 返回結(jié)果:類型為列表,要對列表進行訪問和操作必須指定下標或進行遍歷,下標從0開始
四、UnitTest
4.1 unittest使用方式
- 導(dǎo)包:import unittest、from selenium import webdriver
- 創(chuàng)建測試類繼承unittest.TestCase
- 寫一個以test_開頭的測試方法
import unittest
from selenium import webdriver
class TestCase(unittest.TestCase):
def test_01_login(self):
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestCase(unittest.TestCase):
def test_01_login(self):
global driver
# 1、打開瀏覽器
driver = webdriver.Chrome()
# 2、加載網(wǎng)頁
driver.get("https://www.baidu.com/")
# 3、定位元素
driver.find_element(By.XPATH, "http://form/span/input").send_keys("輸入的內(nèi)容")
unittest運行測試用例的一個很大的坑:文章來源:http://www.zghlxwxcb.cn/news/detail-726799.html
4.2 兩種運行方式
- 命令行方式:(不需要考慮環(huán)境)
- python -m unittest 模塊名.py —>執(zhí)行整個模塊
- python -m unittest 模塊名.類名.方法名 —>執(zhí)行單個方法
- main方式 -->必須要配置環(huán)境
文章來源地址http://www.zghlxwxcb.cn/news/detail-726799.html
到了這里,關(guān)于第一章 Web自動化入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!