微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证
前言
昨天在某平台发表了一篇这系列的文章,结果不但提示说有违禁词(java也算?),然后文章审核通过后,文章还找不到,不到去哪了,表示很郁闷,去反应未果,确实有点尴尬了。
元素的可操作性验证
关于API的命名,仅出自于我个人理解,旨在看的同学理解会用,感觉名字不好可以重写
哈!
1、何为元素的可操作性验证?
在采取行动之前对元素执行一系列可操作性检查,以确保这些行动按预期进行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果所需的检查未在给定范围内通过timeout
,则操作失败并显示TimeoutError
。
举个栗子:
如元素点击操作,在操作元素之前需要预判:
- 元素是否附加到DOM
- 元素是否可见
- 元素是否加载完成,因为没有为加载完元素不可操作
- 元素是否接收事件,因为没有被其他元素遮挡不可操作
- 元素是否可用
以下是针对每个操作执行的可操作性检查的完整列表:
Action | Attached | Visible | Stable | Receives Events | Enabled | Editable |
---|---|---|---|---|---|---|
check | Yes | Yes | Yes | Yes | Yes | - |
click | Yes | Yes | Yes | Yes | Yes | - |
dblclick | Yes | Yes | Yes | Yes | Yes | - |
setChecked | Yes | Yes | Yes | Yes | Yes | - |
tap | Yes | Yes | Yes | Yes | Yes | - |
uncheck | Yes | Yes | Yes | Yes | Yes | - |
hover | Yes | Yes | Yes | Yes | - | - |
scrollIntoViewIfNeeded | Yes | - | Yes | - | - | - |
screenshot | Yes | Yes | Yes | - | - | - |
fill | Yes | Yes | - | - | Yes | Yes |
selectText | Yes | Yes | - | - | - | - |
dispatchEvent | Yes | - | - | - | - | - |
focus | Yes | - | - | - | - | - |
getAttribute | Yes | - | - | - | - | - |
innerText | Yes | - | - | - | - | - |
innerHTML | Yes | - | - | - | - | - |
press | Yes | - | - | - | - | - |
setInputFiles | Yes | - | - | - | - | - |
selectOption | Yes | Yes | - | - | Yes | - |
textContent | Yes | - | - | - | - | - |
type | Yes | - | - | - | - | - |
2、常见检查元素的可操作性方法
注意:
- 当元素连接到
Document
或ShadowRoot
时,元素被视为已附加。 - 当元素具有非空边界框且没有
visibility:hidden
计
算样式时,元素被认为是可见的。请注意,零大小或带有的元素display:none
不被视为可见。 - 当元素在至少两个连续的动画帧中保持相同的边界框时,它被认为是稳定的。
- 元素被视为已启用,除非它是
<button>
、或具有属性。<select><input><textarea>disabled
- 元素在启用且未设置属性时被视为可编辑
readonly
。
3、举个栗子
判断按钮是否可用,如下图:
示例代码如下:
@Test
public void testCheck(){
System.out.println("按钮状态是否可用:"+page.locator("[value='Submit']").isEnabled());
System.out.println("按钮状态是否可用:"+page.locator("[value='Submit']").isDisabled());
}
最后
关于其他API
部分,请自行去尝试,说句实话,真的硬磕官方文档确实有点累,果然塑料英语是真的不行,希望不要误人子弟就好,建议英文好的同学,还是去看官方文档吧。
优秀不够,你是否无可替代
软件测试交流QQ群:721256703,期待你的加入!!
欢迎关注我的微信公众号:软件测试君

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库