使用Playwright断言处理条件判断问题
问题分析与解决方案
你的代码逻辑异常的核心原因是:Playwright的expect断言不会返回布尔值。当断言成功时,await expect(...)不会返回有效布尔值(实际为undefined);当断言失败时,它会直接抛出异常,代码会终止执行,根本走不到后续的if判断分支。
正确写法示例
方法1:使用try-catch捕获断言失败
try { // 尝试断言目标文本存在 await expect(this.page.locator('#id')).toContainText('text'); // 断言成功时执行的逻辑 await expect(this.page.locator('#id')).toContainText('text'); } catch (error) { // 断言失败(即条件不满足)时执行特定操作 await this.sendBtn.click(); await expect(this.page.locator('#id')).toContainText('Done'); }
方法2:直接获取文本进行判断
如果不需要等待文本加载,可直接获取元素文本后做逻辑判断:
const elementText = await this.page.locator('#id').textContent(); if (!elementText?.includes('text')) { await this.sendBtn.click(); await expect(this.page.locator('#id')).toContainText('Done'); } else { await expect(this.page.locator('#id')).toContainText('text'); }
若需要等待元素加载完成,可结合waitFor确保元素就绪:
await this.page.locator('#id').waitFor(); const elementText = await this.page.locator('#id').textContent(); if (!elementText?.includes('text')) { await this.sendBtn.click(); await expect(this.page.locator('#id')).toContainText('Done'); } else { await expect(this.page.locator('#id')).toContainText('text'); }
内容的提问来源于stack exchange,提问作者Stanislav Step
相关产品推荐
相关产品推荐

