前言
昨天在某平臺發表了一篇這系列的文章,結果不但提示說有違禁詞(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
部分,請自行去嘗試,說句實話,真的硬磕官方文件確實有點累,果然塑膠英語是真的不行,希望不要誤人子弟就好,建議英文好的同學,還是去看官方文件吧。