5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

playwright-pythonではwaitForNavigationの代わりにexpect_navigationを使う

Posted at

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を使ってるっぽい

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?