Playwright上手学习4
自动等待
Playwright在最目标元素操作之前会对其进行一系列可操作性检查,确保这些预期操作能正常运行。Playwright会自动等待所有相关检查通过,之后再执行请求操作。如果在规定的时间内没有通过所有检查,则会操作失败并显示TimeoutError。
比如,对于 page.click(selector, **kwargs)
,Playwright会在之前进行如下检查:
- 目标元素依附于DOM中
- 目标元素可见
- 目标元素是稳定的,如没有加载动画等
- 目标元素可以触发事件,没有被其它元素遮挡
- 目标元素已启用(Enabled)
Playwright的自动等待机制解决了Selenium的痛点,无需二次开发,提高脚本稳定性
下面是所有需要进行可操作性检查的Action列表
Forcing action
一些actions,比如page.click(selector, **kwargs)
支持禁用非必要的可操作性检查的强制选项。
断言
同样也可以使用以下断言方法来检查目标元素的可操作性。虽然不是非必需,但可以帮助我们确认在进行某些之后,元素达到目标期望状态:
- element_handle.is_checked()
- element_handle.is_disabled()
- element_handle.is_editable()
- element_handle.is_enabled()
- element_handle.is_hidden()
- element_handle.is_visible()
- page.is_checked(selector, **kwargs)
- page.is_disabled(selector, **kwargs)
- page.is_editable(selector, **kwargs)
- page.is_enabled(selector, **kwargs)
- page.is_hidden(selector, **kwargs)
- page.is_visible(selector, **kwargs)
- locator.is_checked(**kwargs)
- locator.is_disabled(**kwargs)
- locator.is_editable(**kwargs)
- locator.is_enabled(**kwargs)
- locator.is_hidden(**kwargs)
- locator.is_visible(**kwargs)
元素可操作性检查,名词解释
Attached
目标元素与Document或ShadowRoot连接时,认为其是Attached
Visible
目标元素具有非空边界框且没有样式属性visibility:hidden
时,认为其是Visible。注意,零尺寸或display:none
的元素不被视为可见
Stable
目标元素在至少两个连续动画帧中保持相同的边界框时,认为其是Stable。
Enabled
目标元素为<button>, <select>, <input> ,<textarea>
时,且没有disabled
属性值时,认为其是Enabled
Editable
目标元素在Enabled时,且没有readonly属性,认为其是Editable
Receives Events
当元素在动作点是指针事件的命中目标时,被认为接收指针事件。例如,当点击(10;10)时,Playwright 检查是否有其他元素(通常是叠加层)将捕获 (10;10) 处的点击。