軟件測試專欄
感興趣可看:軟件測試專欄
? ?? ? ? ?? ? ? ?? ? 自動化測試學習部分源碼
python自動化測試相關知識:
? ?? ? 【如何學習Python自動化測試】—— 自動化測試環境搭建
? ?? ? 【如何學習python自動化測試】—— 瀏覽器驅動的安裝 以及 如何更新driver
? ?? ? 【如何學習Python自動化測試】—— 頁面元素定位
? ?? ? 【如何學習Python自動化測試】—— 時間等待
? ?? ? 【如何學習Python自動化測試】—— 瀏覽器操作
? ?? ? 【如何學習Python自動化測試】—— 鼠標鍵盤操作
? ?? ? 【如何學習Python自動化測試】—— 多層窗口定位
? ?? ? 【如何學習Python自動化測試】—— 警告框處理
? ?? ? 【如何學習Python自動化測試】—— Cookie 處理
? ?? ? 【如何學習Python自動化測試】—— expected_conditions
? ?? ? 【如何學習Python自動化測試】—— Python 的 unittest 框架
? ?? ? 【如何學習Python自動化測試】—— HTMLTestRunner 生成測試報告
WebDriver API的使用
- 軟件測試專欄
- 實戰相關知識
- 實戰內容
- 1. “百度翻譯”的頁面UI測試
- 2. “新浪微博”的兩個頁面UI測試
- 操作異常問題與解決方案
- 附錄
實戰相關知識
? ?? ? Selenium 簡介:
? ?? ? WebDriver是Selenium Tool套件中最重要的組件。Selenium 2.0之后已經將Selenium和WebDriver進行合并,作為一個更簡單、簡潔、有利于維護的API提供給測試人員使用。 它提供了一套標準的接口,可以用多種編程語言調用,并且和瀏覽器進行交互。
? ?? ? WebDriver可以對瀏覽器進行控制,包括輸入URL,點擊按鈕,填寫表單,滾動頁面,甚至是執行JavaScript代碼。同時,它也能夠獲取網頁中的信息,如文本,標簽,屬性等,以便進行測試。
? ?? ? WebDriver支持多種瀏覽器,包括Chrome、Firefox、Edge、Safari和Internet Explorer等。它還提供了豐富的API,用于測試,如元素定位,頁面等待,操作模擬等。
? ?? ? 通過使用WebDriver,可以快速、自動化地進行web應用程序測試,從而提升測試效率和質量。同時,它也是Web應用程序開發人員進行自動化測試的最佳工具之一。
? ?? ? 在軟件UI自動化測試中,測試人員用WebDriver API編寫測試腳本。
? ?? ? 使用WebDriver API對網頁UI進行測試的步驟:
- 分析測試需求,確定測試目標頁面的UI元素
- 編寫腳本,逐個定位測試目標元素
- 對測試目標元素進行對應的測試操作
實戰內容
1. “百度翻譯”的頁面UI測試
(1)到“百度翻譯”網頁 (https://fanyi.baidu.com/)查看要測試的頁面。
(2)確定要測試的UI元素目標。
- 語言按鈕:打開下拉框,選擇語言
- 轉換按鈕:點擊,測試語言是否轉換
- 翻譯按鈕:點擊,測試翻譯文本
- 輸入框:測試輸入框,語言錯誤提示,刪除
- 翻譯記錄:查看翻譯記錄,并刪除
測試的內容需要注意的是:
- 輸入框是否可以正常輸入文本。
- 輸入框是否可以清空。
- 輸入框輸入文本后,是否可以正常進行翻譯。
- 翻譯結果是否正確顯示。
- 測試結果是否符合預期,即翻譯結果是否與預期一致。
? ?? ? 這些測試內容應該在多種情況下進行測試,如輸入不同長度的文本、輸入不同語言的文本等,以保證測試的全面性和準確性。
(3)編寫腳本,定位測試目標元素,并對元素進行對應的測試操作。
-
代碼截圖:
-
運行結果:
-
打開百度翻譯頁面截圖
-
選擇翻譯和被翻譯的語言截圖
-
轉換翻與被翻語言截圖
-
斷言提示語截圖
-
斷言翻譯結果為“自動化實驗”截圖
-
翻譯記錄截圖
2. “新浪微博”的兩個頁面UI測試
(1)訪問“新浪微博”網頁 ,(https://weibo.com/)。
登錄個人賬號后,出現個人頁面。
(2)確定要測試的UI元素目標。
新浪微博的首頁:
- 搜索框:輸入框、搜索按鈕
- 左側菜單欄:文字鏈接
- 頂欄:分類、下拉框
- 登錄:彈框、內容
新浪微博的個人頁面:
- 文本框:輸入框
- 快捷窗口:表情、圖片、話題、下拉框、公開、發送
測試的內容需要注意的是:
- 登錄頁面的元素是否可以正常加載。
- 登錄按鈕是否可以正常點擊,是否可以進入登錄狀態。
- 發布微博的輸入框是否可以正常輸入文本。
- 發布按鈕是否可以正常點擊,是否可以成功發布微博。
- 評論按鈕是否可以正常點擊,是否可以進入評論狀態。
- 評論輸入框是否可以正常輸入文本。
- 發表按鈕是否可以正常點擊,是否可以成功發表評論。
? ?? ?這些測試內容應該在多種情況下進行測試,如輸入不同長度的文本、輸入不同類型的文本等,以保證測試的全面性和準確性。同時需要注意測試過程中的網絡和頁面加載速度等因素,以保證測試的穩定性和準確性
(3)編寫腳本,定位測試目標元素,并對元素進行對應的測試操作。
-
代碼截圖:
-
運行結果:
搜索結果.png
下拉框.png
登錄個人頁面.png
發布.png
發布完成截圖
操作異常問題與解決方案
- 問題一:
Message: element not interactable
- 解決方法:不可交互元素,具體查找資料,通過selenium調用js代碼實現
js1 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="自動化實驗";'
driver.execute_script(js1)
- 問題二:
Message: session not created: This version of ChromeDriver only supports Chrome version 110
- 解決方法:問題描述:你的ChromeDriver(Chrome驅動器)版本只能維持 Chrome(谷歌瀏覽器)110版本的,而我當前的Chrome 版本是 113.0.5672.64,路徑***** 。
這個問題的解決辦法也很簡單,有兩種辦法:
第一種:換瀏覽器
第二鐘:換ChromeDirver驅動,安裝新的ChromeDirver驅動
具體解決步驟:【如何學習python自動化測試】—— 瀏覽器驅動的安裝 以及 如何更新driver
附錄
- “百度翻譯”的頁面UI測試
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://fanyi.baidu.com/")
# 隱式等待
driver.implicitly_wait(10)
# 刪除廣告彈框
driver.find_element(By.CLASS_NAME, 'app-guide-close').click()
# 選擇翻譯的語言為英文
sleep(1)
driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[1]/div[1]/a[3]/span').click()
sleep(1)
driver.find_element(By.XPATH, '//*[@id="lang-panel-container"]/div/div[5]/div[1]/div[21]/div/span[1]').click()
# 選擇被翻譯的語言為中文
sleep(1)
driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[1]/div[1]/a[1]/span').click()
sleep(1)
driver.find_element(By.XPATH, '//*[@id="lang-panel-container"]/div/div[5]/div[1]/div[22]/div/span[1]').click()
# 轉換翻與被翻語言
sleep(1)
driver.find_element(By.CLASS_NAME, 'exchange-mask').click()
sleep(1)
# 測試語言錯誤提示,在英文輸入框輸入中文‘自動化實驗’
# 文本框輸入
js1 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="自動化實驗";'
driver.execute_script(js1)
# 點擊翻譯
driver.find_element(By.ID, 'translate-button').click()
# 斷言提示語
title = driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[2]/div[1]/div[1]''/div/div[2]/div[3]/div[3]/p/span').text
assert title == '您輸入的可能是:'
# 文本框輸入
js2 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="Automatic experiment";'
driver.execute_script(js2)
# 翻譯
driver.find_element(By.ID, 'translate-button').click()
sleep(2)
# 斷言翻譯結果為“自動化實驗”
title = driver.find_element(By.CLASS_NAME, 'output-bd').text
assert title == '自動化實驗'
# 為了顯示翻譯記錄
input = driver.find_element(By.CLASS_NAME, 'textarea')
input.clear()
input.click()
# 點擊翻譯記錄
driver.find_element(By.CLASS_NAME, 'history-btn').click()
driver.save_screenshot('翻譯記錄.png')
sleep(1)
# 關閉翻譯記錄
js3 = "document.querySelector('body > div:nth-child(12) > div > " \"div.ant-modal-wrap.modal-container > div > div.ant-modal-content > button > span').click()"
driver.execute_script(js3)
sleep(1)
driver.quit()
- “新浪微博”的兩個頁面UI測試
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.get("https://weibo.com/newlogin?tabtype=weibo&gid=""102803&openLoginLayer=0&url=https%3A%2F%2Fweibo.com%2F")
driver.implicitly_wait(10) # 隱式等待
# 測試搜索框
driver.find_element(By.CLASS_NAME, 'woo-input-main').send_keys('web')
driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[1]/div[1]/div/div[2]/div[2]/button').click()
handles = driver.window_handles # 獲取當前瀏覽器的所有窗口句柄
driver.switch_to.window(handles[-1]) # 切換到最新打開的窗口
driver.save_screenshot('搜索結果.png')
driver.switch_to.window(handles[0]) # 切換到最開始打開的窗口
sleep(2)
# 測試左側菜單欄
driver.find_element(By.LINK_TEXT, '熱門榜單').click()
sleep(2)
driver.back()
sleep(2)
# 測試頂欄
driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[2]/div[2]/main''/div/div/div[1]/div/div/div/div[2]/div/div').click()
# 測試頂欄下拉框
driver.find_element(By.CSS_SELECTOR, '#app > div.woo-box-flex.woo-box-column.Frame_wrap_3g67Q > div.woo-box-flex''.Frame_content_3XrxZ.Frame_noside1_3M1rh > div.Frame_main_3Z_V0 > main > div ''> div > div.SecBar_visable_16JHY > div > div > div > div:nth-child(8) > div > i').click()
driver.save_screenshot('下拉框.png')
driver.find_element(By.CSS_SELECTOR, '#app > div.woo-box-flex.woo-box-column.Frame_wrap_3g67Q > div.woo-box-flex''.Frame_content_3XrxZ.Frame_noside1_3M1rh > div.Frame_main_3Z_V0 > main > div ''> div > div.SecBar_visable_16JHY > div > div > div > div:nth-child(8) > div > i').click()
# 測試登錄按鈕
driver.maximize_window() # 放大屏幕
driver.find_element(By.XPATH, '//*[@id="__sidebar"]/div/div[2]/div[1]/div/button').click()
# 斷言登錄框成功打開
sleep(2)
title = driver.find_element(By.CLASS_NAME, 'LoginPop_t1_2fuX8').text
assert title == '請選擇如下方式登錄微博'
# 等待登錄頁面
WebDriverWait(driver, 1000).until(EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div[2]/div[2]/div[1]/div/div/div/div/a[3]/div/span'))
)
sleep(6) # 個人頁面
driver.save_screenshot('個人頁面.png')
# 測試搜索框輸入框
driver.find_element(By.CLASS_NAME, 'Form_input_2gtXx').send_keys('20215120808')
# 測試快捷鍵表情
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[1]/div/div[1]').click()
# 測試快捷鍵話題
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[1]/div/div[4]/div').click()
# 測試僅自己可見
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/span/div').click()
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/div/div/div[4]').click()
# 測試發布
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[4]/button').click()
driver.save_screenshot('發布.png')