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

Web 自动化测试常用函数实战(一)

在 Web 自动化测试中,掌握常用函数是实现脚本自动化的核心 —— 无论是定位页面元素、操作按钮输入,还是处理弹窗、控制浏览器窗口,都依赖于标准化的函数调用。本文将以Selenium+Python为工具(C++ 逻辑相通,重点掌握函数思想),系统梳理自动化测试中的八大核心函数模块,详解每个函数的用法、场景及避坑要点。

一、元素定位函数:自动化的 “眼睛”

Web 自动化的第一步是 “找到元素”—— 就像人操作页面需要先看到按钮、输入框,脚本也需要通过定位函数锁定目标元素。常见的定位方式有CSS Selector(选择器)XPath(最常用、灵活性最高),其他如IDClassName可作为补充。

举个例子:打印多个热搜词

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#元素定位#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")#多个元素
ret=driver.find_elements(By.CSS_SELECTOR,"#hotsearch-content-wrapper > li")
#遍历元素
for i in ret:print(i.text)
# 获取每个元素对应的文本信息#关闭浏览器
driver.quit()

关于元素信息的复制,见上篇。

1.1 CSS Selector(选择器):简洁高效的定位方式

CSS Selector (选择器)通过元素的IDClass、标签名等属性定位元素,语法简洁,执行速度快,是企业中最常用的定位方式之一。

核心语法

选择器类型语法说明百度首页实战案例
ID 选择器(定位)#id值定位id属性唯一的元素(推荐优先使用)##chat-textarea → 百度搜索输入框
Class 选择器.class值定位class属性匹配的元素.s-hotsearch-title → 百度热搜标题
子类选择器父元素 > 子元素定位父元素下的直接子元素#s-hotsearch-wrapper > li:nth-child(1) → 百度热搜容器内的子元素(li:nth-child(1)表示找到第一个li标签)
标签选择器标签名定位指定标签的元素(慎用,易重复)input → 页面所有输入框

