当前位置: 首页 > news >正文

软件测试-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.dtcms.com/a/339185.html

相关文章:

  • Dify-MCP服务创建案例
  • 循环高级综合练习①
  • 46 C++ STL模板库15-容器7-顺序容器-双端队列(deque)
  • 人工智能统一信息结构的挑战与前景
  • Vue3编程中更多常见书写错误场景
  • 使用OpenCV计算灰度图像的质心
  • 云原生堡垒机渗透测试场景
  • 所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
  • 微服务架构的演进:从 Spring Cloud Netflix 到云原生新生态
  • 大模型微调RAG、LORA、强化学习
  • 如何使用VNC对openEuler系统进行远程图形化操作
  • Ubuntu Server 22.04 k8s部署服务较时,文件描述符超过限制的处理方法
  • RabbitMQ:SpringBoot+RabbitMQ 多消费者绑定同一队列
  • Node.js 在 Windows Server 上的离线部署方案
  • leetcode349. 两个数组的交集
  • 轻度娱乐浪潮下定制开发开源AI智能名片S2B2C商城小程序的机遇与策略
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • 供水设备智慧化管理物联网解决方案:远程监控与运维
  • 搭建最新--若依分布式spring cloudv3.6.6 前后端分离项目--步骤与记录常见的坑
  • BKP相关知识点
  • 从机器视觉到图像识别:计算机视觉的多维探索
  • LINUX819 shell:for for,shift ,{} ,array[0] array[s] ,declare -x -a
  • 服务注册与服务发现原理与实现
  • CentOS 8开发测试环境:直接安装还是Docker更优?
  • Docker核心---数据卷(堵门秘籍)
  • 应用控制技术、内容审计技术、AAA服务器技术
  • 深入理解Redis持久化:让你的数据永不丢失
  • 电子电气架构 ---SDV技术基础与传统E/E架构有何不同?
  • 利用图数据库高效解决 Text2sql 任务中表结构复杂时占用过多大模型上下文的问题
  • 智慧养老中IPTV融合对讲:重塑养老沟通新生态