python自動化測試實戰 —— WebDriver API的使用

軟件測試專欄

感興趣可看:軟件測試專欄
? ?? ? ? ?? ? ? ?? ? 自動化測試學習部分源碼
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元素目標。

  • 語言按鈕:打開下拉框,選擇語言
  • 轉換按鈕:點擊,測試語言是否轉換
  • 翻譯按鈕:點擊,測試翻譯文本
  • 輸入框:測試輸入框,語言錯誤提示,刪除
  • 翻譯記錄:查看翻譯記錄,并刪除

測試的內容需要注意的是:

  1. 輸入框是否可以正常輸入文本。
  2. 輸入框是否可以清空。
  3. 輸入框輸入文本后,是否可以正常進行翻譯。
  4. 翻譯結果是否正確顯示。
  5. 測試結果是否符合預期,即翻譯結果是否與預期一致。

? ?? ? 這些測試內容應該在多種情況下進行測試,如輸入不同長度的文本、輸入不同語言的文本等,以保證測試的全面性和準確性。

(3)編寫腳本,定位測試目標元素,并對元素進行對應的測試操作。

  • 代碼截圖:
    在這里插入圖片描述
    在這里插入圖片描述

  • 運行結果:

  1. 打開百度翻譯頁面截圖
    在這里插入圖片描述

  2. 選擇翻譯和被翻譯的語言截圖在這里插入圖片描述

  3. 轉換翻與被翻語言截圖
    在這里插入圖片描述

  4. 斷言提示語截圖
    在這里插入圖片描述

  5. 斷言翻譯結果為“自動化實驗”截圖
    在這里插入圖片描述

  6. 翻譯記錄截圖
    在這里插入圖片描述

2. “新浪微博”的兩個頁面UI測試

