私はこのシナリオを持っています:自分のスレッド内のSelenium非同期スクリプトは他のスクリプトをブロックします
ブラウザ内で異なるスクリプトを実行する必要があります。それらのうちの1つは、あるブラウザから別のブラウザにメッセージを送信することです(WebRTC)。私は各操作の遅延を測定し、特にメッセージを送信したいと考えています。
これを達成するために、スクリプトを実行している各セレンドライバのスレッドを作成しました。さらに、スレッドを作成して、他のブラウザからの観測されたブラウザにメッセージが到着するのを待っています。あなたは、私は、ブラウザがメッセージを受信した場合、呼び出されるコールバックをお待ちしておりますご覧のよう
String message = (String) ((JavascriptExecutor) driver).executeAsyncScript(
"window.receivedMessage = function(message_id){" +
"arguments[arguments.length - 1](message_id);" +
"}");
:メッセージを待機するスレッドは、このような非同期のスクリプトを実行します。
不幸にも、この非同期スクリプトがブラウザに登録された後に実行したい他のすべてのスクリプトをブロックします(.executeScript()または.executeAsyncScript()の場合は関係ありません)。
メッセージが到着するのを常に待っていて、他のスクリプトをウェブドライバで実行する方法はありますか?ところで
EDIT
:ビジーウェイトが解すべきではありません。私はセレンに何らかの形でオペレーションが行われたことを知らせる方法を、運転手の結果を常にポーリングすることなく好むでしょう。
メッセージがブラウザのUIで受信されたことを確認するオプションはありますか? – QVSJ
@QVSJメッセージを受信したブラウザにアクセスできるのでしょうか?はい。私はブラウザのコードも変更できます。 – firsti