跳到主要內容

Clock

準確地模擬時間相關的行為對於驗證應用程式的正確性至關重要。深入瞭解時鐘模擬

請注意,時鐘是為整個 BrowserContext 安裝的,因此所有頁面和 iframe 中的時間都由同一個時鐘控制。


方法

fastForward

新增於:v1.45 clock.fastForward

透過跳躍前進時間來推進時鐘。只會最多觸發一次到期的計時器。這相當於使用者關閉筆記型電腦螢幕一段時間,然後在給定時間後重新開啟。

用法

page.clock().fastForward(1000);
page.clock().fastForward("30:00");

引數

  • ticks long | String#

    時間可以是推進時鐘的毫秒數或人類可讀的字串。有效的字串格式為「08」(八秒)、「01:00」(一分鐘)和「02:34:10」(兩小時 34 分 10 秒)。

傳回


install

新增於:v1.45 clock.install

為以下時間相關的函式安裝假的實作

  • Date
  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval
  • requestAnimationFrame
  • cancelAnimationFrame
  • requestIdleCallback
  • cancelIdleCallback
  • performance

假的計時器用於手動控制測試中的時間流動。它們讓您能夠推進時間、觸發計時器並控制時間相關函式的行為。請參閱 Clock.runFor()Clock.fastForward() 以取得更多資訊。

用法

Clock.install();
Clock.install(options);

引數

  • options Clock.InstallOptions (選用)
    • setTime long | String | Date (選用)#

      要初始化的時間,預設為目前系統時間。

傳回


pauseAt

新增於:v1.45 clock.pauseAt

透過跳躍前進時間來推進時鐘並暫停時間。一旦呼叫此方法,除非呼叫 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

繼續計時器。一旦呼叫此方法,時間將恢復流動,計時器將照常觸發。

用法

Clock.resume();

傳回


runFor

新增於:v1.45 clock.runFor

推進時鐘,觸發所有時間相關的回呼。

用法

page.clock().runFor(1000);
page.clock().runFor("30:00");

引數

  • ticks long | String#

    時間可以是推進時鐘的毫秒數或人類可讀的字串。有效的字串格式為「08」(八秒)、「01:00」(一分鐘)和「02:34:10」(兩小時 34 分 10 秒)。

傳回


setFixedTime

新增於:v1.45 clock.setFixedTime

使 Date.nownew 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 clock.setSystemTime

設定系統時間,但不觸發任何計時器。使用此功能來測試網頁對時間偏移的反應,例如從夏季切換到冬季時間,或變更時區。

用法

page.clock().setSystemTime(new Date());
page.clock().setSystemTime(new SimpleDateFormat("yyy-MM-dd").parse("2020-02-02"));
page.clock().setSystemTime("2020-02-02");

引數

傳回