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() を呼び出すと、ページからサーバーへのメッセージは転送されなくなり、代わりに handler によって処理されるべきです。
同様に、サーバー側のWebSocketで webSocketRoute.onMessage() を呼び出すと、サーバーからページへのメッセージの転送が停止され、handler がそれらを処理する必要があります。
以下の例は、両方向で一部のメッセージをブロックします。両方向で 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.48WebSocket接続の片側を閉じます。
使用法
await webSocketRoute.close();
await webSocketRoute.close(options);
引数
options
Object (オプション)
戻り値
connectToServer
追加バージョン: v1.48デフォルトでは、ルーティングされたWebSocketはサーバーに接続しないため、WebSocket通信全体をモックできます。このメソッドは、実際のWebSocketサーバーに接続し、サーバー側の WebSocketRoute インスタンスを返します。これにより、サーバーからメッセージを送受信する機能が提供されます。
サーバーに接続後
- サーバーから受信したメッセージは、サーバー側の
WebSocketRoute
で webSocketRoute.onMessage() が呼び出されない限り、ページ内のWebSocketに自動的に転送されます。 - ページ内の
WebSocket.send()
呼び出しによって送信されたメッセージは、元のWebSocketRoute
で webSocketRoute.onMessage() が呼び出されない限り、サーバーに自動的に転送されます。
詳細については、上部の例を参照してください。
使用法
webSocketRoute.connectToServer();
戻り値
onClose
追加バージョン: v1.48WebSocket.close
の処理を可能にします。
デフォルトでは、接続の片側を(ページまたはサーバーで)閉じると、もう一方も閉じられます。しかし、webSocketRoute.onClose() ハンドラが設定されている場合、クローズのデフォルトの転送は無効になり、ハンドラがそれを処理する必要があります。
使用法
webSocketRoute.onClose(handler);
引数
-
handler
function(number | [undefined]):Promise<Object> | Object#WebSocketのクローズを処理する関数です。オプションの クローズコード とオプションの クローズ理由 を受け取ります。
onMessage
追加バージョン: v1.48このメソッドは、WebSocketによって、ページからまたはサーバーから送信されるメッセージを処理することができます。
元のWebSocketルートで呼び出された場合、このメソッドはページから送信されたメッセージを処理します。これらのメッセージには、webSocketRoute.send() で応答したり、webSocketRoute.connectToServer() から返されたサーバー側接続に転送したり、その他の処理を行ったりすることができます。
このメソッドが呼び出されると、メッセージは自動的にサーバーやページに転送されません。代わりに、webSocketRoute.send() を呼び出して手動で転送する必要があります。詳細については、上部の例を参照してください。
このメソッドを再度呼び出すと、ハンドラが新しいものに上書きされます。
使用法
webSocketRoute.onMessage(handler);
引数
send
追加バージョン: v1.48WebSocketにメッセージを送信します。元のWebSocketで呼び出された場合、メッセージはページに送信されます。webSocketRoute.connectToServer() の結果で呼び出された場合、メッセージはサーバーに送信されます。詳細については、上部の例を参照してください。
使用法
webSocketRoute.send(message);
引数
url
追加バージョン: v1.48ページで作成されたWebSocketのURLです。
使用法
webSocketRoute.url();
戻り値