
本文介绍如何通过 Selenium 自动化脚本验证网页表单中必填字段名称后是否正确显示星号(),涵盖定位标签、提取文本、断言校验等核心步骤,并提供健壮的代码示例与常见注意事项。
本文介绍如何通过 selenium 自动化脚本验证网页表单中必填字段名称后是否正确显示星号(*),涵盖定位标签、提取文本、断言校验等核心步骤,并提供健壮的代码示例与常见注意事项。
在 Web 表单自动化测试中,仅验证 <input required> 属性或前端校验逻辑(如 checkValidity())并不足以覆盖 UI 层面的用户体验要求——许多产品规范明确要求:*必填字段的标签(label)或占位文本必须在其后紧跟一个可见的星号 ``*(例如 “First Name*”、“Email Address”)。这类视觉标识是用户感知“必填性”的第一线索,因此需纳入端到端测试范围。
以下是推荐的 Selenium(Java/Python 均适用)验证方案,以 Python + WebDriver 为例:
✅ 步骤一:精准定位字段标签(Label)
避免依赖模糊的 find_element(By.XPATH, "//*[text()='First Name']"),因其无法区分纯文本与带星号的变体。应使用 contains() 精确匹配含 * 的完整文本:
from selenium.webdriver.common.by import By # 定位包含星号的标签(支持前后空格) label = driver.find_element(By.XPATH, "//label[contains(., 'First Name') and contains(., '*')]") # 或更严格:确保 * 紧跟在字段名后(允许零个或多个空白符) label = driver.find_element(By.XPATH, "//label[matches(text(), 'First Name\s*\*')]")
⚠️ 注意:
matches()需 WebDriver 4.11+ 且浏览器支持 XPath 2.0;若环境受限,建议用 Python 后处理校验:label_text = label.text.strip() assert label_text.endswith('*'), f"Label missing asterisk: '{label_text}'" assert label_text.replace('*', '').strip() in ['First Name', 'Last Name', 'Enter Address', 'Enter Phone Number']
✅ 步骤二:批量验证多个必填字段
构建可复用的校验函数,提升可维护性:
def assert_asterisk_on_labels(driver, field_names):
for name in field_names:
# 查找包含该字段名且带星号的 label 元素
xpath = f"//label[contains(., '{name}') and contains(., '*')]"
try:
label = driver.find_element(By.XPATH, xpath)
print(f"✓ Asterisk confirmed for '{name}'")
except:
raise AssertionError(f"✗ Missing asterisk on label: '{name}'")
# 调用示例
assert_asterisk_on_labels(driver, ["First Name", "Last Name", "Enter Address", "Enter Phone Number"])
✅ 补充说明:checkValidity() 的适用场景
原答案中提到的 driver.execute_script("return arguments[0].checkValidity()", inputElement) 是验证 HTML5 原生必填校验逻辑是否生效(如空值提交时返回 false),它不检测星号 UI,而是验证字段的 required 属性及实际输入状态。该方法适用于:
- 测试表单提交前的 JS 校验行为;
- 辅助确认
required属性是否被正确设置; - 但不可替代对
*符号的视觉存在性校验。
? 关键注意事项
-
避免硬编码空格:
"First Name*"可能因 CSS 渲染或换行变为"First Name *"或跨行显示,优先用contains(., 'First Name') and contains(., '*')组合判断; -
区分
label与placeholder:星号通常在<label></label>中,而非placeholder(后者属于输入框内提示,不体现必填语义); - 国际化适配:若支持多语言,需将字段名列表参数化(如从 YAML/JSON 加载),避免写死中文/英文;
-
动态加载场景:务必添加显式等待(
WebDriverWait),确保标签元素已渲染完成再执行校验。
通过上述方法,你不仅能可靠地验证星号的存在性,还能构建可扩展、易维护的表单 UI 合规性检查体系,真正覆盖设计规范与用户预期。










