Playwright三种断言异常排查:第二、第三种断言问题解析
三种断言的问题分析
先看你给出的三段断言代码:
await page.getByText('Thank you for your purchase!', { exact: true }).isVisible(); await expect (page.getByText('Thank you for your purchase!', { exact: true }).isVisible()); expect(page.getByText('Thank you for your purchase!', { exact: true })).toBeVisible();
第二种断言的问题
page.getByText(...).isVisible()是异步方法,返回的是一个Promise。你直接把这个Promise传给expect,同时还加了await,这会导致await先解析出布尔值,再把布尔值传给expect。但Playwright的expect断言器期望接收的是Locator或者可异步解析的对象,不是直接的布尔值,所以会抛出"Property 'then' not found"错误。- 如果去掉
await,直接传未解析的Promise给expect,Playwright的expect不支持这种用法,而且测试流程可能已经走到结束阶段,Locator的异步方法isVisible()执行时测试上下文已经销毁,就会出现"Error: locator.isVisible: Test ended"的错误。
第三种断言的问题
expect(locator).toBeVisible()是Playwright的异步断言方法,必须加上await关键字才能正确等待断言完成。你漏掉了await,导致断言在Promise还没解析时就执行了,此时元素可能还没完成渲染(或者断言逻辑没等到元素可见的状态),所以会错误地提示元素已隐藏。而第一种写法是直接调用Locator的isVisible()并await,能正确等待元素状态,所以可以正常运行。
内容的提问来源于stack exchange,提问作者GetTok
相关产品推荐
相关产品推荐

