一、自動化測試
1、優(yōu)點
在最短時間內(nèi)運行最多的bug
腳本重復運行
減少人為錯誤
克服手工測試局限性(圖片大?。?/p>
2、概念
讓程序代替人工去驗證系統(tǒng)功能的過程
3、解決問題
解決回歸測試
解決壓力測試
解決兼容性測試
提高測試效率,保證產(chǎn)品質(zhì)量
- 誤區(qū):
- 自動化測試可以完全替代手工測試
- 自動化測試一定比手工測試厲害
- 自動化測試可以發(fā)掘更多BUG
- 自動化測試適用于所有功能
4、自動化測試分類
web-自動化測試
移動-自動化測試
接口-自動化測試
單元測試-自動化測試
二、Web自動化測試
概念:讓程序代替人工自動驗證web項目功能的過程
什么Web項目適合做自動化測試?
1、需求變動不頻繁
2、項目周期長
3、項目需要回歸測試
Web自動化測試在什么階段開始?
功能測試完畢(手工測試)
Web自動化測試所屬分類
1、黑盒測試(功能測試)
2、白盒測試(單元測試)
3、灰盒測試(接口測試)
Web自動化測試屬于黑盒測試。
三、Selenium工具
Selenium是一個用于Web應用程序的自動化測試工具
特點:
開源軟件、跨平臺、支持多種瀏覽器、支持多種語言、成熟穩(wěn)定、功能強大
四、元素定位
為什么要使用元素定位?
要使用web自動化操作元素,必須首先找到此元素
定位工具:F12鍵(開發(fā)者工具)
定位元素依賴于什么?
1、標簽名
2、屬性
3、層級
4、路徑
4.1 元素定位方式
1、id
2、name
3、class_name(使用元素的class屬性定位)
4、tag_name(標簽名稱<標簽名 …/>)
5、link_text(定位超鏈接 a標簽)
6、partial_link_text(定位超鏈接 a標簽 模糊)
7、xpath(基于元素路徑)
8、css(元素選擇器)
4.2 id定位
id定位就是通過元素的id屬性來定位元素,HTML規(guī)定id屬性在整個HTML文檔是唯一的
方法:
element = driver.find_element_by_id(id)
# 導包
from time import sleep
from selenium import webdriver
# 獲取瀏覽器對象
driver = webdriver.chrome()
# 打開url
url = ""
driver.get(url)
# 查找用戶名元素
username = driver.find_element_by_id("userA")
# 查找密碼元素
password = driver.find_element_by_id("passwordA")
# 用戶名輸入
username.send_keys("admin")
# 密碼輸入
password.send_keys("123456")
# 暫停3秒
sleep(3)
# 退出瀏覽器驅(qū)動
driver.quit()
4.3 name定位
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = ""
driver.get(url)
driver.find_element_by_name("userA").send_keys("admin")
driver.find_element_by_name("passwordA").send_keys("123456")
sleep(3)
driver.quit()
4.4 class_name定位
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = ""
driver.get(url)
driver.find_element_by_class_name("telA").send_keys("15811111111")
driver.find_element_by_class_name("emailA").send_keys("123@qq.com")
sleep(3)
driver.quit()
id:一般為唯一標識符
name:可以重名
class:多個命名
4.5 tag_name定位
element = driver.find_element_by_tag_name(tag_name)
如果存在多個相同標簽,則返回符合條件的第一個標簽
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = ""
driver.get(url)
driver.find_element_by_tag_name("input").send_keys("admin")
sleep(3)
driver.quit()
4.6 link_text定位
from selenium import webdriver
driver = webdriver.Chrome()
url = ""
driver.get(url)
# 只能使用精準匹配(標簽的全部文本內(nèi)容)
driver.find_element_by_link_text("訪問 谷歌 網(wǎng)站").click()
driver.quit()
4.7 partial_link_text定位
from selenium import webdriver
driver = webdriver.Chrome()
url = ""
driver.get(url)
# 使用模糊,唯一代表關(guān)鍵詞
# 沒有使用唯一代表詞,默認操作符合條件的第一個元素
driver.find_element_by_partial_link_text("訪問").click()
driver.quit()
4.8 XPath定位
為什么使用XPath和CSS定位?
1、id,name,class:依賴于元素這三個對應的屬性,如果元素沒有以上三個屬性,定位方法不能使用
2、link_text,partial_link_text:只適合超鏈接
3、tag_name:只能找頁面唯一元素,或者頁面中多個相同元素中的第一個元素
- 定位策略:
- 1、路徑-定位
- 2、利用元素屬性-定位
- 3、屬性與邏輯結(jié)合-定位
- 4、層級與屬性結(jié)合-定位
element = driver.find_element_by_xpath(xpath)
"""
需求:
1、使用絕對路徑定位 用戶名 輸入admin
2、暫停2秒鐘
3、使用相對路徑定位 密碼框 輸入123
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = ""
driver.get(url)
# 使用絕對路徑定位用戶名
driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")
# 暫停兩秒
sleep(2)
# 使用相對路徑定位密碼框
driver.find_element_by_xpath("http://input[@id='passwordA']").send_keys("123456")
driver.quit()
擴展:
1、//[text()=‘XXX’] 定位文本值等于XXX的元素,一般適合p標簽,a標簽
2、//[contains(@屬性,‘XXX’)] 定位屬性包含XXX的元素
3、//*[starts-with(@屬性,‘XXX’)]定位屬性以XXX開頭的元素
4.8 CSS定位
CSS是一種語言,它用來描述HTML元素的顯示樣式,在CSS中,選擇器是一種模式,用于選擇需要添加樣式的元素
element = driver.find_element_by_css_selector(css_selector)
定位策略
1、id選擇器
前提:元素必須有id屬性,語法:#id
2、class選擇器
前提:元素必須有class屬性,語法:.class
3、元素選擇器
語法:element
4、屬性選擇器
語法:[屬性名=屬性值]
5、層級選擇器
語法:p>input;p input,大于號必須為子元素,空格則不用
"""
需求:
1、使用id選擇器 用戶名 輸入admin
2、使用屬性選擇器 密碼框 輸入123456
3、使用class選擇器 定位電話號碼 12399999999
4、使用元素選擇器 定位span標簽獲取文本值
5、使用層級選擇器 定位Email輸入123@qq.com
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
url = ""
driver.get(url)
# 1、使用id選擇器 用戶名 輸入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 2、使用屬性選擇器 密碼框 輸入123456
driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456")
# 3、使用class選擇器 定位電話號碼 12399999999
driver.find_element_by_css_selector(".telA").send_keys("12399999999")
# 4、使用元素選擇器 定位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")
driver.quit()
4.9 擴展-封裝
定位一組元素
方法:driver.find_elements_by_xxx()
返回結(jié)果:類型為列表,要對列表進行訪問和操作必須指定下標或進行遍歷,下標從0開始
# 擴展八種元素定位的底層實現(xiàn)
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = ""
driver.get(url)
driver.find_element(By.ID, "userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "passwordA").send_keys("123456")
driver.quit()
By類需要導包 from selenium.webdriver.common.by import By
五、元素操作
常用操作方法:
1、click() 單擊元素
2、send_keys(value) 模擬輸入
3、clear() 清除文本
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = ""
driver.get(url)
# 輸入admin
driver.find_element_by_name("userA").send_keys("admin")
# 輸入密碼123456
driver.find_element_by_name("passwordA").send_keys("123456")
# 輸入電話 12399999999
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("12399999999")
# 輸入郵箱 123@qq.com
driver.find_element(By.CSS_SELECTOR, "#emailA").send_keys("123@qq.com")
# 暫停3秒
sleep(3)
# 修改號碼 11199999999
driver.find_element(By.CSS_SELECTOR, ".telA").clear()
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("11199999999")
# 暫停3秒
sleep(3)
# 點擊注冊按鈕
driver.find_element(By.CSS_SELECTOR, "button").click()
driver.quit()
六、瀏覽器常用操作API
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = "https://www.csdn.net/"
driver.get(url)
# 將瀏覽器最大化
driver.maximize_window()
# 設(shè)置固定大小 300,200
driver.set_window_size(300, 200)
# 移動瀏覽器窗口位置 x:320,y:150
driver.set_window_position(320, 150)
# 最大化
driver.maximize_window()
# 點擊 注意:要演示后退功能,必須先執(zhí)行打開新的網(wǎng)站
driver.find_element((By.CSS_SELECTOR, "#li:nth-child(1) > a")).click()
sleep(3)
# 執(zhí)行后退
driver.back()
sleep(3)
# 執(zhí)行前進 注意:前進必須放在后退之后
driver.forward()
sleep(3)
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = " "
driver.get(url)
# 將瀏覽器最大化
driver.maximize_window()
# 用戶名輸入 目的:刷新完成--清空
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
# 刷新
driver.refresh()
# 獲取title
title = driver.title
# 獲取當前url
current_url = driver.current_url
# 點擊 注冊A網(wǎng)頁 打開新窗口
driver.find_element(By.PARTIAL_LINK_TEXT, "注冊A網(wǎng)頁").click()
# 關(guān)閉主窗口
driver.close()
七、獲取元素信息
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = " "
driver.get(url)
# 將瀏覽器最大化
driver.maximize_window()
# 獲取用戶名文本框大小
size = driver.find_element(By.CSS_SELECTOR, "#user").size
print("用戶名大小為:", size)
# 獲取頁面上第一個超文本鏈接內(nèi)容
text = driver.find_element(By.CSS_SELECTOR, "a").text
print("頁面中第一個a標簽為:", text)
# 獲取頁面上第一個超文本鏈接地址
attr = driver.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
print("頁面中第一個a標簽為href屬性值為:", attr)
# 判斷span元素是否可見
display = driver.find_element(By.CSS_SELECTOR, "span").is_displayed()
print("span元素是否可見", display)
# 判斷取消按鈕是否可用
enabled = driver.find_element(By.CSS_SELECTOR, "cancel").is_enabled()
print("取消按鈕是否可用", enabled)
# 判斷旅游是否被選中
selected = driver.find_element(By.CSS_SELECTOR, "#ly").is_selected()
print("旅游是否被選中", selected)
driver.quit()
八、鼠標及鍵盤操作
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = " "
driver.get(url)
# 實例化并獲取ActionChains類
action = ActionChains(driver)
# 定位用戶名 在用戶名上右擊鼠標 預期:粘貼
action.context_click(driver.find_element(By.CSS_SELECTOR, "#userA")).perform()
# 發(fā)送用戶名admin并進行雙擊 預期:選中admin
action.double_click(driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")).perform()
# 移動到注冊按鈕上 預期:按鈕變色 出現(xiàn)加入會員A
action.move_to_element(driver.find_element(By.CSS_SELECTOR, "button")).perform()
driver.quit()
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = " "
driver.get(url)
# 實例化并獲取ActionChains類
action = ActionChains(driver)
source = driver.find_element(By.CSS_SELECTOR, "#div1")
target = driver.find_element(By.CSS_SELECTOR, "#div2")
action.drag_and_drop(source, target).perform()
# 擴展:偏移
action.drag_and_drop_by_offset(source, xoffset=360, yoffset=180).perform()
driver.quit()
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = " "
driver.get(url)
username = driver.find_element(By.CSS_SELECTOR, "#userA")
username.send_keys("admin1")
# 刪除
username.send_keys(Keys.BACK_SPACE)
# 全選
username.send_keys(Keys.CONTROL, "a")
# 復制
username.send_keys(Keys.CONTROL, "c")
# 粘貼
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys(Keys.CONTROL, "v")
driver.quit()
九、元素等待
元素等待:在定位頁面元素時如果未找到,會在指定時間內(nèi)一直等待的過程文章來源:http://www.zghlxwxcb.cn/news/detail-624898.html
元素等待類型:
1、隱式等待:driver.implicitly_wait(timeout),timeout單位秒
2、顯式等待:顯式等待的相關(guān)方法封裝在WebDriverWait類中
說明:
隱式等待為全局設(shè)置,設(shè)置一次,就會作用于所有元素
顯示等待針對單個元素生效文章來源地址http://www.zghlxwxcb.cn/news/detail-624898.html
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 設(shè)置元素等待 隱式等待10秒
driver.implicitly_wait(5)
url = ""
driver.get(url)
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
sleep(2)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
# 設(shè)置元素顯式等待
url = ""
driver.get(url)
# 實例化WebDriverWait()并調(diào)用until方法
# 調(diào)用until放啊返回的一定是一個元素
username = WebDriverWait(driver, timeout=30, poll_frequency=0.5).until(lambda x:x.find_element_by_id("#user"))
# 注意:此時username還不是元素,只有代碼運行起來才是元素
username.send_keys("admin")
sleep(2)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
# send_keys上傳文件
driver = webdriver.Chrome()
driver.implicitly_wait(5)
url = ""
driver.get(url)
driver.find_element(By.CSS_SELECTOR, "[name='upfilea']").send_keys("D:\hello.txt")
sleep(2)
driver.quit()
到了這里,關(guān)于Web自動化測試(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!