(1)訪問“新浪微博”網頁 ,(https://weibo.com/)。
在這里插入圖片描述
登錄個人賬號后,出現個人頁面。
在這里插入圖片描述

(2)確定要測試的UI元素目標。
新浪微博的首頁:

  • 搜索框:輸入框、搜索按鈕
  • 左側菜單欄:文字鏈接
  • 頂欄:分類、下拉框
  • 登錄:彈框、內容

新浪微博的個人頁面:

  • 文本框:輸入框
  • 快捷窗口:表情、圖片、話題、下拉框、公開、發送

測試的內容需要注意的是:

  1. 登錄頁面的元素是否可以正常加載。
  2. 登錄按鈕是否可以正常點擊,是否可以進入登錄狀態。
  3. 發布微博的輸入框是否可以正常輸入文本。
  4. 發布按鈕是否可以正常點擊,是否可以成功發布微博。
  5. 評論按鈕是否可以正常點擊,是否可以進入評論狀態。
  6. 評論輸入框是否可以正常輸入文本。
  7. 發表按鈕是否可以正常點擊,是否可以成功發表評論。

? ?? ?這些測試內容應該在多種情況下進行測試,如輸入不同長度的文本、輸入不同類型的文本等,以保證測試的全面性和準確性。同時需要注意測試過程中的網絡和頁面加載速度等因素,以保證測試的穩定性和準確性

(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')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215463.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

河南省專業技術人員職稱評審之繼續教育

(一)職稱評審時會遇到一個關于繼續教育學時是否足夠的問題,作為新人很容易一頭霧水,這里以河南省為例,先在管理系統 http://manage.hnzjgl.gov.cn 注冊,根據自己單位選擇,有些高校雖然在地方而不…

力扣題:數字與字符串間轉換-12.12

力扣題-12.12 [力扣刷題攻略] Re:從零開始的力扣刷題生活 力扣題1:539. 最小時間差 解題思想:將字符串的時間形式換成數字形式的時間,然后計算差值即可,最重要的是最小的值加上一天的時間加入到數組最后&#xff08…

圖文教程:stable-diffusion的基本使用教程 txt2img(多圖)

之前我介紹了SD的安裝過程,那么這篇將介紹怎么使用SD 使用模型 SD安裝好之后,我們只有一個默認的模型。這個模型很難滿足我們的繪圖需求,那么有2種方法。 1是自己訓練一個模型(有門檻)2是去網站上找一個別人練好的模…

Python3 數據類型轉換 ----20231211

# 有時候,我們需要對數據內置的類型進行轉換,數據類型的轉換,一般情況下你只需要將數據類型作為函數名即可。Python 數據類型轉換可以分為兩種:隱式類型轉換 - 自動完成 顯式類型轉換 - 需要使用類型函數來轉換 隱式類型轉換 在隱式類型轉換中,Python 會自動將一種數據類型…

windows 鏡像下載地址

HelloWindows.cn - 精校 完整 極致 Windows系統下載倉儲站

python自動化運維快速入門,python自動化運維教程

大家好,給大家分享一下python自動化運維需要掌握的技能,很多人還不知道這一點。下面詳細解釋一下。現在讓我們來看看! 面向學員 熟練使用計算機,對Windows、Linux 有一點了解從業職或在校學生 對目前從事互聯網運維,想…

附錄:已實現的多品種回測收益

聲明: 本人不進行任何投資建議,也不出售任何包括策略、算法的程序代碼。 僅作為個人的2023年開發心路總結,有任何異議可以在評論區留言,可以討論,如果你杠,那就是你對。 這世上有很多條路,每個…

12.11作業

第一個界面的頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidg…

代理IP的正確打開方式,使用IPIDEA解決性能困境

目錄 1、王婆賣瓜&#xff0c;自賣自夸2、問問2023最專業的AI機器人3、有事沒事找吒哥 一、代理IP的困境和問題1、困境一&#xff1a;所在公司網絡環境不好2、困境2&#xff1a;代理協議使用不當3、困境3&#xff1a;免費的代理服務器寬帶小4、困境4&#xff1a;代理服務器距離…

第二百零二回 介紹一個三方包bluetooth_enable_fork

文章目錄 1. 概念介紹2. 使用方法2.1 自定義主題2.2 覆蓋父主題 3. 示例代碼 我們在上一章回中介紹了圖片縮放相關的內容&#xff0c;本章回中將介紹如使用主題.閑話休提&#xff0c;讓我們一起Talk Flutter吧。 1. 概念介紹 我們在這里說的主題包含兩方面的內容&#xff1a;…

Leetcode93 復原IP地址

復原IP地址 題解1 回溯(同分割回文字符串)Tips&#xff1a;換成deque<string>tmp會更快 有效 IP 地址正好由四個整數&#xff08;每個整數位于 0 到 255 之間組成&#xff0c;且不能含有前導 0&#xff09;&#xff0c;整數之間用 ‘.’ 分隔。 例如&#xff1a;“0.1.2…

SpringCloud面試題——Sentinel

一&#xff1a;什么是Sentinel&#xff1f; Sentinel是一個面向分布式架構的輕量級服務保護框架&#xff0c;實現服務降級、服務熔斷、服務限流等功能 二&#xff1a;什么是服務降級&#xff1f; 比如當某個服務繁忙,不能讓客戶端的請求一直等待,應該立刻返回給客戶端一個備…

達索系統SOLIDWORKS 2024零件特征功能增強

SolidWorks是一款專業的三維3D設計軟件&#xff0c;功能強悍&#xff0c;支持分布式數據管理&#xff0c;支持直接處理網格數據&#xff0c;提供更多的數據的靈活性&#xff0c;使用起來高效便捷。可以幫助用戶輕松進行3D CAD設計、機械設計、鈑金設計、模擬設計、電氣設計、PD…

swing快速入門(六)

注釋很詳細&#xff0c;直接上代碼 上一篇 本篇新增內容 Gridlayout&#xff08;網格布局&#xff09; Textfield組件的最大限定長度 Panel()的默認布局方式 Gridlayout的默認布局位置 import java.awt.*;public class swing_test_4 {public static void main(String[]ar…

UE4 透明物體不渲染顯示??

問題描述&#xff1a;半透明特效在背景&#xff08;半透明材質模型&#xff09;前&#xff0c;當半透明特效開始移動的時候&#xff0c;隨著速度的加快會逐漸不渲染&#xff01; 解決辦法&#xff1a; 1.設置透明度排序 2.如果還沒效果&#xff0c;修改半透明背景模型以下材質…

visual studio 2022 IDE對C++代碼反匯編

敲一段代碼&#xff0c;在windows電腦兒上&#xff0c;忽然想用visual studio瞧瞧這段代碼的匯編長什么樣&#xff0c;怎么做呢&#xff1f; 代碼有了 #include <stdio.h> void sort(int*,int);int main(){int array[] { 977,1,32,3,99,8,7,5,23,6 };int length int(…

2023年度總結

這一年一行代碼都沒寫&#xff01;&#xff01;&#xff01; 因為我離開了這個行業&#xff0c;但我為了CSDN 這個位置沒有空缺&#xff0c;不能留下遺憾&#xff0c;寫下這篇博客吧。 強迫癥&#xff0c;完美主義。。 留下三個問題吧 當初你為什么選擇了計算機這個行業?現…

(C++)VS下sizeof(string(““))與linux-g++下sizeof(string(““))大小區別及原因剖析

個人主頁&#xff1a;Lei寶啊 愿所有美好如期而遇 說明 博主是x86平臺&#xff0c;所以下面的結果是28&#xff1b;x64平臺下是40&#xff0c;size_t變了&#xff0c;由int變long long。 接下來我們先來介紹 vs 下string的數據結構 我們可以看到有一個_Buf數組&#xff0c;…

idea java 創建 hellword 項目

1.概要 建立一個最簡單的工程&#xff0c;開始編碼。 2.試驗過程 2.1 創建的過程很簡單&#xff0c;除了第一個窗口選擇“java 模塊”&#xff0c;其他的都是下一步。 2.2 還有就是剛創建的工程什么都沒有需要&#xff0c;自己創建一個啟動的類和啟動函數。 2.3 運行和運行…

Java 內部類詳解

目錄 一. 前言 二. Java 類的創建要求 三. Java 內部類分類 3.1. 成員內部類 3.1.1. 特點 3.1.2. 語法 3.1.3. 代碼示例 3.1.4. 代碼測試 3.1.5. 關于 this 的注意事項 3.1.6. 小結 3.2. 局部內部類 3.2.1. 特點 3.2.2. 語法 3.2.3. 代碼示例 3.2.4. 代碼測試 …