2025年最新Python+Playwright自動化測試- 隱藏元素定位與操作

1.簡介

?對于前端隱藏元素,一直是自動化定位元素的隱形殺手,讓人防不勝防。腳本跑到隱藏元素時位置時報各種各樣的錯誤,可是這種隱藏的下拉菜單又沒有辦法避免,所以非常頭痛,這一篇只為交流隱藏元素自動化定位處理方法以及宏哥自己的一點淺薄見解。

2.什么是隱藏元素

隱藏元素,熟悉前端的或者HTML的小伙伴或者童鞋們一定不陌生,元素的屬性隱藏和顯示,主要是 type="hidden"和style="display: none;"屬性來控制的,當然了還有其他的方法控制,宏哥這里就不詳細說明了,有興趣的小伙伴或者童鞋們可以自己查一下資料。隱藏元素是什么,隱藏元素是通過屬性值 hidden="hidden"? 進行隱藏,如果前端代碼中出現這個,就代表該元素已經被隱藏了,大家也知道,如果元素隱藏了,是沒有辦法進行操作的,所謂的操作就是輸入,點擊,以及清空這些基本元素操作。如果通過selenium中的點擊進行操作元素的話,會報錯誤,沒有找到元素信息,前面也介紹了,隱藏的元素只能定位到,但是沒有辦法進行操作。

1.有兩個輸入框和一個登錄的按鈕,本來是顯示的,如下圖所示:

視頻教程:?

【已更新】B站講的最詳細的Python接口自動化測試實戰教程全集(實戰最新版)

2.接下來在登錄的元素屬性里面讓它隱藏,代碼如下所示:

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>Login</title>  <link rel="stylesheet" type="text/css" href="Login.css"/>  
</head>  
<body>  <div id="login"> <form method="post">  <input type="text" required="required" placeholder="用戶名" name="u"></input>  <input type="password" required="required" placeholder="密碼" name="p"></input>  <button id="bjhg" class="but" type="submit" style="display: none;" onclick="display_alert()">登錄</button>                </form>          </div>  
</body>
<script type="text/javascript">function display_alert(){alert("000")}
</script>  
</html>  

這樣登錄按鈕就不會顯示了,如下圖所示:

3.定位隱藏元素

?宏哥前邊說了,定位隱藏元素和普通的元素沒啥區別,接下來就來驗證下,是不是能定位到呢?其實前邊的文章中已經驗證了,可能小伙伴或者童鞋們沒有留意或者注意到,那么宏哥在這里就再次驗證一下。

3.1代碼設計

3.2參考代碼
# coding=utf-8🔥# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行# 2.注釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2024-05-15
@author: 000
000)
Project: Python+Playwright自動化測試 - 隱藏元素定位與操作
'''# 3.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("E:\\Desktop\\test\\hidden\\login.html")loginButton = page.locator("#bjhg")print(loginButton.get_attribute("name"))# 通過id定位隱藏元素,然后進行判斷(上一篇兩種方法)print(page.is_visible("#bjhg"))print(page.locator("#bjhg").is_visible())page.wait_for_timeout(1000)print("browser will be close")page.close()context.close()browser.close()
with sync_playwright() as playwright:run(playwright)
3.3運行代碼

1.運行代碼,右鍵Run'Test',就可以看到控制臺輸出,如下圖所示:

2.運行代碼后電腦端的瀏覽器的動作。如下圖所示:

運行結果可以看出,隱藏元素用普通定位方法,事實上是定位到了,和普通元素的定位沒有任何區別!不要覺得它有什么特殊之處,需特殊的定位方法。

4.操作隱藏元素

大家也都知道Palywright操作方法是通過模擬人的操作方法進行的,那么元素都看不到了,就沒有所謂的操作不操作了,如果真的想要操作,我們可以使用前邊宏哥介紹的JS語法進行操作,因為JS語法屬于直接對前端的代碼進行操作,隱藏元素在HTML代碼中是存在的,隱藏元素主要是對于前端頁面來說是不可見的。

隱藏元素可以正常定位到,只是不能操作(定位元素和操作元素是兩碼事,很多初學者或者面試官有時候分不清楚),操作元素是click,clear,sendKeys這些方法。

//點擊隱藏登錄框
loginButton = page.locator("#000")
loginButton.click()
4.1代碼設計

按照上邊的思路設計代碼非常簡單。

4.2參考代碼
# coding=utf-8🔥# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行# 2.注釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2024-05-15
@author: 000
000)
Project: Python+Playwright自動化測試- 隱藏元素定位與操作
'''# 3.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("E:\\Desktop\\test\\hidden\\login.html")loginButton = page.locator("#bjhg")# 操作隱藏元素loginButton.click()print(loginButton.get_attribute("name"))# 通過id定位隱藏元素,然后進行判斷(上一篇兩種方法)print(page.is_visible("#bjhg"))print(page.locator("#bjhg").is_visible())page.wait_for_timeout(1000)print("browser will be close")page.close()context.close()browser.close()
with sync_playwright() as playwright:run(playwright)
4.3運行代碼

1.運行代碼,右鍵Run'Test',就可以看到控制臺輸出(報錯了),如下圖所示:

