昨日のエラーについて根本的な原因はわからんけども直接の原因と回避策はわかった。別のissueとQiita記事がヒントになった。
loading
loading
ページ遷移の際、page.waitForSelectorを使い、次のページにしかない要素の出現を待って遷移が完了したかどうかを確認しているのだけど、このときに Protocol error (Runtime.callFunctionOn): Target closed.
が発生しているようにみえた。
要は↓のような感じのコード。page.gotoだけじゃなくてclickで画面遷移する場合も同様に発生する。
await page.goto("https://......");
await page.waitForSelector("#kokonisikanaiID"); //ここでエラー
↓のようにすると Protocol error (Runtime.callFunctionOn): Target closed.
は発生しなくなる。なぜこれでエラーがでなくなるのかはさっぱりだが、Promise.allで解消するところをみるとおそらく実行順序が原因なのだと思う。この辺のテストを見ても参考になりそう
await Promise.all(
page.goto("https://......"),
page.waitForSelector("#kokonisikanaiID")
);
検証はここ終わりです。なぜなら今朝になって元のコードでもテストが落ちなくなったからです。レスポンスの遅延か?また発生したらまとめます。