軟件測試-Selenium學習筆記

"""  目標:  driver.find_element()  需求:  1. 使用driver.find_element()方法  2. 輸入用戶名:admin  3. 輸入密碼:123456  
"""  # 導包  
from selenium import webdriver  
from time import sleep  # 獲取 瀏覽器驅動對象  
from selenium.webdriver.common.by import By  driver = webdriver.Edge()  # 打開 注冊A.html  
url = r"E:\前端和測試 外包\測試學習\8天web自動化全套測試—資料\web自動化_day01_課件+筆記+資料+代碼\web自動化_day01_課件+筆記+資料+代碼\02_其他資料\注冊A.html"  
driver.get(url)  # 使用find_element()定位用戶名  
driver.find_element(By.ID, "userA").send_keys("admin")  
# 使用find_element()定位密碼  
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys("123456")  # 暫停 3秒  
sleep(3)  
# 退出瀏覽器驅動  
driver.quit()
driver.find_element()
  • 用于查找網頁上的一個元素,返回一個 WebElement 對象

  • 需要傳入兩個參數:

    1. 定位方式By 提供的枚舉常量)

    2. 定位值(對應的選擇器)

By 定位方式

By 是 Selenium 提供的一個類,封裝了各種元素定位方式。常用有:

  • By.ID("id值") → 通過元素的 id 屬性定位

  • By.NAME("name值") → 通過 name 屬性定位

  • By.CLASS_NAME("class值") → 通過 class 屬性定位

  • By.TAG_NAME("tag值") → 通過標簽名定位(如 "input", "button")

  • By.LINK_TEXT("文本") → 通過完整文本定位, 比如這種
    ![[Pasted image 20250819093103.png]]

  • By.PARTIAL_LINK_TEXT("部分文本") → 通過鏈接的部分文本定位

  • By.CSS_SELECTOR("css選擇器") → 通過 CSS 選擇器定位

  • By.XPATH("xpath表達式") → 通過 XPath 表達式定位(最萬能)

link_textpartial_link_text 的區別
方法含義匹配方式
link_text按超鏈接的完整文本定位完全匹配,文本必須完全一樣
partial_link_text按超鏈接文本的部分定位模糊匹配,只要包含指定子串即可

?? 都只能用于 <a> 標簽(超鏈接)

