WebSocketRoute
Page.RouteWebSocketAsync() または BrowserContext.RouteWebSocketAsync() で WebSocket ルートが設定されるたびに、WebSocketRoute オブジェクトは実際のサーバーと同様に WebSocket を処理できます。
モック
デフォルトでは、ルーティングされた WebSocket はサーバーに接続しません。この方法で、WebSocket を介した通信全体をモックできます。以下は、"request" に対して "response" で応答する例です。
await page.RouteWebSocketAsync("wss://example.com/ws", ws => {
ws.OnMessage(frame => {
if (frame.Text == "request")
ws.Send("response");
});
});
WebSocket ルートハンドラー内で WebSocketRoute.ConnectToServer を呼び出さない限り、Playwright は WebSocket がモックされると想定し、ページ内で WebSocket を自動的に開きます。
JSON メッセージを処理する別の例です。
await page.RouteWebSocketAsync("wss://example.com/ws", ws => {
ws.OnMessage(frame => {
using var jsonDoc = JsonDocument.Parse(frame.Text);
JsonElement root = jsonDoc.RootElement;
if (root.TryGetProperty("request", out JsonElement requestElement) && requestElement.GetString() == "question")
{
var response = new Dictionary<string, string> { ["response"] = "answer" };
string jsonResponse = JsonSerializer.Serialize(response);
ws.Send(jsonResponse);
}
});
});
インターセプト
あるいは、実際のサーバーに接続しつつ、その間でメッセージを傍受して変更したりブロックしたりすることもできます。WebSocketRoute.ConnectToServer を呼び出すと、サーバー側の WebSocketRoute インスタンスが返され、それにメッセージを送信したり、受信メッセージを処理したりできます。
以下は、ページからサーバーに送信される一部のメッセージを変更する例です。サーバーからページに送信されるメッセージは、デフォルトの転送に依存してそのまま残されます。
await page.RouteWebSocketAsync("/ws", ws => {
var server = ws.ConnectToServer();
ws.OnMessage(frame => {
if (frame.Text == "request")
server.Send("request2");
else
server.Send(frame.Text);
});
});
サーバーに接続すると、デフォルトですべての **メッセージは** ページとサーバー間で **転送されます**。
ただし、元のルートで WebSocketRoute.OnMessage() を呼び出すと、ページからサーバーへのメッセージは転送されなくなり、代わりにハンドラーによって処理される必要があります。
同様に、サーバー側の WebSocket で WebSocketRoute.OnMessage() を呼び出すと、サーバーからページへのメッセージの転送が停止され、ハンドラーがそれらを処理する必要があります。
次の例では、両方向のいくつかのメッセージをブロックします。両方向で WebSocketRoute.OnMessage() を呼び出しているため、自動転送は一切行われません。
await page.RouteWebSocketAsync("/ws", ws => {
var server = ws.ConnectToServer();
ws.OnMessage(frame => {
if (frame.Text != "blocked-from-the-page")
server.Send(frame.Text);
});
server.OnMessage(frame => {
if (frame.Text != "blocked-from-the-server")
ws.Send(frame.Text);
});
});
メソッド
CloseAsync
追加日: v1.48WebSocket 接続の片側を閉じます。
使用法
await WebSocketRoute.CloseAsync(options);
引数
optionsWebSocketRouteCloseOptions?(オプション)
戻り値
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);
引数
OnMessage
追加日: v1.48このメソッドは、WebSocket によって、ページから、またはサーバーから送信されたメッセージを処理することを可能にします。
元の WebSocket ルートで呼び出されると、このメソッドはページから送信されたメッセージを処理します。WebSocketRoute.Send() で応答したり、WebSocketRoute.ConnectToServer から返されたサーバー側接続に転送したり、その他の方法でこれらのメッセージを処理できます。
このメソッドが呼び出されると、メッセージは自動的にサーバーまたはページに転送されません。代わりに、WebSocketRoute.Send() を呼び出して手動で転送する必要があります。詳細については、冒頭の例を参照してください。
このメソッドを再度呼び出すと、ハンドラーが新しいものに上書きされます。
使用法
WebSocketRoute.OnMessage(handler);
引数
-
handlerAction<WebSocketFrame>#メッセージを処理する関数です。
Send
追加日: v1.48WebSocket にメッセージを送信します。元の WebSocket で呼び出されると、ページにメッセージを送信します。WebSocketRoute.ConnectToServer の結果で呼び出されると、サーバーにメッセージを送信します。詳細については、冒頭の例を参照してください。
使用法
WebSocketRoute.Send(message);
引数
Url
追加日: v1.48ページで作成された WebSocket の URL。
使用法
WebSocketRoute.Url
戻り値