Clock
準確地模擬時間相關的行為對於驗證應用程式的正確性至關重要。深入瞭解時鐘模擬。
請注意,時鐘是為整個 BrowserContext 安裝的,因此所有頁面和 iframe 中的時間都由同一個時鐘控制。
方法
fastForward
新增於:v1.45透過跳躍前進時間來推進時鐘。只會最多觸發一次到期的計時器。這相當於使用者關閉筆記型電腦螢幕一段時間,然後在給定時間後重新開啟。
用法
page.clock().fastForward(1000);
page.clock().fastForward("30:00");
引數
傳回
install
新增於:v1.45為以下時間相關的函式安裝假的實作
Date
setTimeout
clearTimeout
setInterval
clearInterval
requestAnimationFrame
cancelAnimationFrame
requestIdleCallback
cancelIdleCallback
performance
假的計時器用於手動控制測試中的時間流動。它們讓您能夠推進時間、觸發計時器並控制時間相關函式的行為。請參閱 Clock.runFor() 和 Clock.fastForward() 以取得更多資訊。
用法
Clock.install();
Clock.install(options);
引數
傳回
pauseAt
新增於:v1.45透過跳躍前進時間來推進時鐘並暫停時間。一旦呼叫此方法,除非呼叫 Clock.runFor()、Clock.fastForward()、Clock.pauseAt() 或 Clock.resume(),否則不會觸發任何計時器。
只會最多觸發一次到期的計時器。這相當於使用者關閉筆記型電腦螢幕一段時間,然後在指定時間重新開啟並暫停。
用法
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd");
page.clock().pauseAt(format.parse("2020-02-02"));
page.clock().pauseAt("2020-02-02");
為了獲得最佳結果,請在導覽頁面之前安裝時鐘,並將其設定為略早於預期測試時間的時間。這可確保所有計時器在頁面載入期間正常執行,防止頁面卡住。頁面完全載入後,您可以安全地使用 Clock.pauseAt() 來暫停時鐘。
// Initialize clock with some time before the test time and let the page load
// naturally. `Date.now` will progress as the timers fire.
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd'T'HH:mm:ss");
page.clock().install(new Clock.InstallOptions().setTime(format.parse("2024-12-10T08:00:00")));
page.navigate("https://127.0.0.1:3333");
page.clock().pauseAt(format.parse("2024-12-10T10:00:00"));
引數
傳回
resume
新增於:v1.45繼續計時器。一旦呼叫此方法,時間將恢復流動,計時器將照常觸發。
用法
Clock.resume();
傳回
runFor
新增於:v1.45推進時鐘,觸發所有時間相關的回呼。
用法
page.clock().runFor(1000);
page.clock().runFor("30:00");
引數
傳回
setFixedTime
新增於:v1.45使 Date.now
和 new Date()
始終傳回固定的假時間,並保持所有計時器執行。
對於只需要使用預定義時間進行測試的簡單情境,請使用此方法。對於更進階的情境,請改用 Clock.install()。請閱讀關於時鐘模擬的文件以瞭解更多資訊。
用法
page.clock().setFixedTime(new Date());
page.clock().setFixedTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setFixedTime("2020-02-02");
引數
傳回
setSystemTime
新增於:v1.45設定系統時間,但不觸發任何計時器。使用此功能來測試網頁對時間偏移的反應,例如從夏季切換到冬季時間,或變更時區。
用法
page.clock().setSystemTime(new Date());
page.clock().setSystemTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setSystemTime("2020-02-02");
引數
傳回