Web 自动化测试常用函数实战(一)
在 Web 自动化测试中,掌握常用函数是实现脚本自动化的核心 —— 无论是定位页面元素、操作按钮输入,还是处理弹窗、控制浏览器窗口,都依赖于标准化的函数调用。本文将以Selenium+Python为工具(C++ 逻辑相通,重点掌握函数思想),系统梳理自动化测试中的八大核心函数模块,详解每个函数的用法、场景及避坑要点。
一、元素定位函数:自动化的 “眼睛”
Web 自动化的第一步是 “找到元素”—— 就像人操作页面需要先看到按钮、输入框,脚本也需要通过定位函数锁定目标元素。常见的定位方式有CSS Selector(选择器)
和XPath
(最常用、灵活性最高),其他如ID
、ClassName
可作为补充。
举个例子:打印多个热搜词
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 (选择器)通过元素的ID
、Class
、标签名等属性定位元素,语法简洁,执行速度快,是企业中最常用的定位方式之一。
核心语法
选择器类型 | 语法 | 说明 | 百度首页实战案例 |
---|---|---|---|
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,适合复杂场景(如无ID
、Class
的元素)。
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 获取文本与属性:text
与get_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("属性名")
获取元素的任意属性值(如value
、src
、href
),适用于文本不可见但属性存储值的场景(如输入框的默认值)。
现在百度改版了:
以前:
直接打印会出现报错。
是因为:
在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 获取页面信息:title
与current_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 是否符合预期。