selenium定位網頁元素

1、概述? ? ? ??

????????在使用 Selenium 進行自動化測試時,定位網頁元素是核心功能之一。Selenium 提供了多種定位方法,每種方法都有其適用場景和特點。以下是通過 idlinkTextpartialLinkTextnametagNamexpathclassNamecssSelector 定位元素的詳細說明。

2、通過?id?定位

id 是 HTML 元素的唯一標識符,通常是最高效和最簡單的定位方式。

element = driver.find_element(By.ID, "element_id")
  • 特點id 必須是唯一的,因此定位速度快且準確。

  • 適用場景:當元素有唯一的 id 屬性時。

3、通過?linkText?定位

linkText 是通過鏈接的完整文本內容來定位元素。

element = driver.find_element(By.LINK_TEXT, "完整鏈接文本")
  • 特點:只能用于定位 <a> 標簽(超鏈接)。

  • 適用場景:當鏈接文本是唯一的,且需要精確匹配時。

4、通過?partialLinkText?定位

partialLinkText 是通過鏈接文本的一部分來定位元素。

element = driver.find_element(By.PARTIAL_LINK_TEXT, "部分鏈接文本")
  • 特點:比 linkText 更靈活,只需匹配部分文本即可。

  • 適用場景:當鏈接文本較長,或者部分文本是動態生成時。

5、通過?name?定位

name 是通過元素的 name 屬性來定位。

element = driver.find_element(By.NAME, "element_name")
  • 特點name 通常用于表單元素(如輸入框、按鈕等)。

  • 適用場景:當元素有唯一的 name 屬性時。

6、通過?tagName?定位

tagName 是通過元素的 HTML 標簽名稱來定位。

element = driver.find_element(By.TAG_NAME, "div")
  • 特點:定位所有具有相同標簽的元素。

  • 適用場景:通常用于獲取一組元素,然后通過其他方法進一步篩選。

7、通過?className?定位

className 是通過元素的 class 屬性來定位。

element = driver.find_element(By.CLASS_NAME, "class_name")
  • 特點class 屬性可以有多個值,但 find_element 只能匹配其中一個值。

  • 適用場景:當元素有唯一的 class 屬性時。

8、通過?cssSelector?定位

cssSelector 是通過 CSS 選擇器來定位元素。

element = driver.find_element(By.CSS_SELECTOR, "input#element_id")
  • 特點

    • 支持 ID、類名、屬性、偽類等多種選擇器。

    • 性能通常優于 xpath

  • 適用場景:當需要使用復雜的 CSS 選擇器時,如定位具有特定屬性的元素。

9、通過?xpath?定位

xpath 是一種強大的定位方法,可以通過路徑表達式來定位元素。

element = driver.find_element(By.XPATH, "//input[@id='element_id']")
  • 特點

    • 支持相對路徑和絕對路徑。

    • 可以通過屬性、位置、文本等多種方式定位。

  • 適用場景:當其他定位方法無法滿足需求時,xpath 是最靈活的選擇。

XPath 的基本語法

XPath 使用路徑表達式來定位節點。以下是一些常用的語法規則:

  1. /

    • 表示從根節點開始定位。

    • 例如:/html/body/div?表示從根節點?<html>?開始,逐級找到?<body>?下的?<div>

  2. //

    • 表示從任意層級開始查找。

    • 例如://div?表示查找文檔中所有的?<div>?元素。

  3. [@屬性名='值']

    • 通過元素的屬性來定位。

    • 例如://input[@id='username']?表示查找?id?屬性為?username?的?<input>?元素。

  4. text()

    • 通過元素的文本內容來定位。

    • 例如://button[text()='Submit']?表示查找文本內容為?Submit?的?<button>?元素。

  5. *

    • 通配符,表示任意元素。

    • 例如://div/*?表示查找?<div>?下的所有子元素。

  6. []

    • 用于添加條件。

    • 例如://div[@class='example'][1]?表示查找?class?為?example?的第一個?<div>

  7. ..

    • 表示父節點。

    • 例如://input[@id='username']/..?表示查找?id?為?username?的?<input>?的父元素。

  8. and?/?or

    • 用于組合多個條件。

    • 例如://input[@id='username' and @type='text']?表示查找?id?為?username?且?type?為?text?的?<input>

XPath 的示例

<html><body><div id="header"><h1>Welcome</h1></div><div class="content"><form id="loginForm"><input type="text" id="username" name="username" placeholder="Username"><input type="password" id="password" name="password" placeholder="Password"><button type="submit">Login</button></form></div></body>
</html>

1.?定位?<h1>?元素

  • XPath:?/html/body/div/h1

  • 解釋:從根節點?<html>?開始,逐級找到?<body>?下的?<div>,再找到?<h1>

2.?定位?id?為?username?的?<input>?元素

  • XPath:?//input[@id='username']

  • 解釋:查找任意層級下的?<input>?元素,且?id?屬性為?username

3.?定位?class?為?content?的?<div>?下的?<button>?元素

  • XPath:?//div[@class='content']//button

  • 解釋:查找?class?為?content?的?<div>,然后在其任意子層級中找到?<button>

4.?定位文本內容為?Login?的?<button>?元素

  • XPath:?//button[text()='Login']

  • 解釋:查找任意層級下的?<button>?元素,且文本內容為?Login

5.?定位?id?為?loginForm?的表單下的所有?<input>?元素

  • XPath:?//form[@id='loginForm']//input

  • 解釋:查找?id?為?loginForm?的?<form>,然后在其任意子層級中找到所有?<input>

6.?定位第一個?<input>?元素

  • XPath:?(//input)[1]

  • 解釋:查找文檔中所有的?<input>?元素,然后選擇第一個。

7.?定位?type?為?password?的?<input>?元素

  • XPath:?//input[@type='password']

  • 解釋:查找任意層級下的?<input>?元素,且?type?屬性為?password

10、總結

  • id:最高效,適用于唯一標識。

  • linkTextpartialLinkText:適用于超鏈接。

  • name:適用于表單元素。

  • tagName:適用于獲取一組元素。

  • xpath:最靈活,適用于復雜定位。

  • className:適用于具有唯一類名的元素。

  • cssSelector:性能好,適用于復雜選擇器。

在實際使用中,可以根據元素的特點和頁面結構選擇最適合的定位方法。

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

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

相關文章

51單片機(STC89C52)開發:點亮一個小燈

軟件安裝&#xff1a; 安裝開發板CH340驅動。 安裝KEILC51開發軟件&#xff1a;C51V901.exe。 下載軟件&#xff1a;PZ-ISP.exe 創建項目&#xff1a; 新建main.c 將main.c加入至項目中&#xff1a; main.c:點亮一個小燈 #include "reg52.h"sbit LED1P2^0; //P2的…

29. C語言 可變參數詳解

本章目錄: 前言可變參數的基本概念可變參數的工作原理如何使用可變參數 示例&#xff1a;計算多個整數的平均值解析&#xff1a; 更復雜的可變參數示例&#xff1a;打印可變數量的字符串解析&#xff1a; 總結 前言 在C語言中&#xff0c;函數參數的數量通常是固定的&#xff…

RoboMaster- RDK X5能量機關實現案例(一)識別

作者&#xff1a;SkyXZ CSDN&#xff1a;https://blog.csdn.net/xiongqi123123 博客園&#xff1a;https://www.cnblogs.com/SkyXZ 在RoboMaster的25賽季&#xff0c;我主要負責了能量機關的視覺方案開發&#xff0c;目前整體算法已經搭建完成&#xff0c;實際方案上我使用的上…

shell腳本批量修改文件名之方法(The Method of Batch Modifying File Names in Shell Scripts)

shell腳本批量修改文件名方法 我們可以使用Shell腳本來實現這個功能。Shell腳本是一種用于自動化任務的編程語言&#xff0c;它可以在Unix/Linux操作系統上運行。在這個腳本中&#xff0c;我們將使用一個for循環來遍歷目標目錄下的所有文件&#xff0c;并使用mv命令將每個文件…

MySQL誤刪數據怎么辦?

文章目錄 1. 從備份恢復數據2. 通過二進制日志恢復數據3. 使用數據恢復工具4. 利用事務回滾恢復數據5. 預防誤刪數據的策略總結 在使用MySQL進行數據管理時&#xff0c;誤刪數據是一個常見且具有高風險的操作。無論是因為操作失誤、系統故障&#xff0c;還是不小心執行了刪除命…

RDK X5運行DeepSeek-R1-Distill-Qwen-1.5B,體驗長思維鏈的語言大模型!

簡介 本文介紹了在RDK X5上&#xff0c;如何從HuggingFace的原始模型權重&#xff08;safetensors&#xff09;經過量化和編譯&#xff0c;的到llama.cpp推理框架所需要的GGUF格式的模型&#xff0c;然后演示了如何使用llama.cpp運行量化后的DeepSeek-R1-Distill-Qwen-1.5B模型…

SQL UCASE() 函數詳解

SQL UCASE() 函數詳解 在SQL中&#xff0c;UCASE() 函數是一個非常有用的字符串處理函數&#xff0c;它可以將字符串中的所有小寫字母轉換為大寫字母。本文將詳細介紹UCASE() 函數的用法、語法、示例以及其在實際應用中的優勢。 一、UCASE() 函數簡介 UCASE() 函數是SQL標準…

【Proteus仿真】【51單片機】簡易計算器系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、LCD1602液晶顯示 2、矩陣按鍵? 3、可以進行簡單的加減乘除運算 4、最大 9999*9999 二、使用步驟 系統運行后&#xff0c;LCD1602顯示數據&#xff0c;通過矩陣按鍵…

留學畢業論文如何利用不同問題設計問卷

在留學畢業論文的寫作中&#xff0c;我們經常會遇到各種問題&#xff0c;例如選擇合適的問題&#xff0c;選擇合適的研究方法&#xff0c;以及設計合理的研究過程。然而在完成留學畢業論文的過程中&#xff0c;我們往往會在研究設計這里卡住。即使我們選準了研究問題和研究方法…

深度學習在金融風控中的應用:突破傳統模型的瓶頸

深度學習在金融風控中的應用:突破傳統模型的瓶頸 金融風險控制(簡稱“風控”)是現代金融體系中至關重要的一環,關系到金融機構的穩定性、客戶的安全以及整體經濟的健康運行。近年來,隨著深度學習的迅猛發展,傳統的風控模型正面臨被顛覆的挑戰,新的技術手段和思維方式正…

Python中的函數(上)

Python中的函數是非常重要的編程概念&#xff0c;以下是詳細的介紹&#xff1a; 函數定義基礎 在Python中&#xff0c;函數是組織好的、可重復使用的代碼塊&#xff0c;用于執行特定任務。通過函數&#xff0c;我們可以將復雜的程序分解為較小的、更易管理的部分&#xff0c…

圖漾相機搭配VisionPro使用簡易教程

文章目錄 1.下載并安裝VisionPro軟件2.下載PercipioCameraForVisionPro軟件包3.軟件部署4.測試流程4.1 遍歷VisionPro SDK支持的參數4.2 設置示例4.2.1_cameraSingle.SetTriggerMode4.2.2 _cameraSingle.SetRegistration4.2.3_cameraSingle.SetInt4.2.4 _cameraSingle.GetInt4.…

新版IDEA創建數據庫表

這是老版本的IDEA創建數據庫表&#xff0c;下面可以自己勾選Not null&#xff08;非空),Auto inc&#xff08;自增長),Unique(唯一標識)和Primary key&#xff08;主鍵) 這是新版的IDEA創建數據庫表&#xff0c;Not null和Auto inc可以看得到&#xff0c;但Unique和Primary key…

(非技術)從一公里到半程馬拉松:我的一年跑步經歷

在24年初&#xff0c;從來不運動的我&#xff0c;連跑步一公里都不能完成。而在一年之后的2025年的1月1日&#xff0c;我參加了上海的蒸蒸日上迎新跑&#xff0c;完成了半程馬拉松。雖然速度不快&#xff0c;也并不是什么特別難完成的事情&#xff0c;但對我來說還是挺有意義的…

論“0是不存在的”

你看這又是一個悖論的例子。 你會說&#xff0c;既然你都寫出來了“0”&#xff0c;咋還能說它不存在&#xff1f; 總是刷到謝爾頓說零不存在那個視頻。可能有些小伙伴不解其意&#xff0c;為啥那小謝爾頓堅持說0不存在。我這說一個最簡單的視角&#xff0c;怎么理解這句話。…

電商系統-用戶認證(三)基于公鑰解析JWT令牌

一、 基于私鑰生成jwt令牌 步驟&#xff1a; 導入認證服務 將shangcheng_user_auth工程導入到項目中去&#xff0c;如下圖 啟動eureka&#xff0c;再啟動認證服務 3&#xff09; 認證服務中創建測試類 public class CreateJwtTest { ? /**** 創建令牌測試*/Testpublic voi…

單路由及雙路由端口映射指南

遠程登錄總會遇到登陸不上的情況&#xff0c;可能是訪問的大門沒有打開哦&#xff0c;下面我們來看看具體是怎么回事&#xff1f; 當軟件遠程訪問時&#xff0c;主機需要兩個條件&#xff0c;一是有一個唯一的公網IP地址&#xff08;運營商提供&#xff09;&#xff0c;二是開…

Spring AI 在微服務中的應用:支持分布式 AI 推理

1. 引言 在現代企業中&#xff0c;微服務架構 已成為開發復雜系統的主流方式&#xff0c;而 AI 模型推理 也越來越多地被集成到業務流程中。如何在分布式微服務架構下高效地集成 Spring AI&#xff0c;使多個服務可以協同完成 AI 任務&#xff0c;并支持分布式 AI 推理&#x…

Kafak 單例生產者實現-C#操作

前面寫了一篇入門操作的文章,因為工作需要,簡單修改了下如何實現單例生產者。 Kafka入門-C#操作_c# kafka-CSDN博客文章瀏覽閱讀1.6k次,點贊20次,收藏9次。2).報錯:“kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state…

2024年記 | 凜冬將至

放棄幻想&#xff0c;準備斗爭&#xff01; 考研or就業&#xff1f; 上大學以來&#xff0c;考研上名校在我的心里一直是一顆種子&#xff0c;2024年初&#xff0c;當時的想法是考研和就業兩手抓。買了張宇的高數現代&#xff0c;想要死磕&#xff01; 也記了挺多筆記... 如果…