跳到主要內容

Clock

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

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


方法

fastForward

Added in: v1.45 clock.fastForward

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

用法

await page.clock.fastForward(1000);
await page.clock.fastForward('30:00');

引數

  • ticks number | string#

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

回傳


install

Added in: v1.45 clock.install

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

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

偽造計時器用於手動控制測試中的時間流逝。它們允許您推進時間、觸發計時器,以及控制時間相關函式的行為。請參閱 clock.runFor()clock.fastForward() 以取得更多資訊。

用法

await clock.install();
await clock.install(options);

引數

  • options Object (選填)
    • time number | string | Date (選填)#

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

回傳


pauseAt

Added in: v1.45 clock.pauseAt

透過跳躍時間前進來推進時鐘並暫停時間。一旦呼叫此方法,除非呼叫 clock.runFor()clock.fastForward()clock.pauseAt()clock.resume(),否則不會觸發任何計時器。

只會觸發到期的計時器最多一次。這相當於使用者關閉筆記型電腦螢幕一段時間,然後在指定時間重新開啟並暫停。

用法

await page.clock.pauseAt(new Date('2020-02-02'));
await 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.
await page.clock.install({ time: new Date('2024-12-10T08:00:00') });
await page.goto('https://127.0.0.1:3333');
await page.clock.pauseAt(new Date('2024-12-10T10:00:00'));

引數

回傳


resume

Added in: v1.45 clock.resume

恢復計時器。一旦呼叫此方法,時間會恢復流逝,計時器會照常觸發。

用法

await clock.resume();

回傳


runFor

Added in: v1.45 clock.runFor

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

用法

await page.clock.runFor(1000);
await page.clock.runFor('30:00');

引數

  • ticks number | string#

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

回傳


setFixedTime

Added in: v1.45 clock.setFixedTime

使 Date.nownew Date() 始終回傳固定的偽造時間,保持所有計時器運作。

對於只需要使用預定義時間進行測試的簡單情境,請使用此方法。對於更進階的情境,請改用 clock.install()。請閱讀關於時鐘模擬的文件以了解更多資訊。

用法

await page.clock.setFixedTime(Date.now());
await page.clock.setFixedTime(new Date('2020-02-02'));
await page.clock.setFixedTime('2020-02-02');

引數

回傳


setSystemTime

Added in: v1.45 clock.setSystemTime

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

用法

await page.clock.setSystemTime(Date.now());
await page.clock.setSystemTime(new Date('2020-02-02'));
await page.clock.setSystemTime('2020-02-02');

引數

回傳