2.運行代碼后電腦端的瀏覽器的動作(看到沒有觸發點擊事件,彈出窗口,最后報錯了)。如下圖所示:

隱藏元素用click()方法會拋異常“element is not visible - waiting...”這個報錯是說元素不可見,不等待中...,同樣的對“登錄”按鈕上的輸入框如果隱藏了,執行輸入(type)操作也是會報錯。

5.JS操作隱藏元素

Palywright和Selenium一樣是無法操作隱藏元素的(但是能正常定位到),本身這個框架就是設計如此,如果非要去操作隱藏元素,那就用js的方法去操作,Palywright提供了一個入口可以執行js腳本。 js和Palywright不同,只有頁面上有的元素(在dom里面的),都能正常的操作,接下來用js試試吧!

那就繼續完善上邊可以定位到但是不能操作的代碼。

5.1代碼設計

5.2參考代碼
# coding=utf-8🔥# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行# 2.注釋:包括記錄創建時間,創建人,項目名稱。
# 3.導入模塊
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("E:\\Desktop\\test\\hidden\\login.html")loginButton = page.locator("#000")# 操作隱藏元素js = "document.getElementById('000').click()"page.wait_for_timeout(10000)page.evaluate(js)print(loginButton.get_attribute("name"))# 通過id定位隱藏元素,然后進行判斷(上一篇兩種方法)print(page.is_visible("#bjhg"))print(page.locator("#bjhg").is_visible())page.wait_for_timeout(1000)print("browser will be close")page.close()context.close()browser.close()
with sync_playwright() as playwright:run(playwright)
5.3運行代碼

1.運行代碼,右鍵Run'Test',就可以看到控制臺輸出,如下圖所示:

2.運行代碼后電腦端的瀏覽器的動作(觸發點擊事件,彈出窗口,運行完之后,會發現頁面正常的點擊,彈出到關注宏哥的公眾號窗口。)。如下圖所示:

6.小結

6.1簡化代碼

百度搜到的可能方法是先用js去掉hidden屬性,再用selenium操作,這個有點多此一舉,你既然都已經會用js了,何必不一次性到位直接click呢?而且宏哥發現之前講解的也是這種方法,有點“脫了褲子排氣”。在這里宏哥糾正一下,直接一步到位哈!

6.2面試提問

如果面試官想問的是定位后操作隱藏元素的話,本質上說這個問題就是毫無意義的,web自動化的目的是模擬人的正常行為去操作。 如果一個元素頁面上都看不到了,你人工也是無法操作的是不是?人工都不能操作,那你自動化的意義又在哪呢?所以這個只是為了單純的考察面試者處理問題的能力,沒啥實用性!(面試造飛機,進去擰螺絲) 既然面試官這么問了,那就想辦法回答上給個好印象吧!記住一定不要回懟面試官,否則你的這次面試就涼了啊!!!

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

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

相關文章

跨境電商稅務解決之道:在合規航道上駛向全球市場

首席數據官高鵬律師數字經濟團隊創作AI輔助當某3C品類跨境賣家因未同步境內交易流水被處以20萬元罰款&#xff0c;當某服飾品牌因歐盟增值稅申報疏漏導致貨物滯留港口&#xff0c;當東南亞市場的“低稅率紅利”變成“稅務稽查雷區”——跨境電商的黃金時代里&#xff0c;稅務合…

(6)機器學習小白入門 YOLOv:圖片的數據預處理

