软件测试-Selenium学习笔记

python 复制代码
"""  
    目标:  
        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("文本") → 通过完整文本定位, 比如这种

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

  • By.CSS_SELECTOR("css选择器") → 通过 CSS 选择器定位

  • By.XPATH("xpath表达式") → 通过 XPath 表达式定位(最万能)

方法 含义 匹配方式
link_text 按超链接的完整文本定位 完全匹配,文本必须完全一样
partial_link_text 按超链接文本的部分定位 模糊匹配,只要包含指定子串即可

⚠️ 都只能用于 <a> 标签(超链接)

.send_keys()
  • 作用:模拟键盘输入

  • 参数 :字符串或者特殊键(如回车键 Keys.ENTER

python 复制代码
element.send_keys("hello")          # 输入字符串
element.send_keys(Keys.ENTER)       # 模拟回车
element.send_keys("123", Keys.TAB)  # 输入 123 后按下 TAB
XPath基本语法

假设有 HTML:

html 复制代码
<div id="loginBox">
    <input id="userA" type="text" placeholder="用户名">
    <input id="passwordA" type="password" placeholder="密码">
    <button>登录</button>
</div>

(1) 按标签定位

python 复制代码
driver.find_element(By.XPATH, "//input")  # 找第一个 input 元素
  • // 表示 从任意位置开始查找

  • input 是标签名

(2) 按属性定位

python 复制代码
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) 按文本定位

python 复制代码
driver.find_element(By.XPATH, "//button[text()='登录']").click()
  • text() 用于匹配标签的可见文本

(4) 模糊匹配 / contains

python 复制代码
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:

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 定位

python 复制代码
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
  • #userA → 选择 id 为 userA 的元素

(2) 按 class 定位

python 复制代码
driver.find_element(By.CSS_SELECTOR, ".login-btn").click()
  • .login-btn → 选择 class 包含 login-btn 的元素

(3) 按标签+class

python 复制代码
driver.find_element(By.CSS_SELECTOR, "button.login-btn").click()
  • button.login-btn → 限制标签为 <button> 且 class 包含 login-btn

(4) 按属性定位

python 复制代码
driver.find_element(By.CSS_SELECTOR, "input[placeholder='用户名']").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys("123456")
  • [属性名='值'] → 匹配属性值

  • 也可以模糊匹配:

python 复制代码
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() 执行

python 复制代码
# 导包
from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = 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()
键盘操作
python 复制代码
from selenium.webdriver.common.keys import Keys

element = 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.TAB Tab 键
Keys.ESCAPE Esc
Keys.BACKSPACE 删除
Keys.CONTROL Ctrl
Keys.ALT Alt
Keys.SHIFT Shift
Keys.ARROW_UP/DOWN/LEFT/RIGHT 上下左右方向键
Keys.DELETE 删除键
Keys.COPY Ctrl+C(复制)
Keys.PASTE Ctrl+V(粘贴)
元素等待

隐式等待(全局等待)

python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # 设置全局等待时间 10 秒

driver.get("https://www.baidu.com")
driver.find_element("id", "kw").send_keys("ChatGPT")

显式等待

python 复制代码
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 EC

driver = 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 标签

python 复制代码
#实例化对象:
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 显示文本来定位
相关推荐
weixin_4378309413 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
汇能感知13 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun13 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao13 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾14 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
gnip14 小时前
JavaScript事件流
前端·javascript
皮皮林55114 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
小菜全14 小时前
基于若依框架Vue+TS导出PDF文件的方法
javascript·vue.js·前端框架·json
wow_DG14 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js
weixin_4569042714 小时前
Spring Boot 用户管理系统
java·spring boot·后端