.send_keys()
  • 作用:模擬鍵盤輸入

  • 參數:字符串或者特殊鍵(如回車鍵 Keys.ENTER

element.send_keys("hello")          # 輸入字符串
element.send_keys(Keys.ENTER)       # 模擬回車
element.send_keys("123", Keys.TAB)  # 輸入 123 后按下 TAB
XPath基本語法

假設有 HTML:

<div id="loginBox"><input id="userA" type="text" placeholder="用戶名"><input id="passwordA" type="password" placeholder="密碼"><button>登錄</button>
</div>

(1) 按標簽定位

driver.find_element(By.XPATH, "//input")  # 找第一個 input 元素
  • // 表示 從任意位置開始查找

  • input 是標簽名

(2) 按屬性定位

driver.find_element(By.XPATH, "//input[@id='userA']").send_keys("admin")
driver.find_element(By.XPATH, "//input[@type='password']").send_keys("123456")
  • [@屬性名='值'] → 根據屬性過濾

  • 可以定位 id、name、class、placeholder 等屬性

(3) 按文本定位

driver.find_element(By.XPATH, "//button[text()='登錄']").click()
  • text() 用于匹配標簽的可見文本

(4) 模糊匹配 / contains

driver.find_element(By.XPATH, "//input[contains(@id, 'user')]").send_keys("admin")
driver.find_element(By.XPATH, "//button[contains(text(), '登')]").click()
  • contains(@屬性, '值') → 屬性包含某字符串

  • contains(text(), '值') → 文本包含某字符串

CSS Selector 基本語法

假設 HTML:

<div id="loginBox"><input id="userA" type="text" class="input-text" placeholder="用戶名"><input id="passwordA" type="password" class="input-text" placeholder="密碼"><button class="btn login-btn">登錄</button>
</div>

(1) 按 id 定位

driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
  • #userA → 選擇 id 為 userA 的元素

(2) 按 class 定位

driver.find_element(By.CSS_SELECTOR, ".login-btn").click()
  • .login-btn → 選擇 class 包含 login-btn 的元素

(3) 按標簽+class

driver.find_element(By.CSS_SELECTOR, "button.login-btn").click()
  • button.login-btn → 限制標簽為 <button> 且 class 包含 login-btn

(4) 按屬性定位

driver.find_element(By.CSS_SELECTOR, "input[placeholder='用戶名']").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys("123456")
  • [屬性名='值'] → 匹配屬性值

  • 也可以模糊匹配:

input[placeholder*='用']   # 屬性值包含“用”
input[type^='pass']       # 屬性值以“pass”開頭
input[type$='word']       # 屬性值以“word”結尾
瀏覽器操作方法
方法功能描述
maximize_window()最大化瀏覽器窗口
set_window_size(width, height)設置窗口寬高(像素)
set_window_position(x, y)設置窗口在屏幕的坐標位置
back()瀏覽器后退(模擬點擊后退按鈕)
forward()瀏覽器前進(模擬點擊前進按鈕)
refresh()刷新頁面(模擬 F5 按鍵)
close()關閉當前窗口
quit()關閉瀏覽器驅動(結束所有窗口、釋放資源)
title獲取頁面標題(屬性,調用無括號,如 driver.title
current_url獲取當前頁面 URL(屬性,調用無括號,如 driver.current_url
元素基礎操作
方法功能描述
click()單擊元素(模擬鼠標左鍵點擊)
send_keys(value)向輸入框等元素模擬輸入文本
clear()清除輸入框已填文本
元素信息獲取方法
方法功能描述
size獲取元素尺寸(寬高,屬性,調用無括號,如 element.size
text獲取元素文本內容(屬性,調用無括號,如 element.text
get_attribute("xxx")獲取元素指定屬性值(xxx 為屬性名,如 get_attribute("id")
is_displayed()判斷元素是否可見(返回布爾值)
is_enabled()判斷元素是否可用(如按鈕是否可點擊,返回布爾值)
is_selected()判斷元素是否被選中(復選框、單選框專用,返回布爾值 )
常用鼠標操作

使用 ActionChains 后必須調用 .perform() 執行

# 導包
from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://www.baidu.com")element = driver.find_element(By.ID, "kw")  # 搜索框
#注冊
actions = ActionChains(driver)
方法作用示例
click()單擊元素actions.click(element).perform()
double_click()雙擊元素actions.double_click(element).perform()
context_click()右擊元素actions.context_click(element).perform()
move_to_element()鼠標懸停到元素actions.move_to_element(element).perform()
click_and_hold()鼠標按下不放actions.click_and_hold(element).perform()
release()鼠標釋放actions.release(element).perform()
drag_and_drop(source, target)拖拽元素actions.drag_and_drop(source, target).perform()
drag_and_drop_by_offset(source, x, y)按偏移拖拽actions.drag_and_drop_by_offset(source, 100, 0).perform()
鍵盤操作
from selenium.webdriver.common.keys import Keyselement = driver.find_element(By.ID, "kw")# 輸入文字 + 回車
element.send_keys("Selenium", Keys.ENTER)# 組合操作
actions = ActionChains(driver)
actions.key_down(Keys.SHIFT).send_keys("selenium").key_up(Keys.SHIFT).perform()  # 大寫輸入
描述
Keys.ENTER回車
Keys.TABTab 鍵
Keys.ESCAPEEsc
Keys.BACKSPACE刪除
Keys.CONTROLCtrl
Keys.ALTAlt
Keys.SHIFTShift
Keys.ARROW_UP/DOWN/LEFT/RIGHT上下左右方向鍵
Keys.DELETE刪除鍵
Keys.COPYCtrl+C(復制)
Keys.PASTECtrl+V(粘貼)
元素等待

隱式等待(全局等待)

from selenium import webdriverdriver = webdriver.Chrome()
driver.implicitly_wait(10)  # 設置全局等待時間 10 秒driver.get("https://www.baidu.com")
driver.find_element("id", "kw").send_keys("ChatGPT")

顯式等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()
driver.get("https://www.baidu.com")# 顯式等待:最多等待 10 秒,直到元素出現
search_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw"))
)
search_box.send_keys("ChatGPT")

顯式與隱式區別:

  1. 作用域:隱式為全局元素,顯式等待為單個元素有效

  2. 使用方法:隱式等待直接通過驅動對象調用,而顯式等待方法封裝在 WebDriverWait 類中

  3. 達到最大超時時長后拋出的異常不同:隱式為 NoSuchElementException,顯式等待為 TimeoutException

下拉框

Select 類用于操作 select 標簽

#實例化對象:
select = Select (element)  
element: <select>標簽對應的元素,通過元素定位方式獲取,  
例如:driver.find_element_by_id ("selectA")

方法:

  1. select_by_index (index) --> 根據 option 索引來定位,從 0 開始
  2. select_by_value (value) --> 根據 option 屬性 value 值來定位
  3. select_by_visible_text (text) --> 根據 option 顯示文本來定位

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

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

相關文章

知微傳感3D相機上位機DkamViewer使用:給相機升級固件

寫在前面 本人從事機器視覺細分的3D相機行業。編寫此系列文章主要目的有&#xff1a; 1、便利他人應用相機&#xff0c;本系列文章包含公司所出售相機的SDK的使用例程及詳細注釋&#xff1b;2、促進行業發展及交流。 知微傳感Dkam系列3D相機可以應用于定位分揀、焊接焊縫提取、…

CMake進階: CMake Modules---簡化CMake配置的利器

目錄 1.簡介 2.為什么需要 CMake Modules&#xff1f; 3.內置模塊&#xff1a;開箱即用的工具 3.1.依賴查找模塊&#xff08;FindXXX.cmake&#xff09; 3.2.功能檢測模塊&#xff08;CheckXXX.cmake&#xff09; 3.3.通用工具模塊&#xff08;如 FetchContent.cmake、CT…

【Docker】Ubuntu上安裝Docker(網絡版)

【Docker】Ubuntu上安裝Docker注意&#xff1a;一、環境準備1. 系統要求2. 卸載舊版本二、安裝步驟1.配置倉庫源2.安裝 Docker引擎3.驗證安裝情況三、解決報錯1、檢查網絡連接2、檢查Docker服務狀態3、換源4.重載生效、重啟服務、查看是否配置成功5.驗證解決情況四、權限與配置…

Socket 編程 TCP

TCP 網絡程序 和剛才 UDP 類似. 實現一個簡單的英譯漢的功能。TCP是面向字節流的可靠傳輸&#xff0c;如同前文的管道流&#xff0c;只要是流&#xff0c;它的操作就是文件的寫出與讀入。TCP socket API 詳解下面介紹程序中用到的 socket API,這些函數都在 sys/socket.h 中。so…

使用AWS S3 + Lambda + MediaConvert 實現上傳視頻文件并自動轉碼

前言 最近團隊在做短視頻平臺的技術調研&#xff0c;其中有一個環節便是音視頻開發&#xff0c;即對用戶上傳的視頻進行自適應轉碼。自適應的原理其實就是預先將視頻轉換為幾個常用的分辨率&#xff0c;app端根據用戶手機分辨率拉取相應分辨率的視頻。 目前嘗試了兩種方案&…

QT之QWaitCondition降低cpu占用率,從忙等待到高效同步

在多線程編程中&#xff0c;線程間的同步是一個核心問題。在處理線程等待時&#xff0c;經常會寫出高CPU占用率的代碼&#xff0c;其中最典型的就是使用忙等待&#xff08;busy waiting&#xff09;。本文將詳細介紹如何使用Qt框架中的QWaitCondition類來優雅地解決這一問題&am…

pcl求平面點云的邊界凸包點

基本流程1&#xff0c;讀入點云&#xff0c;并去除無效點2&#xff0c;擬合平面3&#xff0c;去除離平面距離較遠的點4&#xff0c;對點云進行平面投影5&#xff0c;進行convex_hull運算初學者&#xff0c;暫時不知道能用來干嘛。練手還是非常不錯的&#xff01;#define _CRT_S…

Windows系統上使用GIT

首先破除一下畏懼心理&#xff1a;在Windows上使用git和在linux系統中的使用方法是一樣的&#xff0c;只是安裝方式沒那么便捷&#xff0c;畢竟linux中安裝git只需要一行命令 GIT下載地址 如果你的電腦的CPU是64位的&#xff0c;就點擊&#xff1a; Git-2.50.1-64-bit.exe 如果…

《設計模式之禪》筆記摘錄 - 17.模板方法模式

模板方法模式的定義模板方法模式(Template Method Pattern)是如此簡單&#xff0c;以致讓你感覺你已經能夠掌握其精髓了。其定義如下&#xff1a;Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.Template Method lets subclasses r…

SpreadJS 協同服務器 MongoDB 數據庫適配支持

為了支持 SpreadJS 協同編輯場景&#xff0c;協同服務器需要持久化存儲文檔、操作、快照及里程碑數據。本文介紹了 MongoDB 數據庫適配器的實現方法&#xff0c;包括集合初始化、適配器接口實現以及里程碑存儲支持。 一、MongoDB 集合初始化 協同編輯服務需要以下集合&#x…

Ubuntu 主機名:精通配置與管理

主機名&#xff08;hostname&#xff09;是Linux系統中用于標識網絡上特定設備的名稱&#xff0c;它在網絡通信、服務配置&#xff08;如 Kubernetes 集群、數據庫&#xff09;以及日志記錄中扮演著至關重要的角色。對于初學者來說&#xff0c;配置主機名似乎很簡單&#xff0c…

C/C++ 協程:Stackful 手動控制的工程必然性

&#x1f680; C/C 協程&#xff1a;Stackful 手動控制的工程必然性 引用&#xff1a; C/C 如何正確的切換協同程序&#xff1f;&#xff08;基于協程的并行架構&#xff09; #mermaid-svg-SXgplRf3WRYc8A7l {font-family:"trebuchet ms",verdana,arial,sans-serif;…

新手向:使用STM32通過RS485通信接口控制步進電機

新手向&#xff1a;使用STM32通過RS485通信接口控制步進電機 準備工作 本文使用的STM32芯片是STM32F407ZGTx&#xff0c;使用的電機是57步進電機&#xff0c;驅動器是用的是時代超群的RS485總線一體化步進電機驅動器&#xff08;42 型&#xff1a;ZD-M42P-485&#xff09;。使…

設計模式筆記_行為型_命令模式

1.命令模式介紹命令模式&#xff08;Command Pattern&#xff09;是一種行為設計模式&#xff0c;它將請求或操作封裝為對象&#xff0c;使得可以用不同的請求對客戶端進行參數化。命令模式的核心思想是將方法調用、請求或操作封裝到一個獨立的命令對象中&#xff0c;從而使得客…

詳解MySQL中的多表查詢:多表查詢分類講解、七種JOIN操作的實現

精選專欄鏈接 &#x1f517; MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱&#xff0c;點贊&#xff0b;關注&#xff0c;每日精進1%&#xff0c;與百萬開發者共攀技術珠峰 更多內容持續更新中&#xff01;希望能給大家帶來…

vue3+elemeent-plus, el-tooltip的樣式修改不生效

修改后的樣式&#xff0c;直接貼圖&#xff0c;經過刪除出現懸浮1、在書寫代碼的時候切記effect“light”&#xff0c;如果你需要的是深色的樣式:disabled"!multiple" 是否禁用<el-tooltip effect"light" placement"top" content"請先選…

網頁作品驚艷亮相!這個浪浪山小妖怪網站太治愈了!

大家好呀&#xff01;今天要給大家分享一個超級治愈的網頁作品——浪浪山小妖怪主題網站&#xff01;這個純原生開發的項目不僅顏值在線&#xff0c;功能也很能打哦&#xff5e;至于靈感來源的話&#xff0c;要從一部動畫說起。最近迷上了治愈系動畫&#xff0c;就想做一個溫暖…

搭建最新--若依分布式spring cloudv3.6.6 前后端分離項目--步驟與記錄常見的坑

首先 什么拉取代碼&#xff0c;安裝數據庫&#xff0c;安裝redis&#xff0c;安裝jdk這些我就不說了 導入數據庫 &#xff1a;數據庫是分庫表的 &#xff0c;不要建錯了 【一定要注意&#xff0c;不然nacos讀取不到配置文件】這個是給nacos用的這個是給項目配置或項目用的2. 服…

分布式唯一 ID 生成方案

在復雜分布式系統中&#xff0c;往往需要對大量的數據和消息進行唯一標識。如在美團點評的金融、支付、餐飲、酒店、貓眼電影等產品的系統中&#xff0c;數據日漸增長&#xff0c;對數據分庫分表后需要有一個唯一 ID 來標識一條數據或消息&#xff0c;數據庫的自增 ID 顯然不能…

飛算JavaAI賦能高吞吐服務器模擬:從0到百萬級QPS的“流量洪峰”征服之旅

引言&#xff1a;當“流量洪峰”來襲&#xff0c;如何用低代碼馴服高并發&#xff1f; 在數字化時代&#xff0c;從電商平臺的“雙11”大促到社交網絡的突發熱點事件&#xff0c;再到金融系統的實時交易高峰&#xff0c;服務器時刻面臨著**高吞吐量&#xff08;High Throughput…