如何在UI自動化測試中創建穩定的定位器?

如何在UI自動化測試中創建穩定的定位器?

  • 前言
    • 1. 避免使用絕對路徑
    • 2. 避免在定位器中使用索引
    • 3. 避免多個類名的定位器
    • 4. 避免動態和自動生成的ID
    • 5. 確保定位器唯一
    • 6. 處理隱藏元素的策略
    • 7. 謹慎使用基于文本的定位器
    • 8. 使用AI創建穩定的定位器
  • 總結

前言

  • 在自動化測試中,創建穩定的定位器至關重要。脆弱的定位器經常導致測試失敗,增加了維護難度,并可能引起不必要的錯誤;
  • 為了確保自動化測試的穩定性和可維護性,測試人員需要避免一些常見的陷阱,并根據最佳實踐設計更為可靠的定位器;
  • 本文將探索如何通過一些策略,幫助你避免這些問題,并選擇高效、穩定的定位器,從而提升測試的穩定性。

1. 避免使用絕對路徑

在XPath或CSS選擇器中,使用絕對路徑定位元素是很常見的做法,然而,這種方法的穩定性較差。當頁面布局發生變化時,絕對路徑會頻繁失效。這是因為它們依賴于元素的精確層級關系,一旦元素的層級發生調整,定位器就會失效。相反,使用相對路徑能帶來更多的好處:

  • 保持穩定性:即使頁面結構略有變化,相對定位器仍然有效,因為它們不依賴于元素的精確層級。
  • 易于閱讀和維護:如果頁面上的元素發生位置變化,相對定位器不會受到影響。

示例:

不推薦的定位器:

XPath:/html/body/div[1]/div[2]/button
CSS:html > body > div:nth-child(2) > button

推薦的定位器:

XPath://button[@data-qa='submit-button']
CSS:button[data-qa='submit-button']

2. 避免在定位器中使用索引

在XPath或CSS選擇器中使用索引進行定位,容易導致測試的不穩定性。因為當頁面上的元素被添加或刪除時,索引位置會發生變化,導致定位器失效。此外,使用索引的定位器難以理解和調試,特別是在頁面元素較多的情況下。

示例:

不推薦的定位器:

XPath://div[2]/div[5]
CSS:div:nth-child(7)

推薦的定位器:

XPath://div[contains(@class, 'input-large')]
CSS:div[class*="input-large"]

3. 避免多個類名的定位器

CSS類名經常變化,尤其是在響應式設計、框架更新和代碼重構過程中。因此,依賴多個類名作為定位器的元素會增加維護難度。為了減少這種風險,可以優先選擇使用單一、穩定的類名,或者更可靠的屬性進行定位。

示例:

不推薦的定位器:

XPath://div[@class='col-xs-1 col-sm-7 col-md-5 itemx ng-scope input-large']
CSS:div.col-xs-1.col-sm-7.col-md-5.itemx.ng-scope.input-large

推薦的定位器:

XPath://div[contains(@class, 'input-large')]
CSS:div[class*="input-large"]

4. 避免動態和自動生成的ID

對于復雜或基于組件的應用程序,框架會為元素生成動態 ID。這些ID在每次頁面加載、會話或組件順序發生變化時都會改變,這使得自動化測試中很難通過ID來準確定位元素。如果可能的話,最好使用專門為測試設計的自定義屬性,或者選擇有意義且唯一的屬性進行定位。

示例:

不推薦的定位器:

XPath://button[@class='btn-primary-1850']
CSS:button.btn-primary-1850

推薦的定位器:

XPath://button[@data-qa='submit-button']
CSS:button[data-qa="submit-button"]

5. 確保定位器唯一

非唯一的定位器會匹配頁面上的多個元素,這可能導致測試失敗。因為自動化腳本可能會選中錯誤的元素,或者與隱藏的或禁用的元素交互。確保每個定位器唯一,能精確地標識頁面上的一個元素。

解決策略:

  • 使用父子關系定位:通過元素之間的層級關系來定義元素。例如,在兩個表單中,你可以通過表單ID來定位特定的輸入框。
<!-- 第一個表單 -->
<form id="login-form"><input type="email" id="email" /><input type="password" id="password" /><button id="submit-button">登錄</button>
</form><!-- 第二個表單 -->
<form id="signup-form"><input type="email" id="email" /><input type="password" id="password" /><button id="submit-button">注冊</button>
</form>

通過定位父級元素,如//form[@id='login-form']//input[@id='email'],可以確保定位的是正確的元素。

6. 處理隱藏元素的策略

在自動化測試中,隱藏元素可能會干擾定位器的正確性。以下是一些處理隱藏元素的策略:

  1. 檢查元素屬性:檢查元素的aria-hidden屬性、display屬性等,判斷其是否隱藏。
  2. 創建基于可見性的定位器:利用唯一屬性來選擇可見元素。
