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

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

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

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

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

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

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

python 复制代码
#打开浏览器----驱动管理
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()

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

python 复制代码
#打开浏览器----驱动管理
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 等特殊按键:

python 复制代码
from selenium.webdriver.common.keys import Keys

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

2.3 清除操作:clear()

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

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

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

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

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

python 复制代码
assert text == "地底也有大量生命存在 能以地震为食"

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

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

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

现在百度改版了:

以前:

直接打印会出现报错。

是因为:

在value中,所以要:

但是现在可以直接打印:

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

python 复制代码
#打开浏览器----驱动管理
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_url

print(title)
print(url)

#关闭浏览器
driver.quit()

用于:

  • 返回当前页面的标题(如百度首页标题为 "百度一下,你就知道"),常用于验证是否跳转到正确页面。
  • 返回当前页面的 URL(如https://www.baidu.com),常用于验证 URL 是否符合预期。
相关推荐
nece00119 小时前
使用appium对安卓(使用夜神模拟器)运行自动化测试
自动化测试·appium·安卓自动化测试
程序员杰哥2 天前
Jmeter+Jenkins接口压力测试持续集成
自动化测试·软件测试·python·测试工具·jmeter·jenkins·压力测试
天才测试猿2 天前
测试用例如何评审?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
测试老哥6 天前
Jmeter自动化性能测试常见问题汇总
自动化测试·软件测试·测试工具·jmeter·接口测试·压力测试·性能测试
测试19986 天前
Web自动化测试:测试用例流程设计
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
测试老哥8 天前
pytest+requests+allure自动化测试接入Jenkins学习
自动化测试·软件测试·学习·测试工具·职场和发展·jenkins·pytest
xt19892888 天前
pytest+yaml+allure接口自动化测试框架
自动化测试·pytest·接口自动化·框架封装
程序员三藏9 天前
Selenium+python自动化测试:解决无法启动IE浏览器及报错问题
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例