in JS
Playwright(JS)だと、画面遷移を待つには、
- waitForNavigationを、画面遷移が発生するようなイベントの前に仕掛ける
- 画面遷移が発生するようなイベントのあとで、waitForNavigationの結果を待つ
というのが定石。
const navigationPromise = page.waitForNavigation();
await page.click('input[type="submit"]'); // 画面遷移が発生するようなイベント
await navigationPromise;
あるいはもっと単純に
await Promise.all([
page.waitForNavigation(),
page.click('input[type="submit"]'),
]);
こう書く。
in Python
さて、playwright-pythonのSync API(async/awaitを使わない方のAPI)で、こういう処理どうやって書けばいいんだろう?
(バージョン0.170.x 時点での)正解は
with page.expect_navigation():
page.click('input[type="submit"]') # 画面遷移が発生するようなイベント
なんて簡単。
waitForなんとか系のメソッドはだいたい同じで、with文と expect_****
のメソッドで囲うだけで、いい感じに非同期処理をやってくれる。ステキだ。
(内部実装的には、asyncioのFutureを使ってるっぽい)