我一直在 Python (v1.16) 上使用 Playwright 工具,并认为我会迁移我们的一些 Cypress 测试作为实验。但是,我遇到了几个与同一个问题相关的障碍:我需要等待一些任意的 DOM 状态,但不知道如何。
我知道 Playwright 可以等待一些元素状态,例如可见或分离,但我也想要一些等待其他 DOM 状态的东西,比如文本出现,元素属性具有特定值,或者元素中的 HTML 结构改变等
例如,在一个测试中,我有一个进度指示器,它会在表格完成后一秒左右更新。我想断言进度百分比达到预期值,但为了做到这一点,我需要等待进度元素的文本相应更改。如果不编写自己的投票方案,我不知道如何做到这一点。
在另一种情况下,我有一个Submit
以这种“非常酷”的动态方式构建的按钮,它使用.disabled
CSS 类向用户指示他们无法提交表单(该按钮还具有动态应用/删除其点击处理程序以强制执行禁用状态)。Playwright 对此一无所知,并认为该按钮已准备好在调用后立即被单击,click()
因为所有可操作性检查都会立即通过。在调用之前,我需要等待disabled
类从按钮中删除click()
。我怎样才能做到这一点?
我知道我可以为包含我想要等待的 DOM 位的元素创建新的选择器(例如text=5%
,向我的进度指示器选择器添加条件),但我不喜欢这样,因为如果它失败,我会得到一个通用的“我们找不到选择器”错误,而不是更类似于断言的错误,例如“等待元素的文本包含 5% 失败”。我还使用页面对象来存储我的选择器,如果我必须为每个元素上的每个断言创建一个新的选择器,那真的很糟糕。
是否有一种惯用的方式来等待不涉及复制/修改选择器的任意 DOM 状态?