メインコンテンツにスキップ

WebSocketRoute

WebSocket ルートが page.routeWebSocket() または browserContext.routeWebSocket() で設定されるたびに、WebSocketRoute オブジェクトは、実際のサーバーが行うように WebSocket を処理することを可能にします。

モック

デフォルトでは、ルーティングされた WebSocket はサーバーに接続しません。この方法で、WebSocket を介した通信全体をモックできます。以下は、"request" に対して "response" で応答する例です。

await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
});

WebSocket ルートハンドラー内で webSocketRoute.connectToServer() を呼び出さないため、Playwright は WebSocket がモックされると仮定し、ページ内で WebSocket を自動的に開きます。

JSON メッセージを処理する別の例です。

await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
const json = JSON.parse(message);
if (json.request === 'question')
ws.send(JSON.stringify({ response: 'answer' }));
});
});

インターセプト

あるいは、実際のサーバーに接続したいが、途中でメッセージをインターセプトして変更またはブロックしたい場合があります。webSocketRoute.connectToServer() を呼び出すと、サーバー側の WebSocketRoute インスタンスが返され、メッセージの送受信や受信メッセージの処理が可能になります。

以下は、ページからサーバーに送信される一部のメッセージを変更する例です。サーバーからページに送信されるメッセージは、デフォルトの転送に依存してそのまま残されます。

await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message === 'request')
server.send('request2');
else
server.send(message);
});
});

サーバーに接続すると、デフォルトですべての **メッセージは** ページとサーバー間で **転送されます**。

ただし、元のルートで webSocketRoute.onMessage() を呼び出すと、ページからサーバーへのメッセージは **転送されなくなり**、代わりに ハンドラー で処理する必要があります。

同様に、サーバー側の WebSocket で webSocketRoute.onMessage() を呼び出すと、サーバーからページへの **メッセージの転送が停止され**、ハンドラー がそれらを処理する必要があります。

以下の例では、両方向で一部のメッセージをブロックします。両方向で webSocketRoute.onMessage() を呼び出すため、自動転送はまったく行われません。

await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message !== 'blocked-from-the-page')
server.send(message);
});
server.onMessage(message => {
if (message !== 'blocked-from-the-server')
ws.send(message);
});
});

メソッド

close

追加日: v1.48 webSocketRoute.close

WebSocket 接続の片側を閉じます。

使用法

await webSocketRoute.close();
await webSocketRoute.close(options);

引数

戻り値


connectToServer

追加日: v1.48 webSocketRoute.connectToServer

デフォルトでは、ルーティングされた WebSocket はサーバーに接続しないため、WebSocket 通信全体をモックできます。このメソッドは、実際の WebSocket サーバーに接続し、サーバー側の WebSocketRoute インスタンスを返して、サーバーからメッセージを送受信する機能を提供します。

サーバーに接続すると

  • サーバーから受信したメッセージは、サーバー側の WebSocketRoutewebSocketRoute.onMessage() が呼び出されない限り、ページの WebSocket に **自動的に転送されます**。
  • ページで WebSocket.send() 呼び出しによって送信されたメッセージは、元の WebSocketRoutewebSocketRoute.onMessage() が呼び出されない限り、サーバーに **自動的に転送されます**。

詳細については、冒頭の例を参照してください。

使用法

webSocketRoute.connectToServer();

戻り値


onClose

追加日: v1.48 webSocketRoute.onClose

WebSocket.close を処理できます。

デフォルトでは、ページまたはサーバーのいずれかで接続の片側を閉じると、もう一方の側も閉じられます。ただし、webSocketRoute.onClose() ハンドラーが設定されている場合、閉鎖のデフォルト転送は無効になり、ハンドラーがそれを処理する必要があります。

使用法

webSocketRoute.onClose(handler);

引数


onMessage

追加日: v1.48 webSocketRoute.onMessage

このメソッドは、WebSocket によって、ページから、またはサーバーから送信されたメッセージを処理することを可能にします。

元の WebSocket ルートで呼び出されると、このメソッドはページから送信されたメッセージを処理します。これらのメッセージは、webSocketRoute.send() で応答するか、webSocketRoute.connectToServer() が返すサーバー側の接続に転送するか、または別の方法で処理できます。

このメソッドが呼び出されると、メッセージは自動的にサーバーまたはページに転送されません。代わりに、webSocketRoute.send() を手動で呼び出して転送する必要があります。詳細については、冒頭の例を参照してください。

このメソッドを再度呼び出すと、ハンドラーが新しいものに上書きされます。

使用法

webSocketRoute.onMessage(handler);

引数


send

追加日: v1.48 webSocketRoute.send

WebSocket にメッセージを送信します。元の WebSocket で呼び出されると、メッセージをページに送信します。webSocketRoute.connectToServer() の結果で呼び出されると、メッセージをサーバーに送信します。詳細については、冒頭の例を参照してください。

使用法

webSocketRoute.send(message);

引数


url

追加日: v1.48 webSocketRoute.url

ページで作成された WebSocket の URL。

使用法

webSocketRoute.url();

戻り値