You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Playwright+Chai验证按钮是否启用失败求助

解决Playwright+Chai验证按钮启用状态的问题

先明确你之前代码的核心问题:

  • verifyEmailButton是字符串选择器,并非Playwright的元素句柄,所以无法直接调用.toBeEnabled()或使用Chai的.disabled()断言——这些方法仅能作用于页面元素对象。
  • 你的按钮禁用是依靠原生HTML的disabled属性实现的,而非disabled类,所以用el.classList.contains("disabled")必然无效。

以下是几种可行的解决方法:

方案1:使用Playwright原生断言(推荐)

Playwright自带的断言会自动等待元素达到预期状态,无需手动处理等待逻辑,代码最简洁:

async wasEmail100CharactersFilled() {
  // 验证按钮已启用(不存在disabled属性)
  await expect(page.locator(verifyEmailButton)).toBeEnabled();
  // 若需验证按钮禁用,改用此断言
  // await expect(page.locator(verifyEmailButton)).toBeDisabled();
}

方案2:结合Chai断言+Playwright元素句柄

先获取元素句柄,再通过Chai断言其disabled属性状态:

async wasEmail100CharactersFilled() {
  const button = await page.locator(verifyEmailButton).first();
  const isDisabled = await button.isDisabled();
  // 验证按钮未禁用(即已启用)
  expect(isDisabled).to.be.false;
}

方案3:修正$eval用法

如果一定要用$eval,需直接判断元素的disabled属性,而非类名:

async wasEmail100CharactersFilled() {
  const isDisabled = await page.$eval(verifyEmailButton, el => el.disabled);
  // 验证按钮已启用,即isDisabled为false
  expect(isDisabled).to.be.false;
}

额外提醒:你之前写的should.exist(verifyEmailButton.toBeEnabled())完全错误,因为字符串类型的选择器没有toBeEnabled()方法,必须先通过选择器获取到页面元素对象,才能调用这类状态判断方法。

内容的提问来源于stack exchange,提问作者nosequeweaponer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:26:01