---
# System prepended metadata

title: Auto-Wait Mechanisms
tags: [Chinese]

---

---
tags: Chinese
title: Auto-Wait Mechanisms
---

# 自動等待機制
SideeX具備強大且高效的Auto-Wait技術，在播放測試案例時，SideeX會在執行下一個指令前自動調節包含網頁改變的須等待時間並進行有效率的停等。使用SideeX，播放測試案例就像一個真人在幫你進行網頁操作。

## 等待時間上限調整
預設的等待時間為 **`10`** 秒，但該值是可在`SideeX基本設定頁面`或`SideeX Runner設定檔`中進行調整。若播放速度**過快**導致指令失敗時可調整至**較高**的值，若播放速度**過慢**可調整至**較低**的值。

## 相關指令
>- [pause](#pause)
>- [setSpeed](#setSpeed)
>- [verify/assertPresence](#verify/assertPresence)
>- [verify/assertVisibility](#verify/assertVisibility)
>- [waitForElementPresent](#waitForElementPresent)
>- [waitForElementNotPresent](#waitForElementNotPresent)
>- [waitForElementVisible](#waitForElementVisible)
>- [waitForElementNotVisible](#waitForElementNotVisible)

### pause
在某些情況，使用者可能想在兩個指令間暫停一段時間以便能進行更彈性的測試。使用`pause`指令就能做到這點，它會使播放過程**沉睡**一段時間後再繼續執行下一個指令。

### setSpeed
SideeX提供了5種播放速度可供使用者選擇，而`setSpeed`指令允許使用者在播放測試案例期間調整**播放速度**。**`5`** 是最快速並代表在執行下個指令前沒有任何延遲時間。每往下調慢一段速會增加執行下個指令前的延遲時間。

### verify/assertPresence
`verifyPresence`與`assertPresence`指令用於驗證目標元素現在是否於網頁上**呈現**(註：若目標元素出現在網頁DOM，即便在視覺上不可見，亦被判定為呈現)。例如：檢查下載按鈕**現在**有沒有呈現在導覽列上。

### waitForElementPresent
不像`verifyPresence`或`assertPresence`，若使用`waitForElementPresent`，當目標元素沒有出現在網頁DOM上時，在等待時間內該指令會持續**等待**目標元素於網頁上**呈現**。若等待時間上限已到而目標元素仍未出現在網頁DOM上，則驗證結果將被判定為失敗。例如：瀏覽到某網頁後，驗證**5秒內**訂閱按鈕是否出現。

### waitForElementNotPresent
有時，檢查目標元素是否在一段時間內被**移除**(註：若目標元素不在網頁DOM，才被判定為移除)反而是我們想做的，此時就可以使用`waitForElementNotPresent`並給定一個最大等待時間來達成。例如：點擊離開按鈕後，驗證**5秒內**廣告是否被移除。

### verify/assertVisibility
`verifyVisibility`與`assertVisibility`指令用於驗證目標元素現在是否**可見**(註：目標元素為`全透明`、`隱藏`或`部分被遮蔽`，則被判定為不可見)。例如：檢查FAQ按鈕**現在**是否是可見的。

### waitForElementVisible
不像`verifyVisibility`或`assertVisibility`，若使用`waitForElementVisible`，當目標元素是不可見時，在等待時間內該指令會持續**等待**目標元素變為**可見**。若等待時間上限已到而目標元素仍為不可見，則驗證結果將被判定為失敗。例如：點擊某按鈕後，驗證**5秒內**某元素的CSS屬性是否從視覺上隱藏變為視覺上可見。

### waitForElementNotVisible
在某些情況中，若目標元素經過一段時間後仍為不可見代表網頁可能有程式錯誤的情況發生；換句話說，目標元素應變為**不可見**才是正確的。此時就可以使用`waitForElementNotVisible`並給定一個最大等待時間來達成。例如：點擊某按鈕後，驗證**5秒內**某元素的CSS屬性是否從視覺上可見變為視覺上隱藏。

## 指令在超時前會持續等待的情況
以下有幾張圖表探討哪些情況下`verifyPresence`, `assertPresence`, `waitForElementPresent`, `waitForElementNotPresent`, `verifyVisibility`, `assertVisibility`,  `waitForElementVisible`,或`waitForElementNotVisible`在超時前會持續等待。
| case → | **Element is present** | **Element is not present** |
|:- |:-:|:-:|
| **verify/assertPresence** | 執行成功 | 執行失敗 |
| **waitForElementPresent** | 執行成功 | 會等待 |
| **waitForElementNotPresent** | 會等待 | 執行成功 |

- 當使用`verify/assertPresence`時，若目標元素此刻沒有出現在網頁DOM，**立即判定驗證失敗**
- 當使用`waitForElementPresent`時，若目標元素沒有出現在網頁DOM上，則在超時前會**持續等待目標元素出現**
- 當使用`waitForElementNotPresent`時，若目標元素出現在網頁DOM上，則在超時前會**持續等待目標元素被移除**

| case → | Element is visible | Element is invisible |
|:-|:-:|:-:|
| **verify/assertVisibility** | 執行成功 | 執行失敗 |
| **waitForElementVisible** | 執行成功 | 會等待 |
| **waitForElementNotVisible** | 會等待 | 執行成功 |

- 當使用`verify/assertVisibility`時，若目標元素此刻為不可見，**立即判定驗證失敗**
- 當使用`waitForElementVisible`時，若目標元素為不可見，則在超時前會**持續等待目標元素變為可見**
- 當使用`waitForElementNotVisible`時，若目標元素為可見，則在超時前會**持續等待目標元素變為不可見**