使用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
相关产品推荐
相关产品推荐

