web 自動化之 Selenium 元素定位和瀏覽器操作

文章目錄

      • 一、元素定位的八大方法
        • 1、基于 id/name/class/tag_name 定位
        • 2、基于 a 標簽元素的鏈接文本定位
        • 3、基于xpath定位
        • 4、css定位
      • 二、瀏覽器操作
        • 1、信息獲取
        • 2、 瀏覽器關閉
        • 3、 瀏覽器控制

一、元素定位的八大方法

web 自動化測試就是通過代碼對網頁進行測試,在對網頁進行測試之前,必須掌握如何

1、基于 id/name/class/tag_name 定位
2、基于 a 標簽元素的鏈接文本定位
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# type: WebElement
el_select=driver.find_element_by_id("kw")
#通過元素的name屬性定位
el2=driver.find_element_by_name("wd")
# 通過標簽定位 一般情況下 不用這個
el4=driver.find_element_by_tag_name("input")
# class屬性定位
el3=driver.find_element_by_class_name("s_ipt")# 通過鏈接文本定位
el6=driver.find_element_by_link_text("新聞")
el6.click()
# 通過部分鏈接文本定位
el7=driver.find_element_by_partial_link_text("新")
el7.click()
# 返回元素列表[]
els=driver.find_elements_by_partial_link_text("新")
3、基于xpath定位
# 通過絕對路徑定位
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# driver.find_element_by_xpath("xpath語句如何來寫")
# 通過絕對路徑定位(不要用) 不只是為了定位這個元素,考慮腳本的穩定 通過/從頁面開
始標簽一直導航到目標標簽
el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/di
v/form/span[1]/input")
# 通過相對路徑定位 //開頭 經常用到的方法
el2=driver.find_element_by_xpath("//form/span/input")
# 標簽+索引=唯一定位目標標簽
el3=driver.find_element_by_xpath("//form/span[1]/input")
# 唯一定位標簽+屬性
el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id
='kw']")
# 唯一定位標簽+多個屬性
el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span
[1]/input[@id='kw']")
# 標簽+部分屬性定位 s_ipt
el6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class,
3)='ipt']")
el7=driver.find_element_by_xpath("//form/span[1]/input[contains(@id,'k
w')]")
el8=driver.find_element_by_xpath("//form/span[1]/input[starts‐with(@i
d,'k')]")
el9=driver.find_element_by_xpath("//div[@id='s‐top‐left']/a[text()='新
聞']")
# 元素操作:輸入 send_keys
el7.send_keys("web 自動化測試")
time.sleep(2)
driver.close()
# copyxpath 頁面工具復制
el10=driver.find_element_by_xpath('//*[@id="kw"]')
# //標簽[屬性]
# 通過文本定位
el11=driver.find_element_by_xpath("//a[text()='新聞']")
el6.click()
# xpath定位 =屬性+文本+索引 綜合使用
# xpath定位能否定位到
4、css定位
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1通過絕對路徑進行定位 一般不用
el1=driver.find_element_by_css_selector("html body div div div div div f
orm span input ")
el2=driver.find_element_by_css_selector("html>body> div> div> div> div >
div> form> span> input ")# 2通過id定位 #id屬性值
# 3通過class屬性定位 .class屬性值 s_ipt
el3=driver.find_element_by_css_selector("#kw")
el4=driver.find_element_by_css_selector('.s_ipt')# 4通過其他屬性定位,并且多個屬性定位
el5=driver.find_element_by_css_selector("[autocomplete='off']")
el6=driver.find_element_by_css_selector("[autocomplete='off'][class='s_i
pt']")# 5通過標簽定位 標簽名+屬性/id/class進行定位 組合定位
el7=driver.find_element_by_css_selector("input#kw")
el8=driver.find_element_by_css_selector("input.s_ipt")
el9=driver.find_element_by_css_selector("input[autocomplete='off']")#6通過層級定位 層級之間通過>或者空格隔開 相對路徑
el10=driver.find_element_by_css_selector("form#form>span>input#kw")
# 通過兄弟節點定位
# 場景:同一個元素下面多一個相同的元素 多胞兄弟
# 第一個元素 標簽:first‐child
# 第二個元素 標簽:nth‐child(n)
# 最后元素 標簽:last‐of‐type
el11=driver.find_element_by_css_selector("div#s‐top‐left>a:first‐child")
el12=driver.find_element_by_css_selector("div#s‐top‐left>a:nth‐
child(3)")
el13=driver.find_element_by_css_selector("div#s‐top‐left>a:last‐of‐
type")
# el13.click()
# el10.send_keys("chromedriver")
# time.sleep(2)
# driver.close()"""
定位多個元素
"""
ellist=driver.find_elements_by_css_selector("#kw")
print(ellist)
# 返回WebElement
el14=ellist[0]"""
元素定位是否通過一個方法,支持所有的定位方式定位到元素
find_element()
find_elements() 基于多個定位方式找到一組元素
"""el15=driver.find_element(By.CSS_SELECTOR,"#kw")
el16=driver.find_element(By.ID,"kw")
el14.send_keys("chromedriver")
time.sleep(2)
driver.close()
"""
webdriver底層關于元素定位 8+8+2=18
"""

二、瀏覽器操作

1、信息獲取
print("瀏覽器名稱",driver.name)
print("網站標題",driver.title)
print("網站地址",driver.current_url)
print("網站源碼",driver.page_source)
2、 瀏覽器關閉
  • python 執行完畢會自動關閉
  • 退出瀏覽器 driver.quit()
  • 關閉當前窗口 driver.close()
3、 瀏覽器控制

代碼是 driver.xxxxxx

driver.maximize_window() #最大化窗口
driver.set_window_size(390, 844) #設置窗口大小
driver.back() #回到空白頁面
driver.forward() #前進到上一次訪問的頁面
driver.refresh() #刷新:地址不變,輸入框的內容全部丟失

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

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

相關文章

前端面經 作用域和作用域鏈

含義:JS中變量生效的區域 分類:全局作用域 或者 局部作用域 局部作用域:函數作用域 和 塊級作用域ES6 全局作用域:在代碼中任何地方都生效 函數中定義函數中生效,函數結束失效 塊級作用域 使用let或const 聲明 作用域鏈:JS查…

【C/C++】RPC與線程間通信:高效設計的關鍵選擇

文章目錄 RPC與線程間通信:高效設計的關鍵選擇1 RPC 的核心用途2 線程間通信的常規方法3 RPC 用于線程間通信的潛在意義4 主要缺點與限制4.1 缺點列表4.2 展開 5 替代方案6 結論 RPC與線程間通信:高效設計的關鍵選擇 在C或分布式系統設計中,…

兩種方法求解最長公共子序列問題并輸出所有解

最長公共子序列(Longest Common Subsequence, LCS)是動態規劃領域的經典問題,廣泛應用于生物信息學(如DNA序列比對)、文本差異比對(如Git版本控制)等領域。本文將通過??自頂向下遞歸記憶化??…

SpringBoot應急知識學習系統開發實現

概述 一個基于SpringBoot開發的應急知識學習系統,該系統提供了完整的用戶注冊、登錄、知識學習與測評功能。對于開發者而言,這是一個值得參考的免費Java源碼項目,可以幫助您快速構建類似的教育平臺。 主要內容 5.2 注冊模塊的實現 系統采…

【Python 字符串】

Python 中的字符串(str)是用于處理文本數據的基礎類型,具有不可變性、豐富的內置方法和靈活的操作方式。以下是 Python 字符串的核心知識點: 一、基礎特性 定義方式: s1 單引號字符串 s2 "雙引號字符串" s…

第十六屆藍橋杯大賽軟件賽C/C++大學B組部分題解

第十六屆藍橋杯大賽軟件賽C/C大學B組題解 試題A: 移動距離 問題描述 小明初始在二維平面的原點,他想前往坐標(233,666)。在移動過程中,他只能采用以下兩種移動方式,并且這兩種移動方式可以交替、不限次數地使用: 水平向右移動…

如何使用極狐GitLab 軟件包倉庫功能托管 npm?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 軟件包庫中的 npm 包 (BASIC ALL) npm 是 JavaScript 和 Node.js 的默認包管理器。開發者使用 npm 共享和重用代碼&#xff…

Matlab 基于Hough變換的人眼虹膜定位方法

1、內容簡介 Matlab220-基于Hough變換的人眼虹膜定位方法 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

chili調試筆記14 畫線 頁面布置 線條導出dxf

2025-05-08 09-05-06 llm畫線 頁面布置 expand有自己的格式 刪了就會按照子元素格式 不加px無效 沒有指定尺寸設置100%無效 怎么把線條導出dxf command({name: "file.export",display: "command.export",icon: "icon-export", }) export class…

藍綠發布與金絲雀發布

藍綠發布與金絲雀發布 一、藍綠發布:像「搬家」一樣安全上線1. 生活化故事2. 技術步驟拆解步驟①:初始狀態步驟②:部署新版本到綠環境步驟③:內部驗證綠環境步驟④:一鍵切換流量步驟⑤:監控與回滾 3. 藍綠發…

【2025五一數學建模競賽B題】 礦山數據處理問題|建模過程+完整代碼論文全解全析

你是否在尋找數學建模比賽的突破點?數學建模進階思路! 作為經驗豐富的美賽O獎、國賽國一的數學建模團隊,我們將為你帶來本次數學建模競賽的全面解析。這個解決方案包不僅包括完整的代碼實現,還有詳盡的建模過程和解析&#xff0c…

JavaSE核心知識點02面向對象編程02-02(封裝、繼承、多態)

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 JavaSE核心知識點02面向對象編程02-02&#…

Yolo遷移訓練-帶訓練源碼

目錄 下載Git 拉下yolo模型 下載labelimg 準備訓練集 遷移訓練 繼續訓練 下載Git Git - Downloading Package 拉下yolo模型 然后用克隆腳本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 詳解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示詞模板模塊的深度解析,主要參考langchain_core.prompts源碼模塊與官方文檔。系統梳理 LangChain 對提示詞模板的封裝邏輯與設計思路,旨在幫助讀者構建全面、深入的知識體系,為高效運用LangChain 框架的提示詞模板開發應用…

中小企業設備預測性維護三步構建法:從零到精的技術躍遷與中訊燭龍實踐

在工業4.0浪潮中,中小企業常陷入"設備故障頻發"與"數字化成本高企"的雙重困境。本文基于半導體、食品加工等行業實證數據,結合中訊燭龍系統技術突破,為中小企業提供一套零基礎、低門檻、可擴展的預測性維護實施框架&…

C30-函數

一 函數的優點 避免代碼冗長模塊化的設計思路(十分類似組裝電腦)按功能劃分,每個函數代表一個功能 二 函數的三要素 函數要先定義再使用(就像是變量一樣)三要素: 函數名→體現功能參數列表 比如yf(x)→x就是參數又如yf(x,y)→x,y就是參數→參數的個數取決于需求 返回值:比如…

【Spring Boot 多模塊項目】@MapperScan失效、MapperScannerConfigurer 報錯終極解決方案

在使用 Spring Boot 構建多模塊項目,集成 MyBatis-Plus 時,很多開發者會遇到類似如下啟動報錯: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl與unique_ptr的問題

PImpl與std::unique_ptr組合 pimpl(Pointer to Implementation)是C程序開發中非常常用的技巧之一,它的好處有: 節省程序編譯時間保持程序/庫的二進制兼容性隱藏實現細節 舉例一個常見的pimpl的使用示例: // a.h class Impl; //前置聲明 c…

C++類和對象:構造函數、析構函數、拷貝構造函數

引言 介紹:C類和對象:構造函數、析構函數、拷貝構造函數 _涂色_博主主頁 C基礎專欄 一、類的默認成員函數 先認識一下類中的默認成員函數: 默認成員函數就是用戶沒有顯式實現,編譯器會自動生成的成員函數稱為默認成員函數。?個類…

CTF - PWN之ORW記錄

CTF - Pwn之ORW記錄https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q