メインコンテンツにスキップ

Clock

時間依存の動作を正確にシミュレートすることは、アプリケーションの正確性を検証するために不可欠です。詳細については、クロックエミュレーションをご覧ください。

クロックは BrowserContext 全体に対してインストールされるため、すべてのページと iframe の時間は同じクロックによって制御されることに注意してください。


メソッド

fastForward

Added in: v1.45 clock.fastForward

時間を進めるには、時間をジャンプフォワードします。期限切れのタイマーは最大で一度しか発火しません。これは、ユーザーがしばらくラップトップの蓋を閉じて、指定された時間が経過した後で再度開くのと同じです。

使用方法

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

引数

  • ticks number | string#

    時間は、クロックを進めるミリ秒数、または人間が読める文字列です。有効な文字列形式は、8秒の場合は "08"、1分の場合は "01:00"、2時間34分10秒の場合は "02: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 (optional)
    • time number | string | Date (optional)#

      初期化する時間。デフォルトは現在のシステム時間です。

戻り値


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('http://localhost: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#

    時間は、クロックを進めるミリ秒数、または人間が読める文字列です。有効な文字列形式は、8秒の場合は "08"、1分の場合は "01:00"、2時間34分10秒の場合は "02:34:10" です。

戻り値


setFixedTime

Added in: v1.45 clock.setFixedTime

Date.now と new 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

システム時間を設定しますが、タイマーはトリガーしません。これを使用して、Webページがタイムシフトにどのように反応するかをテストします。たとえば、夏時間から冬時間への切り替えや、タイムゾーンの変更などです。

使用方法

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

引数

戻り値