How to use webSocketId method in Playwright Internal

Best JavaScript code snippet using playwright-internal

server.js

Source:server.js Github

copy

Full Screen

1/*2 * (C) Copyright 2014-2015 Kurento (http://kurento.org/)3 *4 * All rights reserved. This program and the accompanying materials5 * are made available under the terms of the GNU Lesser General Public License6 * (LGPL) version 2.1 which accompanies this distribution, and is available at7 * http://www.gnu.org/licenses/lgpl-2.1.html8 *9 * This library is distributed in the hope that it will be useful,10 * but WITHOUT ANY WARRANTY; without even the implied warranty of11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU12 * Lesser General Public License for more details.13 *14 */15var path = require('path');16var url = require('url');17var cookieParser = require('cookie-parser');18var express = require('express');19var session = require('express-session')20var minimist = require('minimist');21var ws = require('ws');22var kurento = require('kurento-client');23var fs = require('fs');24var https = require('https');25process.env.NODE_TLS_REJECT_UNAUTHORIZED=0;26var argv = minimist(process.argv.slice(2), {27 default: {28 as_uri: 'https://localhost:8443/', // Kurento Application IP29 ws_uri: 'ws://localhost:8888/kurento' // Kurento Server IP30 }31});32var options =33{34 key: fs.readFileSync('keys/server.key'),35 cert: fs.readFileSync('keys/server.crt')36};37var app = express();38/*39 * Management of sessions40 */41app.use(cookieParser());42var sessionHandler = session({43 secret : 'none',44 rolling : true,45 resave : true,46 saveUninitialized : true47});48const kilo = 1024;49const BIT_RATE = 320; //kbps50app.use(sessionHandler);51/*52 * Definition of global variables.53 */54var sessions = {};55var candidatesQueue = {};56var kurentoClient = null;57var compositeHub = null;58var mediaPipeline = null;59/*60 * Server startup61 */62var asUrl = url.parse(argv.as_uri);63var port = asUrl.port;64var server = https.createServer(options, app).listen(port, function() {65 console.log('Kurento Tutorial started');66 console.log('Open ' + url.format(asUrl) + ' with a WebRTC capable browser');67});68var wss = new ws.Server({69 server : server,70 path : '/kurentomcu'71});72/*73 * Management of WebSocket messages74 */75wss.on('connection', function(ws, req) {76 var sessionId = null;77 var websocketId = null; // differ tabs78 var request = req;79 var response = {80 writeHead : {}81 };82 sessionHandler(request, response, function(err) {83 sessionId = request.session.id;84 console.log('Connection received with sessionId ' + sessionId);85 var websocketId = request.headers['sec-websocket-key'];86 });87 ws.on('error', function(error) {88 console.log('Connection ' + sessionId + ' error');89 stop(sessionId, websocketId);90 });91 ws.on('close', function() {92 console.log('Connection ' + sessionId + ' , ' + websocketId + ' closed');93 stop(sessionId, websocketId);94 });95 ws.on('message', function(_message) {96 var message = JSON.parse(_message);97 //console.log('Connection ' + sessionId + ' received message ', message);98 switch (message.id) {99 case 'start':100 sessionId = request.session.id;101 websocketId = request.headers['sec-websocket-key'];102 start(sessionId, websocketId, ws, message.sdpOffer, function(error, sdpAnswer) {103 if (error) {104 return ws.send(JSON.stringify({105 id : 'error',106 message : error107 }));108 }109 ws.send(JSON.stringify({110 id : 'startResponse',111 sdpAnswer : sdpAnswer112 }));113 });114 break;115 case 'stop':116 stop(sessionId, websocketId);117 break;118 case 'onIceCandidate':119 onIceCandidate(sessionId, websocketId, message.candidate);120 break;121 default:122 ws.send(JSON.stringify({123 id : 'error',124 message : 'Invalid message ' + message125 }));126 break;127 }128 });129});130/*131 * Definition of functions132 */133// Recover kurentoClient for the first time.134function getKurentoClient(callback) {135 if (kurentoClient !== null) {136 return callback(null, kurentoClient);137 }138 kurento(argv.ws_uri, function(error, _kurentoClient) {139 if (error) {140 console.log("Could not find media server at address " + argv.ws_uri);141 return callback("Could not find media server at address" + argv.ws_uri142 + ". Exiting with error " + error);143 }144 kurentoClient = _kurentoClient;145 callback(null, kurentoClient);146 });147}148function getMediaPipeline(callback) {149 if (mediaPipeline) {150 return callback(null, mediaPipeline);151 } else {152 kurentoClient.create('MediaPipeline', function(error, pipeline) {153 if (error) {154 return callback(error);155 }156 console.log('Creating MediaPipeline and Composite...');157 pipeline.listeners = 0;158 mediaPipeline = pipeline;159 return callback(null,pipeline);160 });161 }162}163function start(sessionId, websocketId, ws, sdpOffer, callback) {164 if (!sessionId || !websocketId) {165 return callback('Cannot use undefined sessionId/websocketId');166 }167 console.log('Adding user to MCU [ ' + sessionId + ', ' + websocketId + ' ]');168 getKurentoClient(function(error, kurentoClient) {169 if (error) {170 return callback(error);171 }172 getMediaPipeline( function(error, pipeline) {173 if (error) {174 return callback(error);175 }176 pipeline.listeners++;177 createMediaElements(pipeline, ws, function(error, webRtcEndpoint,178 hubPort) {179 if (error) {180 pipeline.release();181 return callback(error);182 }183 if (candidatesQueue[sessionId][websocketId]) {184 while(candidatesQueue[sessionId][websocketId].length) {185 var candidate = candidatesQueue[sessionId][websocketId].shift();186 webRtcEndpoint.addIceCandidate(candidate);187 }188 }189 connectMediaElements(webRtcEndpoint, hubPort,190 function(error) {191 if (error) {192 pipeline.release();193 return callback(error);194 }195 webRtcEndpoint.on('OnIceCandidate', function(event) {196 var candidate = kurento.register.complexTypes.IceCandidate(event.candidate);197 ws.send(JSON.stringify({198 id : 'iceCandidate',199 candidate : candidate200 }));201 ws.send(JSON.stringify({202 id : 'iceCandidate',203 candidate : candidate204 }));205 });206 webRtcEndpoint.processOffer(sdpOffer, function(error, sdpAnswer) {207 if (error) {208 pipeline.release();209 return callback(error);210 }211 if (!sessions[sessionId]) {212 sessions[sessionId] = {};213 }214 sessions[sessionId][websocketId] = {215 'pipeline' : pipeline,216 'webRtcEndpoint' : webRtcEndpoint,217 'hubPort' : hubPort218 }219 return callback(null, sdpAnswer);220 });221 webRtcEndpoint.gatherCandidates(function(error) {222 if (error) {223 return callback(error);224 }225 });226 });227 });228 });229 });230}231function createMediaElements(pipeline, ws, callback) {232 pipeline.create('WebRtcEndpoint', function(error, webRtcEndpoint) {233 if (error) {234 return callback(error);235 }236 var maxbps = Math.floor( BIT_RATE * kilo);237 webRtcEndpoint.setMinOutputBitrate(maxbps, function (error) {238 //console.log('[media] Min Output Bitrate (bps) ' + maxbps);239 if (error) {240 console.log('[media] Error: ' + error);241 }242 webRtcEndpoint.setMaxOutputBitrate(maxbps, function (error) {243 //console.log('[media] Min Output Bitrate (bps) ' + maxbps);244 if (error) {245 console.log('[media] Error: ' + error);246 }247 if (compositeHub) {248 compositeHub.createHubPort(function(error, hubPort){249 if (error){250 return callback(error);251 }252 hubPort.setMinOutputBitrate(maxbps, function (error) {253 hubPort.setMaxOutputBitrate(maxbps, function (error){254 return callback(null, webRtcEndpoint, hubPort);255 });256 });257 });258 }259 else260 {261 pipeline.create('Composite', function (error, composite) {262 if (error) {263 return callback(error);264 }265 compositeHub = composite;266 if (!compositeHub.outputVideoPort) {267 compositeHub.createHubPort(function(error, _outputVideoPort){268 if (error){269 return callback(error);270 }271 compositeHub.outputVideoPort = _outputVideoPort;272 _outputVideoPort.setMinOutputBitrate(maxbps, function (error) {273 _outputVideoPort.setMaxOutputBitrate(maxbps, function (error){274 composite.createHubPort(function(error, hubPort){275 if (error){276 return callback(error);277 }278 hubPort.setMinOutputBitrate(maxbps, function (error) {279 hubPort.setMaxOutputBitrate(maxbps, function (error){280 return callback(null, webRtcEndpoint, hubPort);281 });282 });283 });284 });285 });286 });287 } else {288 composite.createHubPort(function(error, hubPort){289 if (error){290 return callback(error);291 }292 hubPort.setMinOutputBitrate(maxbps, function (error) {293 hubPort.setMaxOutputBitrate(maxbps, function (error){294 return callback(null, webRtcEndpoint, hubPort);295 });296 });297 });298 }299 });300 }301 });302 });303 });304}305function connectMediaElements(webRtcEndpoint, hubPort, callback) {306 webRtcEndpoint.connect(hubPort, function(error) {307 if (error) {308 return callback(error);309 }310 if (compositeHub && compositeHub.outputVideoPort) {311 compositeHub.outputVideoPort.connect(webRtcEndpoint, 'VIDEO', function (error){312 if (error) {313 return callback(error);314 }315 hubPort.connect(webRtcEndpoint, 'AUDIO', function (error){316 if (error) {317 return callback(error);318 }319 return callback(null);320 });321 });322 }323 });324}325function stop(sessionId, websocketId) {326 if (sessions[sessionId] && sessions[sessionId][websocketId]) {327 console.log('Removing user from MCU [ ' + sessionId + ', ' + websocketId + ' ]');328 // var pipeline = sessions[sessionId].pipeline;329 // console.info('Releasing pipeline');330 // pipeline.release();331 var hubPort = sessions[sessionId][websocketId].hubPort;332 var webRtcEndpoint = sessions[sessionId][websocketId].webRtcEndpoint;333 if (hubPort) {334 hubPort.release(function (error) {335 if (webRtcEndpoint) {336 webRtcEndpoint.release();337 }338 delete sessions[sessionId][websocketId];339 delete candidatesQueue[sessionId][websocketId];340 if (mediaPipeline) {341 mediaPipeline.listeners--;342 if (mediaPipeline.listeners < 1) {343 mediaPipeline.release();344 mediaPipeline = null;345 compositeHub = null;346 console.log('Removing MediaPipeline and Composite...');347 }348 }349 });350 }351 }352}353process.on('SIGINT', function (error, signal){354 console.log('Stopping application...');355 if (mediaPipeline) {356 console.log('Removing MediaPipeline and Composite...');357 mediaPipeline.release(function (error) {358 exit();359 });360 } else {361 exit();362 }363});364function exit() {365 console.log('Bye!');366 process.exit();367}368function onIceCandidate(sessionId, websocketId, _candidate) {369 var candidate = kurento.register.complexTypes.IceCandidate(_candidate);370 if (sessions[sessionId] && sessions[sessionId][websocketId]) {371 //console.info('Sending candidate');372 var webRtcEndpoint = sessions[sessionId][websocketId].webRtcEndpoint;373 webRtcEndpoint.addIceCandidate(candidate);374 }375 else {376 //console.info('Queueing candidate');377 if (!candidatesQueue[sessionId]) {378 candidatesQueue[sessionId] = {};379 candidatesQueue[sessionId][websocketId] = [];380 } else {381 if (!candidatesQueue[sessionId][websocketId]) {382 candidatesQueue[sessionId][websocketId] = [];383 }384 }385 candidatesQueue[sessionId][websocketId].push(candidate);386 }387}...

Full Screen

Full Screen

main.js

Source:main.js Github

copy

Full Screen

1const WebSocket = require('ws');2const md5 = require('md5');3const port = 8000;4const { Expo } = require('expo-server-sdk');5const axios = require('axios');6wss = new WebSocket.Server({port: process.env.PORT || port},7console.log(`Running on port ${port}`));8let CLIENTS = [];9let ROADRUNNERS = [];10let ALLIES = [];11let ADMINS = [];12let PYTHON = [];13let IMAGE = "";14let CLIENTS_LISTENING = [];15let ROADRUNNERS_SPEAKING = [];16getKilometers = (lat1, lon1, lat2, lon2) => {17 rad = (x) => {return x * Math.PI/180;}18 var R = 6378.137; 19 var dLat = rad( lat2 - lat1 );20 var dLong = rad( lon2 - lon1 );21 var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 22 Math.cos(rad(lat1)) * Math.cos(rad(lat2)) * 23 Math.sin(dLong/2) * Math.sin(dLong/2);24 var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));25 var d = R * c;26 return d.toFixed(3);27}28SendPushNotificationCustomer = (pushToken, AllieName, Datas, Title, Body) => {29 let expo = new Expo();30 let messages = [];31 if (!Expo.isExpoPushToken(pushToken)) {32 console.error(`Push token ${pushToken} is not a valid Expo push token`);33 return;34 }35 messages.push({36 to: pushToken,37 sound: 'default',38 title: Title,39 body: Body,40 data: Datas41 });42 let chunks = expo.chunkPushNotifications(messages);43 let tickets = [];44 (async () => {45 for (let chunk of chunks) {46 try {47 let ticketChunk = await expo.sendPushNotificationsAsync(chunk);48 console.log(ticketChunk);49 tickets.push(...ticketChunk);50 } catch (error) {51 console.error(error);52 }53 }54 })();55}56SendPushNotificationRoadrunner = (pushToken, Datas) => {57 let expo = new Expo();58 let messages = [];59 if (!Expo.isExpoPushToken(pushToken)) {60 console.error(`Push token ${pushToken} is not a valid Expo push token`);61 return;62 }63 messages.push({64 to: pushToken,65 sound: 'default',66 title: '¡Hay un nuevo pedido cerca de tu ubicación!',67 body: `Para ver la infomación acerca del pedido toca aquí ✌️`,68 data: Datas69 });70 let chunks = expo.chunkPushNotifications(messages);71 let tickets = [];72 (async () => {73 for (let chunk of chunks) {74 try {75 let ticketChunk = await expo.sendPushNotificationsAsync(chunk);76 console.log(ticketChunk);77 tickets.push(...ticketChunk);78 } catch (error) {79 console.error(error);80 }81 }82 })();83}84SendDeliveryRequest = (ws) => {85 if (ws.hasOwnProperty('DataAttached')) {86 if (ws.DataAttached.hasOwnProperty('Delivery_Accepted') && ws.DataAttached.Delivery_Accepted === true) {87 const TokenC = ws.DataAttached.PushToken;88 const AllieName = ws.DataAttached.AllieName;89 console.log("Push delivery accepted sent!!!!!");90 let Title = '¡Tu orden ha sido recibida!';91 let Body = `En estos momentos un correcaminos se dirige a ${AllieName} para gestionar tu pedido... 🔥`;92 SendPushNotificationCustomer(TokenC, AllieName, ws.DataAttached, Title, Body);93 } else if (ws.DataAttached.hasOwnProperty('Delivery_Accepted') && ws.DataAttached.Delivery_Accepted === false) {94 if (ws.DataAttached.hasOwnProperty('CustomerLocation')) {95 if (ROADRUNNERS.length !== 0) {96 let C_lat = ws.DataAttached.CustomerLocation.Latitude;97 let C_lon = ws.DataAttached.CustomerLocation.Longitude;98 ROADRUNNERS.map(R => {99 let R_lat = R.DataAttached.RoadrunnerLocation.Latitude;100 let R_lon = R.DataAttached.RoadrunnerLocation.Longitude;101 let TokenR = R.DataAttached.PushToken;102 let kilometers = parseFloat(getKilometers(C_lat, C_lon, R_lat, R_lon));103 if (kilometers <= 2) {104 ws.DataAttached['RoadrunnerData'] = R.DataAttached;105 SendPushNotificationRoadrunner(TokenR, ws.DataAttached);106 }107 });108 }109 }110 }111 }112}113wss.on("connection", ws => {114 console.log(`There is a new client connected!`);115 ws.onmessage = (e) => {116 let res = JSON.parse(e.data);117 //console.log(res);118 if (res[0].hasOwnProperty('Type')) {119 switch (res[0].Type) {120 case "REQUEST_ORDER_CONFIRMATION":121 ws['WebsocketID'] = res[0].PushToken;122 ws['DataAttached'] = res[0];123 res[0]['OrderID'] = md5(res[0].PushToken);124 ws['Counts'] = 1;125 ws.DataAttached['Delivery_Accepted'] = false;126 ws.DataAttached['Order_Accepted'] = false;127 128 if (CLIENTS.length !== 0) {129 for (let s in CLIENTS) { 130 if (CLIENTS[s].WebsocketID !== res[0].PushToken) {131 CLIENTS.push(ws);132 }133 }134 } else if (CLIENTS.length === 0) { 135 CLIENTS.push(ws);136 }137 ALLIES.map(Allie => { if (Allie.AllieName === res[0].AllieName) { Allie.send(JSON.stringify(res[0])) } });138 break;139 case "REQUEST_ROADRUNNER":140 let Client = {};141 CLIENTS.map(item => {142 if (item.DataAttached.PushToken === res[0].PushToken) {143 Client = item;144 item.send(JSON.stringify([res[0]]));145 }146 });147 let Title = '¡Tu orden ha sido recibida!';148 let Body = `En estos momentos ${Client.DataAttached.AllieName} ha empezado a preparar tu orden, te notificaremos 149 cuando esté lista y un correcaminos vaya a retirarla! 🔥`;150 SendPushNotificationCustomer(Client.DataAttached.PushToken, res[0].AllieTable, res[0], Title, Body);151 setInterval(() => {152 if (ROADRUNNERS.length !== 0) {153 CLIENTS.map(client => {154 if (client.PushToken === res[0].PushToken && 155 client.DataAttached.Delivery_Accepted === false && client.Counts > 1) {156 let C_lat = client.DataAttached.CustomerLocation.Latitude;157 let C_lon = client.DataAttached.CustomerLocation.Longitude;158 if (ROADRUNNERS.length !== 0) {159 ROADRUNNERS.map(R => {160 console.log("Checking Mapping");161 let R_lat = R.DataAttached.RoadrunnerLocation.Latitude;162 let R_lon = R.DataAttached.RoadrunnerLocation.Longitude;163 let kilometers = parseFloat(getKilometers(C_lat, C_lon, R_lat, R_lon));164 if (kilometers <= 2) {165 client.DataAttached['RoadrunnerData'] = R.DataAttached;166 console.log("Checking Kilometers")167 SendPushNotificationRoadrunner(R.DataAttached.PushToken, client.DataAttached);168 console.log(`Kilometros: ${kilometers}Km`);169 }170 });171 } client.Counts += 1;172 } else {173 res['Delivery_Accepted'] = false;174 }175 });176 console.log("Nuevo While");177 }178 }, 180000);179 break;180 181 case "LOOKING_FOR_CLIENTS":182 ws['WebsocketID'] = res[0].PushToken;183 ws['DataAttached'] = res[0];184 if (ROADRUNNERS.length !== 0) {185 for (let s in ROADRUNNERS) { 186 if (ROADRUNNERS[s].WebsocketID !== res[0].PushToken) { 187 ROADRUNNERS.push(ws);188 }189 }190 } else if (ROADRUNNERS.length === 0) { 191 ROADRUNNERS.push(ws);192 }193 break;194 195 case "LOOKING_FOR_ORDERS":196 ws['WebsocketID'] = res[0].Token;197 ws['AllieName'] = res[0].AllieName;198 if (ALLIES.length !== 0) {199 for (let s in ALLIES) { 200 if (ALLIES[s].WebsocketID !== res[0].Token) {201 ALLIES.push(ws);202 }203 }204 } else if (ALLIES.length === 0) { 205 ALLIES.push(ws);206 } 207 break;208 209 case "DELIVERY_ACCEPTED":210 if (res[0].hasOwnProperty('Delivery_Accepted') && res[0].Delivery_Accepted === true) {211 CLIENTS.map(item => {212 if (item.DataAttached.PushToken === res[0].PushToken) {213 item.DataAttached.Delivery_Accepted = true;214 }215 });216 const TokenC = res[0].PushToken;217 const AllieName = res[0].AllieName;218 CLIENTS.map(Client => {219 console.log(Client.DataAttached.CustomerData.CustomerOrderID + "=" + res[0].CustomerData.CustomerOrderID);220 if (Client.DataAttached.CustomerData.CustomerOrderID === res[0].CustomerData.CustomerOrderID) {221 OrderAcc = Client.DataAttached.CustomerData.CustomerOrderID;222 ALLIES.map(allie => {223 if (allie.WebsocketID + "=" + res[0].AllieWebsocketID) {224 allie.send(JSON.stringify(res[0]));225 let Title = '¡Tu orden ha sido recibida!';226 let Body = `En estos momentos un correcaminos se dirige a ${AllieName} para gestionar tu pedido... 🔥`;227 SendPushNotificationCustomer(TokenC, AllieName, res[0], Title, Body);228 }229 });230 }231 });232 }233 break;234 235 case "LISTEN_ORDER_STATUS":236 if (CLIENTS_LISTENING.length !== 0) {237 let Client = CLIENTS_LISTENING.find(element => element.FinalOrder.OrderID !== res[0].OrderID);238 if (Client !== undefined) { 239 CLIENTS_LISTENING.push(ws);240 obj = {Type: 'PREPARING_ORDER', OrderID: res[0].OrderID}241 ws.send(JSON.stringify(obj));242 let NewArr = CLIENTS.filter(client => client.DataAttached.CustomerData.CustomerOrderID === res[0].OrderID);243 }244 } else {245 ws['FinalOrder'] = res[0];246 CLIENTS_LISTENING.push(ws);247 obj = {Type: 'PREPARING_ORDER', OrderID: res[0].OrderID}248 ws.send(JSON.stringify(obj));249 let NewArr = CLIENTS.filter(client => client.DataAttached.CustomerData.CustomerOrderID === res[0].OrderID);250 }251 break;252 253 case "SEND_STATUS_FOR_CLIENT":254 ROADRUNNERS_SPEAKING.push(res[0]);255 break;256 case "LOOK_FOR_EXTERNAL_DELIVERY":257 let order = res[0].order;258 259 break;260 261 default:262 ws.send(JSON.stringify({ Response: "No appropriate 'Case' found" }));263 }264 } else {265 ws.send(JSON.stringify({ Access: false, Reason: "There's no 'Type' Property" }));266 }267 console.log("Clientes:", CLIENTS.length);268 console.log("Correcaminos:", ROADRUNNERS.length);269 console.log("Aliados:", ALLIES.length);270 setTimeout(() => {271 SendDeliveryRequest(ws);272 }, 3000);273 };274 ws.on("close", (code) => {275 console.log("There was a close")276 console.log("There was an Automatic Close:", code)277 ws.send(JSON.stringify({CloseCode: code}));278 CLIENTS.map(item => {279 if (item === ws) { CLIENTS.splice(CLIENTS.indexOf(ws), 1) }280 });281 ALLIES.map(item => {282 if (item === ws) { ALLIES.splice(ALLIES.indexOf(ws), 1) }283 });284 ROADRUNNERS.map(item => {285 if (item === ws) { ROADRUNNERS.splice(ROADRUNNERS.indexOf(ws), 1) }286 });287 console.log("Clientes:", CLIENTS.length);288 console.log("Correcaminos:", ROADRUNNERS.length);289 console.log("Aliados:", ALLIES.length);290 });291 ws.on("error", () => {292 CLIENTS.map(item => {293 if (item === ws) { CLIENTS.splice(CLIENTS.indexOf(ws), 1) }294 });295 ALLIES.map(item => {296 if (item === ws) { ALLIES.splice(ALLIES.indexOf(ws), 1) }297 });298 ROADRUNNERS.map(item => {299 if (item === ws) { ROADRUNNERS.splice(ROADRUNNERS.indexOf(ws), 1) }300 });301 console.log("Clientes:", CLIENTS.length);302 console.log("Correcaminos:", ROADRUNNERS.length);303 console.log("Aliados:", ALLIES.length);304 });...

Full Screen

Full Screen

WebSocketPool.js

Source:WebSocketPool.js Github

copy

Full Screen

1import { eventChannel, delay } from 'redux-saga';2import uuidv4 from 'uuid/v4';3import { call, fork } from 'redux-saga/effects';4import { has } from '../../utils/utils';5export const SOCKET_CLOSED = 3;6export const SOCKET_CLOSING = 2;7export const SOCKET_OPEN = 1;8const KEEP_ALIVE_TIME_INTERVAL = 29000;9const MAX_NUMBEROF_SOCKETS = 10;10class WebSocketItem {11 constructor(socket, socketChannel, webSocketId, requests) {12 this.socket = socket;13 this.socketChannel = socketChannel;14 this.webSocketId = webSocketId;15 this.requests = requests;16 }17}18class WebSocketQueue {19 constructor() {20 this.items = [];21 }22 /*23 * enqueue function to add element24 * to the queue as per priority25 */26 enqueue = (webSocketItem) => {27 let contain = false;28 /*29 * find index through to add element at the30 * correct location of the Queue31 * so that queue is in ascending sort order32 * of number of requests33 */34 const index = this.items.findIndex(item =>35 item.requests.length > webSocketItem.requests.length);36 if (index > -1) {37 this.items.splice(index, 0, webSocketItem);38 contain = true;39 }40 /*41 * if the element have the highest number of requests42 * it is added at the end of the queue43 */44 if (!contain) {45 this.items.push(webSocketItem);46 }47 }48 // dequeue function49 dequeue = () => {50 /*51 * removing element from the queue52 * returns underflow when called53 * on empty queue54 */55 if (this.isEmpty()) { return 'Underflow'; }56 return this.items.shift();57 }58 // front function59 front = () => {60 /*61 * returns the Front element of62 * the queue without removing it.63 */64 if (this.isEmpty()) { return 'No elements in Queue'; }65 return this.items[0];66 }67 removeItem = (requestId) => {68 let webSocketItem = null;69 const webSocketItemIndex = this.items.findIndex(item => item.requests.includes(requestId));70 if (webSocketItemIndex > -1) {71 webSocketItem = this.items[webSocketItemIndex];72 this.items.splice(webSocketItemIndex, 1);73 }74 return webSocketItem;75 }76 // isEmpty function77 isEmpty = () =>78 // return true if the queue is empty.79 this.items.length === 080 // size function81 size = () =>82 // return the length of items.83 this.items.length84 // rear function85 rear = () => {86 /*87 * returns the lowest priorty88 * element of the queue89 */90 if (this.isEmpty()) { return 'No elements in Queue'; }91 return this.items[this.items.length - 1];92 }93 clear = () => {94 this.items.splice(0, this.items.length);95 }96 // printQueue function97 printQueue = () => {98 let str = '';99 this.items.forEach((item) => { str += `WebSocket: ${item.webSocketId} with requests: ${item.requests}\n`; });100 return str;101 }102 createWebSocketAsPromised = (isBroadCast = false) => {103 if (this.items.length >= MAX_NUMBEROF_SOCKETS) {104 return Promise.reject(new Error('Maximum limit for WebSockets reached.'));105 }106 return new Promise(((resolve, reject) => {107 const clarityURI = `${window.location.host}`;108 const webSocketId = `${uuidv4()}`;109 const socket = new WebSocket(110 `wss://${clarityURI}/ws/clarity?websocketId=${webSocketId}`,111 );112 // First eventChannel param is a subscribe function113 const socketChannel = eventChannel((emitter) => {114 const listener = (event) => {115 if (event.data) {116 emitter(JSON.parse(event.data));117 }118 };119 socket.onmessage = listener;120 socket.onerror = listener;121 const unsubscribe = () => {122 socket.close();123 };124 return unsubscribe;125 });126 const socketObj = new WebSocketItem(socket, socketChannel, webSocketId, []);127 socket.onopen = function () {128 console.log(`Socket for --> pool and socketId --> ${webSocketId}`);129 setInterval(() => {130 if (socket.readyState === SOCKET_OPEN) {131 socket.send('Keep alive');132 }133 }, KEEP_ALIVE_TIME_INTERVAL);134 resolve(socketObj);135 };136 socket.onerror = function (error) {137 console.error('WebSocketPoolError: socket connection error : ', error);138 reject(error);139 };140 }));141 }142}143export class WebSocketPool {144 constructor() {145 this.webSocketQueue = new WebSocketQueue();146 this.broadcastSocket = null;147 }148 // createWebSocket creates and returns the websocket149 createWebSocket = (isBroadCast = false) =>150 this.webSocketQueue.createWebSocketAsPromised(isBroadCast)151 .then(socketObj => socketObj)152 .catch(error => ({ error: `WebSocketPoolError:${error}` }));153 // getWebSocket (requestId) returns the next available websocket154 getWebSocket = (requestId, fName) => {155 try {156 const {157 socket, socketChannel, webSocketId, requests,158 } = this.webSocketQueue.dequeue();159 this.webSocketQueue.enqueue({160 socket, socketChannel, webSocketId, requests: [requestId, ...requests],161 });162 console.log(`WebSocketPool: allocated request: ${requestId} for ${fName} to webSocket = ${webSocketId} at: ${new Date()}`);163 console.log(`WebSocketPool - printqueue \n: ${this.webSocketQueue.printQueue()}`);164 return {165 socket, socketChannel, webSocketId, requests,166 };167 } catch (err) {168 console.log(`WebSocketPoolError:${err}`);169 return { webSocketId: null };170 }171 }172 // removeRequestsFromWebSocket (requestId)173 removeRequestsFromWebSocket = (requestId) => {174 try {175 const webSocketItem = this.webSocketQueue.removeItem(requestId);176 if (webSocketItem != null) {177 const {178 socket, socketChannel, webSocketId, requests,179 } = webSocketItem;180 // remove the request from webSocket requests and enqueue it back in the queue181 const index = requests.indexOf(requestId);182 if (index > -1) {183 requests.splice(index, 1);184 }185 this.webSocketQueue.enqueue({186 socket, socketChannel, webSocketId, requests,187 });188 console.log(`WebSocketPool: removed request: ${requestId} from webSocket = ${webSocketId} at: ${new Date()}`);189 console.log(`WebSocketPool - after removing printqueue\n: ${this.webSocketQueue.printQueue()}`);190 } else {191 console.log(`WebSocketPoolError: The requestId is already deleted from webSocket requests ${requestId}`);192 }193 } catch (err) {194 console.log(`WebSocketPoolError:${err}`);195 }196 }197 // closeWebSocket (webSocket)198 clearWebSocketPool = () => {199 // close each websocket first200 this.webSocketQueue.items.forEach((webSocketItem) => {201 if (webSocketItem.socket.readyState !== SOCKET_CLOSED ||202 webSocketItem.socket.readyState !== SOCKET_CLOSING) {203 console.log(`Closing socket for - ${webSocketItem.webSocketId}`);204 webSocketItem.socket.close();205 }206 });207 // clear the items from queue208 this.webSocketQueue.clear();209 }210}211export const BusinessWebSocketPool = new WebSocketPool();212export function* createWebSocketPool(fnwatchWebSocketPoolMessages) {213 if (BusinessWebSocketPool.webSocketQueue.size() < MAX_NUMBEROF_SOCKETS) {214 for (let i = 0; i < MAX_NUMBEROF_SOCKETS; i += 1) {215 if (i % 3 === 0) {216 /**217 * add delay of 2 seconds after every 3 websockets218 * so other requests pending in the queue219 */220 yield delay(2000);221 }222 const timeStart = new Date();223 const socketItem = yield call(BusinessWebSocketPool.createWebSocket);224 if (has(socketItem, 'WebSocketPoolError') || socketItem === undefined) {225 throw Error(socketItem);226 }227 console.log(socketItem);228 BusinessWebSocketPool.webSocketQueue.enqueue(socketItem);229 const { socketChannel } = socketItem;230 const timeEnd = new Date();231 console.log(`Time taken for socket creation for ${i} - ${timeEnd.getTime() - timeStart.getTime()}ms`);232 yield fork(fnwatchWebSocketPoolMessages, socketChannel);233 }234 }235 console.log(`WebSocketPool - printqueue\n:${BusinessWebSocketPool.webSocketQueue.printQueue()}`);...

Full Screen

Full Screen

userServiceTest.js

Source:userServiceTest.js Github

copy

Full Screen

1var cache = require.cache;2for (var moduleId in cache) {3 delete cache[moduleId];4}5var chai = require('chai');6var spies = require('chai-spies');7chai.use(spies);8var expect = chai.expect;9var should = chai.should();10var sinon = require("sinon");11var UserCommunicationService = require('./../../services/userCommunicationService.js');12var UserRepository = require('./../../repository/userRepository.js');13var UserService = require('./../../services/userService.js');14var userCommunicationServiceStub;15var userRepositoryStub;16var experienceInformation;17var webSocketId;18var token;19var items;20before(function(done){21 webSocketId = 2;22 token = "TOKEN";23 experienceInformation = {24 experiencePerLevel : [100,200,300],25 upgradePointsPerLevel : [1,2,3],26 maximumLevel : 227 };28 items = "ITEM";29 done();30});31describe("userService", function ()32{33 beforeEach(function(done)34 {35 userCommunicationServiceStub = sinon.createStubInstance(UserCommunicationService);36 userRepositoryStub = sinon.createStubInstance(UserRepository);37 done();38 });39 describe("setExperienceInformation", function()40 {41 it("should setExperienceInformation", function()42 {43 //Arrange44 var nextLevel = 1;45 var userService = new UserService(userRepositoryStub, userCommunicationServiceStub);46 var expectedResult = { nextLevelXp: experienceInformation.experiencePerLevel[nextLevel], pointForNextLevel: experienceInformation.upgradePointsPerLevel[nextLevel] };47 //Act48 userService.setExperienceInformation(experienceInformation.experiencePerLevel, experienceInformation.upgradePointsPerLevel, experienceInformation.maximumLevel);49 var result = userService.getInformationNextLevel(nextLevel);50 //Assert51 expect(JSON.stringify(expectedResult)).to.equal(JSON.stringify(result));52 });53 });54 describe("addUserItems", function()55 {56 it("should call userRepository addUserItems", function()57 {58 //Arrange59 var userService = new UserService(userRepositoryStub, userCommunicationServiceStub);60 var userSpy = chai.spy.on(userRepositoryStub, 'addUserItems');61 userService.addUserWebSocket(webSocketId, token);62 //Act63 userService.addUserItems(webSocketId, items);64 //Assert65 expect(userSpy).to.have.been.called.with(token, items);66 expect(userSpy).to.have.been.called.exactly(1);67 });68 });69 describe("updateUserItems", function()70 {71 it("should call userRepository updateUserItems", function()72 {73 //Arrange74 var userService = new UserService(userRepositoryStub, userCommunicationServiceStub);75 var userSpy = chai.spy.on(userRepositoryStub, 'updateUserItems');76 userService.addUserWebSocket(webSocketId, token);77 //Act78 userService.updateUserItems(webSocketId, items);79 //Assert80 expect(userSpy).to.have.been.called.with(token, items);81 expect(userSpy).to.have.been.called.exactly(1);82 });83 });84 describe("levelUpUser", function()85 {86 it("should call userRepository levelUpUser", function()87 {88 //Arrange89 var parameters = {a:1, b:2};90 var levelUpInformation = {c:4, d:5};91 var userService = new UserService(userRepositoryStub, userCommunicationServiceStub);92 var userSpy = chai.spy.on(userRepositoryStub, 'levelUpUser');93 userService.addUserWebSocket(webSocketId, token);94 //Act95 userService.levelUpUser(webSocketId, parameters, levelUpInformation);96 //Assert97 expect(userSpy).to.have.been.called.with(token, parameters, levelUpInformation);98 expect(userSpy).to.have.been.called.exactly(1);99 });100 });101 describe("updateUserExperience", function()102 {103 it("should call userRepository updateUserExperience", function()104 {105 //Arrange106 var experiencePoint = 100;107 var userService = new UserService(userRepositoryStub, userCommunicationServiceStub);108 var userSpy = chai.spy.on(userRepositoryStub, 'updateUserExperience');109 userService.addUserWebSocket(webSocketId, token);110 //Act111 userService.updateUserExperience(webSocketId, experiencePoint);112 //Assert113 expect(userSpy).to.have.been.called.with(token, experiencePoint);114 expect(userSpy).to.have.been.called.exactly(1);115 });116 });...

Full Screen

Full Screen

CordovaWebsocketPlugin.js

Source:CordovaWebsocketPlugin.js Github

copy

Full Screen

1const WS_ABNORMAL_CODE = 1006;2const connections = {};3const createId = function() {4 return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);5};6const wsAddListeners = function(webSocketId, success, error) {7 const webSocket = connections[webSocketId];8 webSocket.onmessage = function(event) {9 success({10 webSocketId: webSocketId,11 message: event.data,12 callbackMethod: "onMessage"13 });14 };15 webSocket.onclose = function(event) {16 error({17 webSocketId: webSocketId,18 code: event.code,19 reason: event.reason,20 callbackMethod: "onClose"21 });22 wsRemoveListeners(webSocketId);23 };24};25const wsRemoveListeners = function(webSocketId) {26 const webSocket = connections[webSocketId];27 webSocket.onmessage = undefined;28 webSocket.onclose = undefined29 connections[webSocketId] = undefined;30};31const CordovaWebsocketPlugin = {32 wsConnect: function(wsOptions, listener, success, error) {33 const webSocketId = createId();34 const webSocket = new WebSocket(wsOptions.url);35 let timeoutHandler;36 if (wsOptions.timeout && wsOptions.timeout > 0) {37 timeoutHandler = setTimeout(function() {38 webSocket.close();39 }, wsOptions.timeout);40 }41 webSocket.onopen = function() {42 if (timeoutHandler) {43 clearTimeout(timeoutHandler);44 }45 connections[webSocketId] = webSocket;46 wsAddListeners(webSocketId, listener, listener);47 success({ webSocketId: webSocketId, code: 0 });48 };49 webSocket.onerror = function() {50 error({51 webSocketId: webSocketId,52 code: WS_ABNORMAL_CODE,53 reason: "Error connecting to " + wsOptions.url,54 callbackMethod: "onFail"55 });56 }57 },58 wsSend: function(webSocketId, message) {59 const webSocket = connections[webSocketId];60 if (webSocket) {61 webSocket.send(message);62 }63 },64 wsClose: function(webSocketId, code, reason) {65 const webSocket = connections[webSocketId];66 if (webSocket) {67 webSocket.close(code, reason);68 wsRemoveListeners(webSocketId);69 }70 }71};...

Full Screen

Full Screen

userService.js

Source:userService.js Github

copy

Full Screen

1//Constructor2function UserService(userRepository, userCommunicationService)3{4 this.userWebSockets = {};5 this.userRepository = userRepository;6 this.userCommunicationService = userCommunicationService;7 this.experiencePerLevel = [];8 this.upgradePointsPerLevel = [];9 this.maximumLevel = 0;10}11//Public method12UserService.prototype.addUserWebSocket = function(webSocketId, token)13{14 this.userWebSockets[webSocketId] = token;15};16UserService.prototype.addUserItems = function(webSocketId, items)17{18 var token = this.userWebSockets[webSocketId];19 this.userRepository.addUserItems(token, items);20};21UserService.prototype.updateUserItems = function(webSocketId, items)22{23 var token = this.userWebSockets[webSocketId];24 this.userRepository.updateUserItems(token, items);25};26UserService.prototype.levelUpUser = function(webSocketId, parameters, levelUpInformation)27{28 var token = this.userWebSockets[webSocketId];29 this.userRepository.levelUpUser(token, parameters, levelUpInformation);30};31UserService.prototype.updateUserExperience = function(webSocketId, experiencePoints)32{33 var token = this.userWebSockets[webSocketId];34 this.userRepository.updateUserExperience(token, experiencePoints);35};36UserService.prototype.getInformationNextLevel = function(nextLevel)37{38 var levelPoint = { nextLevelXp: this.experiencePerLevel[nextLevel], pointForNextLevel: this.upgradePointsPerLevel[nextLevel] };39 return levelPoint;40};41UserService.prototype.setExperienceInformation = function(experiencePerLevel, upgradePointsPerLevel, maximumLevel) {42 this.experiencePerLevel = experiencePerLevel;43 this.upgradePointsPerLevel = upgradePointsPerLevel;44 this.maximumLevel = maximumLevel;45};46//Private method...

Full Screen

Full Screen

client.js

Source:client.js Github

copy

Full Screen

1import axios from 'axios'2import manageJwtToken from './manageJwtToken';3// Set config defaults when creating the instance4const client = axios.create({5 baseURL: "http://localhost:8080/api/"6 });7 client.interceptors.request.use((config) => {8 config.headers.token = manageJwtToken.getTokenFromLocalStorage()9 // if (store.getters['auth/webSocketId'] !== null) {10 // const webSocketId = store.getters['auth/webSocketId']11 // config.headers.WebSocketId = webSocketId12 // }13 return config14 })15// Add a response interceptor16client.interceptors.response.use(function (response) {17 // Any status code that lie within the range of 2xx cause this function to trigger18 // Do something with response data19 return response;20 }, function (error) {21 // Any status codes that falls outside the range of 2xx cause this function to trigger22 // Do something with response error23 return Promise.reject(error);24 });...

Full Screen

Full Screen

Room.js

Source:Room.js Github

copy

Full Screen

1const { hydrate } = require('../functions/utils');2class Room {3 constructor(data = {}) {4 /**5 * @type {string}6 */7 this.code = '';8 /**9 * @type {Object<Player>}10 */11 this.players = {};12 /**13 * @type {?Question}14 */15 this.currentQuestion = null;16 /**17 * @type {string}18 */19 this.hostWebsocketIds = [];20 hydrate(this, data);21 }22 /**23 * @param {Player} player24 */25 addPlayer(player) {26 this.players[player.id] = player;27 }28 /**29 * @param {string} websocketId30 *31 * @return {Player|undefined}32 */33 getPlayerByWebsocketId(websocketId) {34 return Object.values(this.players).find((p) => p.websocketId === websocketId);35 }36 /**37 * @param {?Question} question38 */39 setQuestion(question) {40 this.currentQuestion = question;41 }42}...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const playwright = require("playwright");2(async () => {3 const browser = await playwright.chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 console.log(await page.evaluate(() => window.webSocketId));7 await browser.close();8})();9const playwright = require("playwright");10(async () => {11 const browser = await playwright.chromium.launch({ headless: false });12 const context = await browser.newContext();13 const page = await context.newPage();14 console.log(await page.evaluate(() => window.webSocketId));15 await browser.close();16})();17const playwright = require("playwright");18(async () => {19 const browser = await playwright.chromium.launch({ headless: false });20 const context = await browser.newContext();21 const page = await context.newPage();22 console.log(await page.evaluate(() => window.webSocketId));23 await browser.close();24})();25const playwright = require("playwright");26(async () => {27 const browser = await playwright.chromium.launch({ headless: false });28 const context = await browser.newContext();29 const page = await context.newPage();30 console.log(await page.evaluate(() => window.webSocketId));31 await browser.close();32})();33const playwright = require("playwright");34(async () => {35 const browser = await playwright.chromium.launch({ headless: false });36 const context = await browser.newContext();37 const page = await context.newPage();38 console.log(await page.evaluate(() => window.webSocketId));39 await browser.close();40})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const playwright = require('playwright');2(async () => {3 const browser = await playwright.webkit.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const webSocket = await page.webSocketId();7 console.log(webSocket);8 await browser.close();9})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { webSocketId } = require('playwright/lib/internal/browserContext');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 const wsId = webSocketId(context);8 console.log(wsId);9 await page.screenshot({ path: `example.png` });10 await browser.close();11})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { webSocketId } = require("playwright/lib/client/webSocketTransport");2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 console.log(webSocketId(page));6 await browser.close();7})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;2console.log(webSocketId);3const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;4console.log(webSocketId);5const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;6console.log(webSocketId);7const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;8console.log(webSocketId);9const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;10console.log(webSocketId);11const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;12console.log(webSocketId);13const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;14console.log(webSocketId);15const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;16console.log(webSocketId);17const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;18console.log(webSocketId);19const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;20console.log(webSocketId);21const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;22console.log(webSocketId);23const webSocketId = browserContext._browser._connection._transport._ws._webSocketId;24console.log(webSocketId);

Full Screen

Using AI Code Generation

copy

Full Screen

1const { webSocketId } = require('playwright/internal/transport/webSocketTransport');2module.exports = { webSocketId };3const { webSocketId } = require('./test.js');4const playwright = require('playwright');5(async () => {6 const browser = await playwright.chromium.launch();7 const context = await browser.newContext();8 const page = await context.newPage();9 const id = webSocketId(page);10 console.log(id);11})();12[Error: Cannot find module 'playwright/internal/transport/webSocketTransport'] {13}14I tried to use browser.wsEndpoint() to get the web socket endpoint. But I’m getting an error

Full Screen

Using AI Code Generation

copy

Full Screen

1const webSocketId = require('playwright/lib/server/webSocketTransport').webSocketId;2console.log(webSocketId);3const webSocketId = require('playwright/lib/server/webSocketTransport').webSocketId;4ws.on('open', function open() {5 ws.send(JSON.stringify({id: 1, method: 'Target.getTargets'}));6});7ws.on('message', function incoming(data) {8 console.log(data);9});10{"id":1,"result":{"targetInfos":[{"targetId":"CD7E8D3E-7F51-4B0D-8E8B-9A5A5B5A5B5B","type":"page","title":"","url":"","attached":true,"browserContextId":"B1B1B1B1-B1B1-B1B1-B1B1-B1B1B1B1B1B1"}]}}11const webSocketDebuggerUrl = browserContext._browser._connection._transport.url();12const ws = new WebSocket(webSocketDebuggerUrl);13ws.on('open', function open() {14 ws.send(JSON.stringify({id: 1, method: 'Target.getTargets'}));15});16ws.on('message', function incoming(data) {17 console.log(data);18});19{"id":1,"result":{"targetInfos":[{"targetId":"CD7E8D3E-7F51-4B0D-8E8B-9A5A5B5A5B5B","type":"page","title":"","url":"","attached":true,"browserContextId":"B1B1B1B1-B1B1-B1B1-B

Full Screen

Using AI Code Generation

copy

Full Screen

1const { webSocketId } = require('playwright');2const wsEndpoint = webSocketId(browser);3const browser = await chromium.connect({ wsEndpoint });4const context = await browser.newContext();5const page = await context.newPage();6browser.close();

Full Screen

Using AI Code Generation

copy

Full Screen

1const webSocketId = await playwright._getBrowserForPage(page).webSocketId();2console.log(webSocketId);3const webSocketId = await playwright._getBrowserForPage(page).webSocketId();4console.log(webSocketId);5const webSocketId = await playwright._getBrowserForPage(page).webSocketId();6console.log(webSocketId);7const webSocketId = await playwright._getBrowserForPage(page).webSocketId();8console.log(webSocketId);9const webSocketId = await playwright._getBrowserForPage(page).webSocketId();10console.log(webSocketId);11const webSocketId = await playwright._getBrowserForPage(page).webSocketId();12console.log(webSocketId);13const webSocketId = await playwright._getBrowserForPage(page).webSocketId();14console.log(webSocketId);15const webSocketId = await playwright._getBrowserForPage(page).webSocketId();16console.log(webSocketId);17const webSocketId = await playwright._getBrowserForPage(page).webSocketId();18console.log(webSocketId);19const webSocketId = await playwright._getBrowserForPage(page).webSocketId();20console.log(webSocketId);21const webSocketId = await playwright._getBrowserForPage(page).webSocketId();22console.log(webSocketId);

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful