關于selenium 元素定位的淺度解析

一、By類單一屬性定位

元素名稱

描述

Webdriver API

id

id屬性

driver.find_element(By.ID, "id屬性值")

name

name屬性

driver.find_element(By.NAME, "name屬性值")

class_name

class屬性

driver.find_element(By.CLASS_NAME, "class_name屬性值")

tag_name

標簽名

driver.find_element(By.TAG_NAME, "標簽名")

link_text

a元素的文本內容-精準匹配

driver.find_element(By.LINK_TEXT, "超鏈接全部文本值")

partial_link_text

a元素的文本內容-模糊匹配

driver.find_element(By.PARTIAL_LINK_TEXT, "超鏈接部分文本值")

  1. id定位
  • 特點:id定位 是通過元素的id屬性來定位元素的;在整個HTML文檔中 id 屬性必須是唯一的。(APP中id屬性不唯一)
  • 前提:元素有id屬性
  • 說明:當目標元素存在 id屬性值時,優先使用 id 方法定位元素,前提id不是動態變化的。
  1. name定位
  • 特點:name定位是根據元素name屬性來定位的;在HTML文檔中 name 的屬性值是可以重復的

注意:當頁面內有多個元素的特征值是相同的時候,定位元素的方法執行時,默認只會獲取第一個符合要求的特征對應的元素。

因此,定位元素時需要盡量保證使用的特征值能夠代表目標元素在當前頁面的唯一性。

  1. class name 定位
  • 特點:class_name定位是根據元素class屬性值來定位元素;HTML通過使用class來定義元素的樣式,class屬性值可以有多個。
  • 前提:元素有class屬性
  • 注意:在使用 class name 方法時,如果**class**有多個屬性值,只能使用其中的一個。

比如:class="panel-body has-table scrollbar-hover",只能使用其中一個值panel-body或者has-table或者scrollbar-hover,中間的空格代表間隔符,表示class有多個屬性。

  1. tag name 定位
  • 特點:tag_name定位 是通過**標簽名**來定位的;HTML本質就是由不同的tag組成,每一種標簽一般在頁面中存在多個,所以不方便進行精確定位,一般很少使用。
  • 說明:如果存在多個相同的標簽,則返回符合條件的 第一個標簽
  • 由于標簽名的重復性過高,一般做精確定位時,都不會選擇tag_name
  1. link test 定位
  • 特點:link_text定位是只針對超鏈接元素(< a>標簽</a >,精確匹配),通過超鏈接的文本內容來定位元素的(超鏈接文本必須是唯一,不能有空格),并且需要輸入超鏈接的全部文本信息。
  • 案例:element = driver.find_elementt("link test", '訪問新浪網站')
  1. partial link text定位
  • 特點:只針對超鏈接元素,需要輸入超鏈接的部分文本信息。
  • 案例:element = driver.find_element("partial link text", '訪問新浪')
  • 說明:partial link text:a標簽通過【模糊匹配】超鏈接文本,定位元素超鏈接文本必須是唯一。

二、xpath定位表達式匯總

2.1 xpath術語

2.1.1 節點

  1. XPath中的節點主要有以下幾種類型: 元素節點 - 表示XML或HTML中的一個元素(也就是標簽),如<book>。 屬性節點 - 表示元素的一個屬性,如<book category="computer">中的category屬性。 文本節點 - 表示元素或屬性中的文本內容,如<book>Java</book>中的Java。 文檔節點 - 表示整個文檔,作為文檔樹的根節點。 命名空間節點 - 表示XML命名空間,通常是文檔的子節點。
  2. 定位節點的方式: 通過路徑表達式,如book節點://book 通過節點關系,如parent、child等 通過順序關系,如following-sibling等

2.1.2 基本值

基本值(Atomic Value)指的是不能再分解的單個值,XML中的一些基本值包括:

  • 字符串(String)
  • 整數(Integer)
  • 小數(Decimal)
  • 布爾值(Boolean)
  • 日期時間(Date/Time)

基本值就是XML文檔中的終端節點,不再包含子元素。

例如:

<person><name>John</name><age>30</age>
</person>

上述XML中:

  • name和age元素中的"John"和"30"就是基本值
  • 而person不是基本值,因為它還包含子元素

基本值有以下特點:

  • 不可再分解為更小單元
  • 沒有屬性或子元素
  • 包含實際數據

2.2 節點關系

2.2.1父(Parent)

每個元素以及屬性都有一個父。

在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.2子(Children)

元素節點可有零個、一個或多個子。

在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.3同胞(Sibling)

擁有相同的父的節點

在下面的例子中,title、author、year 以及 price 元素都是同胞:

<book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book>

2.2.4先輩(Ancestor)

某節點的父、父的父,等等。

在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:

<bookstore><book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book></bookstore>

2.2.5后代(Descendant)

某個節點的子,子的子,等等。

在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:

<bookstore><book><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price>
</book></bookstore>

2.3 xpath定位表達式匯總

?

三、CSS選擇器策略匯總

基本介紹:

  • CSS(Cascading Style Sheets)是一種語言,它用來描述HTML元素的顯示樣式;
  • 在CSS中,選擇器是一種模式,用于選擇需要添加樣式的元素;
  • 在Selenium中也可以使用這種選擇器來定位元素。
  • 在Selenium中推薦使用CSS定位(前提得會😂),因為它比XPath定位速度要快。

?

四、元素定位策略總結

  • 如果元素有明確id,name,class屬性時,使用對應的基本定位方法。
  • 如果沒有id,name,class屬性時,或id,name,class屬性是動態/不唯一的時候,使用XPath和css_selector定位。
  • 定位頁面超鏈接使用link_text和partial_link_text定位
  • 可使用XPath和css_selector定位的時候,優先使用css_selector。css_selector定位的速度和效率比Xpath高。
  • 沒有最好的,只有最精簡的,怎么簡單怎么來。

五、selenium相關總結腦圖大全

附帶捎上一份selenium相關總結腦圖

?

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

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

相關文章

25考研:跨專業考研難嗎?

25考研&#xff1a;跨專業考研難嗎&#xff1f; 嘉興校址&#xff1a;嘉興市南湖區中山東路205號嘉華廣場4樓 &#xff08;建國珠寶城旁&#xff09;上元教育 海寧校址&#xff1a;海寧市西山路832號金貿大廈11樓1101號上元教育 桐鄉校址&#xff1a;桐鄉市東悅路吾悅廣場156號…

MAUI+Blazor:隱藏標題欄和問題

文章目錄 前言相關文章代碼問題有必要解決嗎&#xff1f; 前言 最近在研究MAUIBlazor開發&#xff0c;發現一個問題&#xff0c;原生的的標題欄實在是太丑了。 相關文章 MAUI桌面端標題欄設置和窗口調整 MAUI Windows How to completely hide the TitleBar? #15142 MAUI …

Chrome開發者工具介紹

Chrome開發者工具介紹 前言1 打開DevTools2 命令菜單3 Elements面板ConsoleJavaScript調試Network 前言 Chrome開發者工具是谷歌瀏覽器自帶的一款開發者工具&#xff0c;它可以給開發者帶來很大的便利。常用的開發者工具面板主要包含Elements面板、Console面板、Sources面板、…

數據結構——時間復雜度和空間復雜度

1.算法效率 2.時間復雜度 3.空間復雜度 4. 常見時間復雜度以及復雜度oj練習 1.算法效率 1.1 如何衡量一個算法的好壞 如何衡量一個算法的好壞呢&#xff1f;比如對于以下斐波那契數的計算 long long Fib(int N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); }我們看到…

2023 互聯網大廠薪資大比拼

最近整理了33家互聯網大廠的薪資情況。可以看出來&#xff0c;大部分互聯網大廠薪資還是很不錯的&#xff0c;騰訊、阿里、美團、百度等大廠平均月薪超過30k&#xff0c;其他互聯網大廠平均月薪也都在25k以上。01020304050607080910111213141516171819202122232425262728293031…

yo!這里是STL::list類簡單模擬實現

目錄 前言 重要接口實現 框架 默認成員函數 迭代器&#xff08;重點&#xff09; 1.引言 2.list迭代器類實現 3.list類中調用實現 增刪查改 后記 前言 我們知道&#xff0c;stl中的vector對應數據結構中的順序表&#xff0c;string類對應字符串&#xff0c;而今天要…

Unity C# 之 Http 獲取網頁的 html 數據,并去掉 html 格式等相關信息

Unity C# 之 Http 獲取網頁的 html 數據&#xff0c;并去掉 html 格式等相關信息 目錄 Unity C# 之 Http 獲取網頁的 html 數據&#xff0c;并去掉 html 格式等相關信息 一、簡單介紹 二、實現原理 三、注意事項 四、效果預覽 五、關鍵代碼 一、簡單介紹 Unity中的一些知…

Linux網絡基礎(中)

目錄&#xff1a; 再談“協議” HTTP協議 認識URL&#xff1a; urlnecode和urldecode HTTP協議格式&#xff1a; HTTP的方法&#xff1a; 簡易HTTP服務器&#xff1a; 傳輸層 再談端口號&#xff1a; 端口號范圍劃分&#xff1a; netstat&#xff1a; pidof&…

Mybatis三劍客(一)在springboot中手動使用Mybatis

1、pom.xml中引入依賴【注意根據自己的spring boot版本選擇對應的mysql和mybatis版本】 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.mybatis…

Ubantu安裝Docker(完整詳細)

先在官網上查看對應的版本:官網 然后根據官方文檔一步一步跟著操作即可 必要準備 要成功安裝Docker Desktop&#xff0c;必須&#xff1a; 滿足系統要求 擁有64位版本的Ubuntu Jammy Jellyfish 22.04&#xff08;LTS&#xff09;或Ubuntu Impish Indri 21.10。 Docker Deskto…

Redis基礎命令大全

這里寫目錄標題 第一章、Redis 命令大全1.1&#xff09;通用命令語法&#xff1a;ping語法&#xff1a;dbsize語法&#xff1a;select db語法&#xff1a;flushdb語法&#xff1a;exit 或 quit語法&#xff1a;redis-cli 1.2&#xff09;Redis 的 Key 的操作命令語法&#xff1…

【Java基礎】- JVM之Dump文件詳解

Java基礎 - JVM之Dump文件詳解 文章目錄 Java基礎 - JVM之Dump文件詳解一、什么是Dump三、為什么需要Dump分析思路 四、Dump記錄哪些內容4.1 Java dump 文件的格式和內容段格式行格式 4.2 常用分類heap dump和thread dumpheap dumpthread dump 五、如何生產Dump文件5.1 獲取hea…

Elasticsearch之kibana相關命令

1.中文分詞器相關命令 2.拼音分詞器相關命令

服務器之LNMP

lnmp的構成 L&#xff1a;linux系統,操作系統。 N&#xff1a;nginx網站服務&#xff0c;前端,提供前端的靜態頁面服務。同時具有代理,轉發的作用。 轉發&#xff1a;主要是轉發后端請求。轉發到PHP。nginx沒有處理動態資源的功能,他有可以支持轉發動態請求的模塊。 M&…

正則表達式練習

正則表達式練習 工具目的代碼運行結果 工具 pycharm 目的 https://www.77xsw.cc/fenlei/1_1/&#xff1a;第一頁的網址 https://www.77xsw.cc/fenlei/1_2/&#xff1a;第二頁的網址 ... https://www.77xsw.cc/fenlei/1_10/&#xff1a;第十頁的網址 代碼 import requests im…

REDIS主從配置

目錄 前言 一、概述 二、作用 三、缺點 四、redis主從復制的流程 五、搭建redis主從復制 總結 前言 Redis的主從配置是指在Redis集群中&#xff0c;將一個Redis節點配置為主節點&#xff08;master&#xff09;&#xff0c;其他節點配置為從節點&#xff08;slave&#xff09;…

【數據結構?堆】堆排序(理論基礎)

堆的定義  ? 堆是一個完全二叉樹   –所有葉子在同一層或者兩個連續層   –最后一層的結點占據盡量左的位置  ? 堆性質   –為空, 或者最小元素在根上   –兩棵子樹也是堆 存儲方式  ? 最小堆的元素保存在heap[1..hs]內   – 根在heap[1]   –K的左兒子是2k,…

細胞——求細胞數量 C++詳解

細胞——求細胞數量 C詳解 求細胞數量題目描述輸入格式輸出格式樣例樣例輸入樣例輸出 提示數據規模與約定 解法代碼 求細胞數量 題目描述 一矩形陣列由數字 0 0 0 到 9 9 9 組成&#xff0c;數字 1 1 1 到 9 9 9 代表細胞&#xff0c;細胞的定義為沿細胞數字上下左右若還…

vue3中使用component動態組件常見問題

一. 在vue3中使用動態組件問題警告處理 1. 代碼如下 <template><div v-for"(item, index) in navItems" :key"index"><component :is"item.component" :key"item.gameId"></component></div> </te…

nbcio-boot升級springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json問題

升級后&#xff0c;運行顯示項目的時候出現下面錯誤 2023-08-12 10:57:39.174 [http-nio-8080-exec-3] [1;31mERROR[0;39m [36morg.jeecg.common.aspect.DictAspect:104[0;39m - json解析失敗Java 8 date/time type java.time.LocalDateTime not supported by default: add Mo…