<button class="submit-button hidden" data-qa="submit-button">提交</button>
<button class="submit-button" data-qa="submit-button">提交</button>

CSS選擇器:
button.submit-button:not(.hidden)
這種方式可以確保只選擇可見的按鈕。

7. 謹慎使用基于文本的定位器

基于文本的定位器,如button[text()='提交'],可以在頁面文本內容發生變化時變得不穩定。原因可能有很多,包括內容更新、頁面本地化、多語言支持等。因此,文本內容的定位器應該謹慎使用。

解決方案:

可以考慮使用預加載的測試數據策略,提前知道頁面上將出現哪些文本內容,從而創建可靠的定位器。

8. 使用AI創建穩定的定位器

AI技術已經被引入到自動化測試中,用來生成更加穩定和可靠的定位器。通過訓練模型來自動識別頁面元素和生成有效的定位器,AI能夠幫助我們避免手動選擇錯誤的元素,并提高定位器的穩定性。
示例:
在這里插入圖片描述

總結

在自動化測試中,創建穩定、唯一且可靠的定位器就像在復雜的城市中尋找最合適的路線。通過準確使用定位器,我們能夠確保測試腳本能夠穩定運行,讓測試腳本將變得更加可靠、易于維護,并且能夠適應頁面的變化。

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

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

相關文章

明日宣講 香港科技大學廣州|數據科學與分析學域碩博招生宣講會【湖南大學專場】

&#x1f4e3;&#x1f4e3;&#x1f4e3;明日宣講 香港科技大學廣州&#xff5c;數據科學與分析學域碩博招生宣講會【湖南大學專場】 時間&#xff1a;2024年12月10日&#xff08;星期二&#xff09;15:00 地點&#xff1a;湖南大學信息科學與工程學院624會議室 報名鏈接&…

BurpSuite-8(FakeIP與爬蟲審計)

聲明&#xff1a;學習視頻來自b站up主 瀧羽sec&#xff0c;如涉及侵權馬上刪除文章 感謝瀧羽sec 團隊的教學 視頻地址&#xff1a;IP偽造和爬蟲審計_嗶哩嗶哩_bilibili 一、FakeIP 1.配置環境 BurpSuite是java環境下編寫的&#xff0c;而今天的插件是python編寫的&#xff0c…

2024 一帶一路暨金磚國家技能發展與技術創新大賽【網絡安全防護治理實戰技能賽項】樣題(中職組)

2024 一帶一路暨金磚國家技能發展與技術創新大賽【網絡安全防護治理實戰技能賽項】樣題&#xff08;中職組&#xff09; 1.基礎設置和安全強化&#xff08;xxx 分&#xff09;1.3. 任務內容: 2.安全監測和預警&#xff08;xxx 分&#xff09;2.1. 任務一&#xff1a;建立目錄安…

Qt C++ 顯示多級結構體,包括結構體名、變量名和值

文章目錄 mainwindow.hmainwindow.cppstructures.hmain.cpp QTreeView 和 QStandardItemModel 來實現。以下是實現這一功能的步驟和示例代碼&#xff1a; 定義多級結構體&#xff1a; 假設你有一個多級結構體&#xff0c;如下所示&#xff1a; struct SubStruct {int subValue…

CISC和RISC的區別

CISC是什么 CISC是一種指令集設計方式&#xff0c;全程叫復雜指令集&#xff0c;這種指令設計模式包含大量的復雜指令和復雜的尋址方式&#xff0c; 以下是CISC架構的一些主要特點&#xff1a; 豐富的指令集&#xff1a;CISC處理器通常包含大量的指令&#xff0c;這些指令覆蓋…

20 設計模式之職責鏈模式(問題處理案例)

一、什么是職責鏈模式 職責鏈模式是一種行為型設計模式&#xff0c;它允許將請求沿著處理者的鏈進行傳遞&#xff0c;直到有一個處理者能夠處理它為止。換句話說&#xff0c;它將請求的發送者和接收者解耦&#xff0c;使得多個對象都有機會處理這個請求&#xff0c;從而避免了將…

linux基于systemd自啟守護進程 systemctl自定義服務傻瓜式教程

系統服務 書接上文: linux自啟任務詳解 演示系統:ubuntu 20.04 開發部署項目的時候常常有這樣的場景: 業務功能以后臺服務的形式提供,部署完成后可以隨著系統的重啟而自動啟動;服務異常掛掉后可以再次拉起 這個功能在ubuntu系統中通常由systemd提供 如果僅僅需要達成上述的場…

ros項目dual_arm_pick-place(moveit和gazebo聯合仿真)(一)

目錄 前言正文創建功能包具體代碼運行 總結 前言 dual_arm_pick-place項目中&#xff0c;實現了兩套的moveit和gazebo聯合仿真。 啟動文件分別是bringup_moveit.launch和arm_bringup_moveit.launch。 在這個項目中&#xff0c;我將代碼重新創建了一個包&#xff0c;co_simula…

