execute_async

execute_async

仕様書

実装

[2] ChromeDriver も GeckoDriver も、旧エンドポイントの execute や execute_async に対応しています。

[3] GeckoDriver は execute でも execute/sync でも、 約束が返されたら約束が解決されてから結果を返します。 ChromeDriver は約束オブジェクト自体を返します (が JSON で表せないので、 空のオブジェクトになります)。

[1] GeckoDriver は execute や execute/sync で返した約束が拒絶されたとき、 エラーでなく成功として返してきます。 そのため約束が成功裏に解決された場合と区別できません。

[4] ChromeDriver の execute_async は、 タイムアウトの既定値が0秒になっています。 すぐに実行できる約束のコールバックなどがなくなれば、 すぐにタイムアウトエラーを返します。 GeckoDriver の execute_async は、 タイムアウトの既定値が数分に設定されているようです。

[5] ChromeDriver では、 navigate を発生させるメソッドを実行してから、 Promise のコールバックを経て非同期的に execute_async のコールバックを呼び出すことにしていると、 navigate による unload が先に発生して、 WebDriver がエラー応答を返すことがあるようです。(微妙なタイミングの問題なので、 先にコールバックが呼び出されて成功の応答が返ることもあります。) GeckoDriver はそのようなことはなさそうですが、必ずかはわかりません。

[7] Error === window.Error が Chrome では真ですが、 Firefox では偽です。

[8] 最近の GeckoDriver では execute_async が 405 エラーになります。