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