MySQL 索引(B+樹)詳解

MySQL 索引&#xff08;B樹&#xff09;詳解 MySQL邏輯架構對比InnoDB與MyISAM存儲結構存儲空間可移植性、備份及恢復事務支持AUTO_INCREMENT表鎖差異全文索引表主鍵表的具體行數CRUD操作外鍵 sql優化簡介什么情況下進行sql優化sql語句執行過程sql優化就是優化索引 索引索引的優…

MySQL生產環境備份腳本

全量備份腳本&#xff0c;其中BakDir&#xff0c;ZlbakDir&#xff0c;LogFile需要自己創建 #!/bin/bash export LANGen_US.UTF-8# 指定備份目錄 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量備份目錄 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 備份日志…

HTTP multipart/form-data 請求

序言 最近在寫項目的過程中有一個需求是利用 HTTP 協議傳輸圖片和視頻&#xff0c;經過查詢方法相應的方法發現使用 multipart/form-data 的方式&#xff0c;這是最常見處理二進制文件的表單編碼類型。 ?學習了一下午&#xff0c;現在總結一下使用的方法和相關的知識點&#x…

Linux下redis環境的搭建

1.redis的下載 redis官網下載redis的linux壓縮包&#xff0c;官網地址:Redis下載 網盤鏈接&#xff1a; 通過網盤分享的文件&#xff1a;redis-5.0.4.tar.gz 鏈接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取碼: ehgj 2.redis安裝與配置 將包上傳到 /…

如何使用靜態IP代理?【詳細教程】

靜態IP地址是手動分配給設備或伺服器的固定不變的 IP。與動態 IP 地址不同&#xff0c;動態 IP 地址由 DHCP 伺服器自動分配&#xff0c;並且會隨時間而變化。??????? 如何獲取和設置靜態IP地址 一、檢查是否需要靜態IP&#xff1f; 在配置靜態 IP 之前&#xff0c;請…

監控組態軟件的構成與功能

監控組態軟件的構成包括系統開發環境、圖形界面系統、實時數據庫系統等。其功能包括數據采集與控制、人機交互界面、數據處理與存儲等。 監控組態軟件的構成&#xff1a; 系統開發環境&#xff1a;這是自動化工程設計工程師為實施其控制方案&#xff0c;在組態軟件的支持下進行…

Java 基礎之 XQuery:強大的 XML 查詢語言

一、什么是 XQuery XQuery 是一種函數式語言&#xff0c;專門用于檢索以 XML 格式存儲的信息。它負責從 XML 文檔中查找和提取元素及屬性&#xff0c;在網絡服務中有著廣泛的應用&#xff0c;比如提取信息、生成摘要報告、進行數據轉換等。 XQuery 是 W3C 設計的一種針對于 X…

day09性能測試(1)——純理論

document.querySelector(video).playbackRate 2.5 //可以寫任何數字 【沒有所謂的運氣&#x1f36c;&#xff0c;只有絕對的努力?】 目錄 1、性能測試概念 2、功能測試 vs 性能測試 3、小結&#xff08;習題&#xff09; 4、性能測試的策略 4.1 基準測試 4.2 負載測試 …

docker-3.docker權限問題

docker權限,每次開機都要重新sudo 目錄 1.簡介2.解決辦法1:當前用戶添加到docker用戶組(這個方法還是缺權限??)3.解決辦法2:臨時更改Docker socket文件權限1.簡介 Ubuntu下Docker提示permission denied (權限不足)解決辦法 安裝docker后,執行docker ps命令時提示 perm…

easyExcel實現表頭批注

背景&#xff1a; 網上大部分都不能直接使用&#xff0c;為此總結一個方便入手且可用的工具&#xff0c;用自定義注解實現 依賴包&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…

內部類和Object類

匿名對象 格式&#xff1a; 匿名對象只可以調用一次成員 &#xff1a; 1. 調用一次成員變量 &#xff1a; new 類名(實參).成員變量名&#xff1b; 2.調用一次成員方法&#xff1a; new 類名(實參).成員方法名(實參)&#xff1b; 匿名對象存在的必要&#xff1a;為了提高…

Python的3D可視化庫vedo 1-3 (visual模塊)網格對象的線和面、圖片的屬性

文章目錄 4 MeshVisual4.1 線條4.1.1 線寬和顏色4.1.2 線條渲染為管 4.2 曲面4.2.1 物體展示為實心或框架4.2.2 曲面插值4.2.3 面的剔除 4.3 紋理4.4 相機跟隨 5 ImageVisual5.1 圖片屬性5.1.1 占用內存大小5.1.2 顏色標量范圍 5.2 渲染屬性5.2.1 透明度5.2.2 亮度5.2.3 對比度…