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

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.xdnf.cn/news/18816.html

相关文章:

  • Unity自定义Inspector面板之使用多选框模拟单选框
  • 测试分类(超详解)
  • vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据
  • 基于SpringBoot的社区儿童疫苗接种预约系统设计与实现(代码+数据库+LW)
  • 【高级机器学习】3. Convex Optimisation
  • 无限长直导线周围电场分布的MATLAB
  • 【MATLAB例程】二维平面上的多目标TOA定位,目标和TOA基站的数量、位置可自行设置。附代码下载链接
  • 浅谈Elasticsearch数据写入流程的refresh和flush操作
  • ICDE 2025 | 包含OPTIONAL和UNION表达式的SPARQL查询的高效执行方法
  • 硬件开发_基于物联网的儿童座椅系统
  • 3.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World
  • 7、prefix-tuning、P-tuning、Prompt-tuning
  • 基于数据安全的旅游民宿租赁系统
  • 音频时长裁剪工具:高效处理音频,让内容创作更轻松
  • docker 所有常用命令,配上思维导图,加图表显示
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • 【Linux】用户与用户组管理
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day14
  • 蓝桥杯算法之基础知识(3)——Python的idle的快捷键设置(idle改键)
  • OpenCV实战1.信用卡数字识别
  • 极简风格PDF格式转换解决方案
  • 人工智能安全地图:将人工智能漏洞与现实世界的影响联系起来
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • Java全栈开发面试实录:从基础到实战的深度探索
  • 【AI算力平台】算力高效调度策略——GPU调度
  • Rust 登堂 之 函数式编程(三)
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • PyTorch生成式人工智能——PatchGAN详解与实现
  • LeetCode 438. 找到字符串中所有的字母异位词
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~