避坑要点:

  • 优先使用ID选择器#id),因为id在页面中通常唯一,定位准确率最高。
  • Class值包含空格(如class="s-isindex-wap s-hotsearch"),需去掉空格用.连接(如.s-isindex-wap.s-hotsearch)。
  • 可通过浏览器 F12 右键 “Copy → Copy selector” 快速生成表达式,但需检查唯一性(如复制的#title-content可能在登录 / 未登录状态下重复,需手动修改)。

1.2 XPath:灵活强大的定位方式

XPath 是 XML 路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点。还能通过 “父子关系”“属性匹配”“索引” 等复杂逻辑定位,灵活性远超 CSS Selector,适合复杂场景(如无IDClass的元素)。

eg:搜素框“Copy → Copy XPath”

//*[@id="chat-textarea"]

表示匹配id属性为chat-textarea的节点

//*[@id="hotsearch-content-wrapper"]/li[3]/a/span[2]

表示:

指定位置下的子标签的文本内容

核心语法与实战案例

语法说明百度首页实战案例
//*获取页面所有节点//* → 所有标签
//标签名获取指定标签的所有元素//ul → 所有列表标签
//父标签/子标签获取父标签下的直接子标签//*[@id="hotsearch-content-wrapper"]/li[3]/a/span[2]
//元素/..获取元素的父节点//*[@id="chat-textarea"]/..→ 搜索输入框的父元素
//*[@属性='值']通过属性匹配元素//*[@id="chat-submit-button"] → 百度一下按钮(id=su
//标签名[索引]通过索引定位(索引从 1 开始,非 0)//div/ul/li[3] → 百度热搜的第 3 个标签

避坑要点:

  • XPath 索引从1 开始(区别于 Python 的 0 索引),定位第 3 个元素需用[3],而非[2]
  • 手动复制 XPath 后需验证唯一性:打开浏览器控制台(Ctrl+F),粘贴 XPath 表达式,若匹配结果数为 1 则可用,否则需调整(如增加父元素约束)。
  • 通过浏览器 F12 右键 “Copy → Copy XPath” 快速生成表达式。

二、操作测试对象函数:自动化的 “双手”

找到元素后,需通过函数对元素执行操作(如点击、输入文本),核心操作包括点击、输入、清除、获取文本等。

2.1 点击操作:click()

模拟人工点击元素(如按钮、链接),是最常用的操作之一。

#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")# 点击百度一下按钮
#driver.find_element(By.CSS_SELECTOR, "#chat-submit-button").click()
#另一种写法
ele = driver.find_element(By.CSS_SELECTOR,"#chat-submit-button")
ele.click()time.sleep(3)#关闭浏览器
driver.quit()

2.2 输入操作:send_keys()

模拟人工在输入框中输入文本(如关键词、账号密码)。

#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")#模拟按键输入
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").send_keys("鹿晗")time.sleep(3)
#关闭浏览器
driver.quit()

写法二:

拓展场景:输入特殊键(如回车)

需导入Keys类,支持输入回车、Tab 等特殊按键:

from selenium.webdriver.common.keys import Keys# 案例:输入关键词后按回车搜索(无需点击“百度一下”)
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("鹿晗", Keys.ENTER)

2.3 清除操作:clear()

清除输入框中的已有文本(如重新输入关键词前清空内容),或者突然想要更换关键词。

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")
#driver.maximize_window()
#更换关键词
time.sleep(2)
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").send_keys("演唱会")
driver.find_element(By.XPATH,'//*[@id="chat-submit-button"]').click()
time.sleep(5)
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").clear()
time.sleep(5)
driver.find_element(By.CSS_SELECTOR,"#chat-textarea").send_keys("鹿晗")
driver.find_element(By.XPATH,'//*[@id="chat-submit-button"]').click()
time.sleep(5)#关闭浏览器
driver.quit()

注意:

这里还需要:

driver.find_element(By.XPATH,'//*[@id="chat-submit-button"]').click()

是因为:

点击一下为了让下面这个框消失,否则报错:

2.4 获取文本与属性:textget_attribute()

2.4.1 获取元素文本:text

获取元素的可见文本(如按钮上的文字、热搜标题),仅能获取元素标签内的文本内容。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")
#driver.maximize_window()#打印文本text
text = driver.find_element(By.CSS_SELECTOR,"#hotsearch-content-wrapper > li:nth-child(3) > a > span.title-content-title").text
print(text)
#关闭浏览器
driver.quit()

判断打印内容是否正确,用断言的方法:

assert text == "地底也有大量生命存在 能以地震为食"

改一下内容,如果不一样就会报错:

2.4.2 获取元素属性:get_attribute("属性名")

获取元素的任意属性值(如valuesrchref),适用于文本不可见但属性存储值的场景(如输入框的默认值)。

现在百度改版了:

以前:

直接打印会出现报错。

是因为:

在value中,所以要:

但是现在可以直接打印:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")
#driver.maximize_window()# 获取默认提示文本(属性为“placeholder”)
#以前
'''placeholder = driver.find_element(By.CSS_SELECTOR,"#kw").get_attribute("value")
print("输入框提示:", placeholder)  # 输出:输入框提示:请输入关键词'''
#现在
text = driver.find_element(By.CSS_SELECTOR,"#chat-submit-button").text
print(text)#关闭浏览器
driver.quit()

2.5 获取页面信息:titlecurrent_url

#打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
#创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))driver.get("https://www.baidu.com/")
#driver.maximize_window()#获取页面信息:title与current_url
title = driver.title
url = driver.current_urlprint(title)
print(url)#关闭浏览器
driver.quit()

用于:

  • 返回当前页面的标题(如百度首页标题为 “百度一下,你就知道”),常用于验证是否跳转到正确页面。
  • 返回当前页面的 URL(如https://www.baidu.com),常用于验证 URL 是否符合预期。
http://www.dtcms.com/a/354305.html

相关文章:

  • 如何防御安全标识符 (SID) 历史记录注入
  • 嵌入式学习day38
  • 怎样选择合适的报表系统?报表系统的主要功能有什么
  • PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“
  • PyTorch闪电入门:张量操作与自动微分实战
  • Wxml2Canvas在组件中的渲染获取不到元素问题
  • vue 海康视频插件
  • Java Spring Boot 集成淘宝 SDK:实现稳定可靠的商品信息查询服务
  • AI鱼塘,有你画的鱼吗?
  • 代码随想录刷题Day44
  • IDEA连接阿里云服务器中的Docker
  • 嵌入式学习日志————DMA直接存储器存取
  • 微信开发者工具中模拟调试现场扫描小程序二维码功能
  • Centos 7.6离线安装docker
  • 元宇宙+RWA:2025年虚拟资产与真实世界的金融融合实验
  • aiohttp模块如何使用
  • 开发避坑指南(39):Java List全null元素引发的空判断无效处理方案
  • 用LightRAG打造智能问答系统:知识图谱与RAG的融合应用实践
  • 如何在升级到S/4HANA后关闭SAP旧系统?
  • 3-4〔OSCP ◈ 研记〕❘ WEB应用攻击▸Burp Suite工具
  • MySQL中的InnoDB
  • pikachu-xss通关(1-8)
  • qt5+mingw64+opencv4.5.2搭建调试环境
  • FOC算法第二节 克拉克变换
  • mybatis-plus实现苍穹外卖项目-分类操作,不定期更新-day2
  • Hadoop(五)
  • AI、人工智能基础: 模型剪枝的概念与实践(PyTorch版)
  • uvloop深度实践:从原理到高性能异步应用实战
  • 死锁产生的条件是什么? 如何进行死锁诊断?
  • 本地部署DeepSeek大模型的基本方法