Playwright 如何检查元素的值

输入框值用 expect(locator).toHaveValue()(支持正则);多选 select 用 toHaveValues();非表单元素的文本用 toHaveText()。区分 value 与 textContent 是关键。

最佳实践
测试检测与质量验证插画

一句话回答:表单元素(input/textarea/select)的值用 await expect(locator).toHaveValue('期望值')——Playwright 1.20+ 内置,自动等待重试。普通元素的文本内容用 toHaveText(),属性用 toHaveAttribute()。分清"值(value)、文本(text)、属性(attribute)"三者就不会选错。

输入框的值

// 精确匹配
await expect(page.locator('#name-input')).toHaveValue('张三');

// 正则匹配
await expect(page.locator('#name-input')).toHaveValue(/\S+/); // 非空白,兼容中文

// 空值校验
await expect(page.locator('#name-input')).toHaveValue('');

多选 select 的值

await page.locator('#fruits').selectOption(['apple', 'banana']);
await expect(page.locator('#fruits')).toHaveValues(['apple', 'banana']);

取到代码里用(非断言)

const value = await page.locator('#name-input').inputValue();  // 表单元素的值
const text  = await page.locator('.title').textContent();      // 元素的文本

inputValue() 只对表单元素有效;textContent() 返回原始文本(含隐藏部分),要"用户可见文本"用 innerText()。

inputValue() 读取当前 DOM value;getAttribute('value') 读取当前属性值,不一定随用户输入改变。多选 select 用 toHaveValues();读取时可评估 selectedOptions。以下片段默认在已配置的 Playwright Test 项目中,导入 test/expect 并先导航到自己的测试页面。

三者区别

目标 断言 取值方法
input/select 的 value toHaveValue() inputValue()
文本(默认 textContent) toHaveText();可见文本语义加 { useInnerText: true } innerText()
HTML 属性(href/class/data-*) toHaveAttribute() getAttribute()

常见问题(FAQ)

Q:toHaveValue 对 div/span 报错?

A:value 是表单元素的概念。div 的"值"是文本,用 toHaveText()。

Q:值为空但断言通过了?

A:input 的可见输入值不是子文本,toHaveText('') 不能校验输入值。用 toHaveValue('');普通文本的字符串断言会归一化空白,正则断言则按其匹配语义处理。

Q:富文本编辑器(contenteditable)怎么校验?

A:contenteditable 不是表单元素,inputValue() 不适用。用 toHaveText()/textContent() 校验内容;复杂组件(如富文本库)看其是否暴露了隐藏的 textarea。


参考资料

本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台