(1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv &#xff1a;圖片標注實操手冊 (5)機器學習小白入門 YOLOv&#xff1a;…

康謀新聞 | 康謀加入ASAM組織,全球首個ASIL-D認證自動駕駛仿真平臺aiSim引領安全新標桿

康謀新聞康謀科技正式加入全球汽車標準化組織 ASAM&#xff08;Association for Standardization of Automation and Measuring Systems&#xff09;&#xff0c;成為其正式會員單位&#xff01;ASAM作為國際汽車行業標準化領域的權威機構&#xff0c;致力于推動仿真、測試及數…

《PyQt6-3D:開啟Python 3D開發新世界》

一、引言 在 Python 的廣袤開發世界中&#xff0c;3D 開發領域正以驚人的速度蓬勃發展&#xff0c;為眾多領域帶來了前所未有的創新與變革。從沉浸式的游戲體驗到逼真的虛擬現實場景&#xff0c;從精準的工業設計模擬到生動的影視動畫制作&#xff0c;3D 技術的身影無處不在&am…

第一屆OpenHarmonyCTF--Crypto--WriteUp

第一屆OpenHarmonyCTF–Crypto–WriteUp Ea5y_rsa題目附件解壓后尋找有用的源代碼&#xff1a; // RsaUtil import { cryptoFramework } from kit.CryptoArchitectureKit; import { buffer } from kit.ArkTS;class RsaUtil{private keyPair: cryptoFramework.KeyPair | null n…

Copilot 在 VS Code 中的免費替代方案

## 引言隨著 GitHub Copilot 推出付費 Pro 版&#xff0c;許多開發者開始尋找免費替代方案。本文精選 7 款 2025 年主流免費 AI 編程工具&#xff0c;涵蓋不同使用場景和編程語言需求。## 主流替代方案對比| 工具名稱 | 核心優勢 | 支持語…

視頻能轉成gif動圖嗎?怎么弄?

在一些社交平臺中&#xff0c;分享短小有趣的片段。GIF自動循環播放&#xff0c;無需用戶點擊。兼容性高&#xff0c;幾乎所有平臺都支持直接預覽。例子&#xff1a;將電影/綜藝的搞笑片段轉為GIF傳播。游戲精彩操作截取為GIF分享。這就需要我們掌握把視頻轉換成gif動圖的技術&…

【Pyhton】Json.dump 語法說明

目錄json.dump() 的語法參數說明1. obj2. fp3. skipkeys4. ensure_ascii5. check_circular6. allow_nan7. cls8. indent9. separators10. default11. sort_keys**示例代碼****基本用法**使用 indent 和 separators使用 default 參數總結json.dump() 是 Python 中 json 模塊用于…

LangGraph-2-interrupt 流程中斷

interrupt 是 LangGraph 中一個強大的流程控制機制&#xff0c;允許在狀態機執行過程中根據特定條件中斷當前流程并跳轉到其他節點。這種機制特別適用于處理異常情況、用戶中斷或特定業務規則的觸發。在 LangGraph 中&#xff0c;interrupt_before 和 interrupt_after 是兩個強…

前綴和|差分

題目&#xff1a;MT2047距離平方和你有&#x1d45b;n個點&#xff0c;請編寫一個程序&#xff0c;求這&#x1d45b;n個點的距離的平方和。格式輸入格式&#xff1a;第一行&#xff1a;一個整數&#x1d45b;&#xff08;0≤&#x1d45b;≤100000&#xff09;n&#xff08;0≤…

x86架構CPU市場格局

x86架構的CPU市場是全球處理器市場的核心&#xff0c;涵蓋PC&#xff08;桌面端與移動端&#xff09;、服務器和超算等領域&#xff0c;主要玩家為英特爾&#xff08;Intel&#xff09;和AMD。以下基于最新數據分析市場格局及各領域份額&#xff0c;輔以國產廠商動態。 1. 總體…

【Swift開發】屏蔽NSSecureCoding頻繁警告

解決 iOS 開發中 NSSecureCoding 警告的最佳實踐 問題背景 在開發 Mac 應用時&#xff0c;我遇到了一個令人困擾的問題&#xff1a;Xcode 控制臺不斷輸出 NSSecureCoding allowed classes list contains [NSObject class] 相關的警告信息。這些警告雖然不影響應用功能&#xff…

SpringBoot實現MCP

前言 之前的文章都是各種使用MCP,自從有了MCP我們立馬感受到大模型真的可以幫我們干活了&#xff0c;實際上當我們想把企業內部的業務向AI方向轉型的話主要就是實現MCP&#xff0c;另外加上多Agent在流程上的控制和自有的知識庫這就可以滿足企業80%的需求了&#xff0c;剩下的2…

windows對\和/敏感嗎?

在Windows系統中&#xff0c;路徑分隔符\和/的敏感性需要分情況來看&#xff1a; 1. 文件系統層面 Windows文件系統&#xff08;如NTFS、FAT32&#xff09;不區分\和/。 例如&#xff0c;以下路徑是等效的&#xff1a; C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

緩存穿透與擊穿多方案對比與實踐指南

緩存穿透與擊穿多方案對比與實踐指南 問題背景介紹 在高并發的分布式系統中&#xff0c;緩存是提升讀寫性能的重要組件。但在實際生產環境中&#xff0c;經常會遇到兩類問題&#xff1a; 緩存穿透&#xff1a;客戶端頻繁請求不存在的數據&#xff0c;導致請求直達數據庫&#x…

【音視頻】HTTP協議介紹

參考博客&#xff1a;https://cloud.tencent.com/developer/article/2183902 一、HTTP協議概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 即 超文本傳輸協議&#xff0c;它是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP 是萬維網&#xff08…

神經網絡基礎及API使用詳解

一、神經網絡概述神經網絡是一種模仿生物神經網絡結構和功能的計算模型&#xff0c;它由大量的人工神經元相互連接構成&#xff0c;能夠通過調整內部大量節點之間相互連接的關系&#xff0c;從而達到處理信息的目的。1.1 神經網絡的基本組成輸入層&#xff1a;接收原始數據隱藏…

分桶表的介紹和作用

一、分桶表的基本介紹1、什么是分桶表&#xff1f;分桶表主要是用于分文件的&#xff0c;在建表的時候&#xff0c;指定按照那些字段執行分桶操作&#xff0c;并可以設置需要分多少個桶&#xff0c;當插入數據的時候&#xff0c;執行MR的分區的操作&#xff0c;將數據分散各個分…

HighReport報表工具開始支持BS報表設計器

HighReport報表工具同時支持c/s報表設計器和b/s報表設計器&#xff0c;大部分情況下使用c/s報表設計器&#xff0c;在某些業務場景或者用戶自己簡單修改報表模板&#xff0c;可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

數據結構--堆的實現

目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…