Best JavaScript code snippet using ts-auto-mock
postProcessManager.ts
Source:postProcessManager.ts
1import { Nullable } from "../types";2import { InternalTexture } from "../Materials/Textures/internalTexture";3import { PostProcess } from "./postProcess";4import { VertexBuffer } from "../Buffers/buffer";5import { Constants } from "../Engines/constants";6import { DataBuffer } from '../Buffers/dataBuffer';7import { RenderTargetWrapper } from "../Engines/renderTargetWrapper";8declare type Scene = import("../scene").Scene;9/**10 * PostProcessManager is used to manage one or more post processes or post process pipelines11 * See https://doc.babylonjs.com/how_to/how_to_use_postprocesses12 */13export class PostProcessManager {14 private _scene: Scene;15 private _indexBuffer: Nullable<DataBuffer>;16 private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};17 /**18 * Creates a new instance PostProcess19 * @param scene The scene that the post process is associated with.20 */21 constructor(scene: Scene) {22 this._scene = scene;23 }24 private _prepareBuffers(): void {25 if (this._vertexBuffers[VertexBuffer.PositionKind]) {26 return;27 }28 // VBO29 var vertices = [];30 vertices.push(1, 1);31 vertices.push(-1, 1);32 vertices.push(-1, -1);33 vertices.push(1, -1);34 this._vertexBuffers[VertexBuffer.PositionKind] = new VertexBuffer(this._scene.getEngine(), vertices, VertexBuffer.PositionKind, false, false, 2);35 this._buildIndexBuffer();36 }37 private _buildIndexBuffer(): void {38 // Indices39 var indices = [];40 indices.push(0);41 indices.push(1);42 indices.push(2);43 indices.push(0);44 indices.push(2);45 indices.push(3);46 this._indexBuffer = this._scene.getEngine().createIndexBuffer(indices);47 }48 /**49 * Rebuilds the vertex buffers of the manager.50 * @hidden51 */52 public _rebuild(): void {53 let vb = this._vertexBuffers[VertexBuffer.PositionKind];54 if (!vb) {55 return;56 }57 vb._rebuild();58 this._buildIndexBuffer();59 }60 // Methods61 /**62 * Prepares a frame to be run through a post process.63 * @param sourceTexture The input texture to the post processes. (default: null)64 * @param postProcesses An array of post processes to be run. (default: null)65 * @returns True if the post processes were able to be run.66 * @hidden67 */68 public _prepareFrame(sourceTexture: Nullable<InternalTexture> = null, postProcesses: Nullable<PostProcess[]> = null): boolean {69 let camera = this._scene.activeCamera;70 if (!camera) {71 return false;72 }73 postProcesses = postProcesses || (<Nullable<PostProcess[]>>camera._postProcesses.filter((pp) => { return pp != null; }));74 if (!postProcesses || postProcesses.length === 0 || !this._scene.postProcessesEnabled) {75 return false;76 }77 postProcesses[0].activate(camera, sourceTexture, postProcesses !== null && postProcesses !== undefined);78 return true;79 }80 /**81 * Manually render a set of post processes to a texture.82 * Please note, the frame buffer won't be unbound after the call in case you have more render to do.83 * @param postProcesses An array of post processes to be run.84 * @param targetTexture The render target wrapper to render to.85 * @param forceFullscreenViewport force gl.viewport to be full screen eg. 0,0,textureWidth,textureHeight86 * @param faceIndex defines the face to render to if a cubemap is defined as the target87 * @param lodLevel defines which lod of the texture to render to88 * @param doNotBindFrambuffer If set to true, assumes that the framebuffer has been bound previously89 */90 public directRender(postProcesses: PostProcess[], targetTexture: Nullable<RenderTargetWrapper> = null, forceFullscreenViewport = false, faceIndex = 0, lodLevel = 0, doNotBindFrambuffer = false): void {91 var engine = this._scene.getEngine();92 for (var index = 0; index < postProcesses.length; index++) {93 if (index < postProcesses.length - 1) {94 postProcesses[index + 1].activate(this._scene.activeCamera, targetTexture?.texture);95 } else {96 if (targetTexture) {97 engine.bindFramebuffer(targetTexture, faceIndex, undefined, undefined, forceFullscreenViewport, lodLevel);98 } else if (!doNotBindFrambuffer) {99 engine.restoreDefaultFramebuffer();100 }101 engine._debugInsertMarker?.(`post process ${postProcesses[index].name} output`);102 }103 var pp = postProcesses[index];104 var effect = pp.apply();105 if (effect) {106 pp.onBeforeRenderObservable.notifyObservers(effect);107 // VBOs108 this._prepareBuffers();109 engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);110 // Draw order111 engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);112 pp.onAfterRenderObservable.notifyObservers(effect);113 }114 }115 // Restore depth buffer116 engine.setDepthBuffer(true);117 engine.setDepthWrite(true);118 }119 /**120 * Finalize the result of the output of the postprocesses.121 * @param doNotPresent If true the result will not be displayed to the screen.122 * @param targetTexture The render target wrapper to render to.123 * @param faceIndex The index of the face to bind the target texture to.124 * @param postProcesses The array of post processes to render.125 * @param forceFullscreenViewport force gl.viewport to be full screen eg. 0,0,textureWidth,textureHeight (default: false)126 * @hidden127 */128 public _finalizeFrame(doNotPresent?: boolean, targetTexture?: RenderTargetWrapper, faceIndex?: number, postProcesses?: Array<PostProcess>, forceFullscreenViewport = false): void {129 let camera = this._scene.activeCamera;130 if (!camera) {131 return;132 }133 postProcesses = postProcesses || <Array<PostProcess>>camera._postProcesses.filter((pp) => { return pp != null; });134 if (postProcesses.length === 0 || !this._scene.postProcessesEnabled) {135 return;136 }137 var engine = this._scene.getEngine();138 for (var index = 0, len = postProcesses.length; index < len; index++) {139 var pp = postProcesses[index];140 if (index < len - 1) {141 pp._outputTexture = postProcesses[index + 1].activate(camera, targetTexture?.texture);142 } else {143 if (targetTexture) {144 engine.bindFramebuffer(targetTexture, faceIndex, undefined, undefined, forceFullscreenViewport);145 pp._outputTexture = targetTexture;146 } else {147 engine.restoreDefaultFramebuffer();148 pp._outputTexture = null;149 }150 engine._debugInsertMarker?.(`post process ${postProcesses[index].name} output`);151 }152 if (doNotPresent) {153 break;154 }155 var effect = pp.apply();156 if (effect) {157 pp.onBeforeRenderObservable.notifyObservers(effect);158 // VBOs159 this._prepareBuffers();160 engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);161 // Draw order162 engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, 6);163 pp.onAfterRenderObservable.notifyObservers(effect);164 }165 }166 // Restore states167 engine.setDepthBuffer(true);168 engine.setDepthWrite(true);169 engine.setAlphaMode(Constants.ALPHA_DISABLE);170 }171 /**172 * Disposes of the post process manager.173 */174 public dispose(): void {175 var buffer = this._vertexBuffers[VertexBuffer.PositionKind];176 if (buffer) {177 buffer.dispose();178 this._vertexBuffers[VertexBuffer.PositionKind] = null;179 }180 if (this._indexBuffer) {181 this._scene.getEngine()._releaseBuffer(this._indexBuffer);182 this._indexBuffer = null;183 }184 }...
postProcessRenderEffect.ts
Source:postProcessRenderEffect.ts
1import { Nullable } from "../../types";2import { Tools } from "../../Misc/tools";3import { Camera } from "../../Cameras/camera";4import { PostProcess } from "../../PostProcesses/postProcess";5import { Engine } from "../../Engines/engine";6/**7 * This represents a set of one or more post processes in Babylon.8 * A post process can be used to apply a shader to a texture after it is rendered.9 * @example https://doc.babylonjs.com/how_to/how_to_use_postprocessrenderpipeline10 */11export class PostProcessRenderEffect {12 private _postProcesses: { [Key: string]: Array<PostProcess> };13 private _getPostProcesses: () => Nullable<PostProcess | Array<PostProcess>>;14 private _singleInstance: boolean;15 private _cameras: { [key: string]: Nullable<Camera> };16 private _indicesForCamera: { [key: string]: number[] };17 /**18 * Name of the effect19 * @hidden20 */21 public _name: string;22 /**23 * Instantiates a post process render effect.24 * A post process can be used to apply a shader to a texture after it is rendered.25 * @param engine The engine the effect is tied to26 * @param name The name of the effect27 * @param getPostProcesses A function that returns a set of post processes which the effect will run in order to be run.28 * @param singleInstance False if this post process can be run on multiple cameras. (default: true)29 */30 constructor(engine: Engine, name: string, getPostProcesses: () => Nullable<PostProcess | Array<PostProcess>>, singleInstance?: boolean) {31 this._name = name;32 this._singleInstance = singleInstance || true;33 this._getPostProcesses = getPostProcesses;34 this._cameras = {};35 this._indicesForCamera = {};36 this._postProcesses = {};37 }38 /**39 * Checks if all the post processes in the effect are supported.40 */41 public get isSupported(): boolean {42 for (var index in this._postProcesses) {43 if (this._postProcesses.hasOwnProperty(index)) {44 let pps = this._postProcesses[index];45 for (var ppIndex = 0; ppIndex < pps.length; ppIndex++) {46 if (!pps[ppIndex].isSupported) {47 return false;48 }49 }50 }51 }52 return true;53 }54 /**55 * Updates the current state of the effect56 * @hidden57 */58 public _update(): void {59 }60 /**61 * Attaches the effect on cameras62 * @param cameras The camera to attach to.63 * @hidden64 */65 public _attachCameras(cameras: Camera): void;66 /**67 * Attaches the effect on cameras68 * @param cameras The camera to attach to.69 * @hidden70 */71 public _attachCameras(cameras: Camera[]): void;72 /**73 * Attaches the effect on cameras74 * @param cameras The camera to attach to.75 * @hidden76 */77 public _attachCameras(cameras: any): void {78 var cameraKey;79 var cams = Tools.MakeArray(cameras || this._cameras);80 if (!cams) {81 return;82 }83 for (var i = 0; i < cams.length; i++) {84 var camera = cams[i];85 if (!camera) {86 continue;87 }88 var cameraName = camera.name;89 if (this._singleInstance) {90 cameraKey = 0;91 }92 else {93 cameraKey = cameraName;94 }95 if (!this._postProcesses[cameraKey]) {96 var postProcess = this._getPostProcesses();97 if (postProcess) {98 this._postProcesses[cameraKey] = Array.isArray(postProcess) ? postProcess : [postProcess];99 }100 }101 if (!this._indicesForCamera[cameraName]) {102 this._indicesForCamera[cameraName] = [];103 }104 this._postProcesses[cameraKey].forEach((postProcess: PostProcess) => {105 var index = camera.attachPostProcess(postProcess);106 this._indicesForCamera[cameraName].push(index);107 });108 if (!this._cameras[cameraName]) {109 this._cameras[cameraName] = camera;110 }111 }112 }113 /**114 * Detaches the effect on cameras115 * @param cameras The camera to detach from.116 * @hidden117 */118 public _detachCameras(cameras: Camera): void;119 /**120 * Detaches the effect on cameras121 * @param cameras The camera to detach from.122 * @hidden123 */124 public _detachCameras(cameras: Camera[]): void;125 /**126 * Detaches the effect on cameras127 * @param cameras The camera to detach from.128 * @hidden129 */130 public _detachCameras(cameras: any): void {131 var cams = Tools.MakeArray(cameras || this._cameras);132 if (!cams) {133 return;134 }135 for (var i = 0; i < cams.length; i++) {136 var camera: Camera = cams[i];137 var cameraName: string = camera.name;138 const postProcesses = this._postProcesses[this._singleInstance ? 0 : cameraName];139 if (postProcesses) {140 postProcesses.forEach((postProcess: PostProcess) => {141 camera.detachPostProcess(postProcess);142 });143 }144 if (this._cameras[cameraName]) {145 this._cameras[cameraName] = null;146 }147 }148 }149 /**150 * Enables the effect on given cameras151 * @param cameras The camera to enable.152 * @hidden153 */154 public _enable(cameras: Camera): void;155 /**156 * Enables the effect on given cameras157 * @param cameras The camera to enable.158 * @hidden159 */160 public _enable(cameras: Nullable<Camera[]>): void;161 /**162 * Enables the effect on given cameras163 * @param cameras The camera to enable.164 * @hidden165 */166 public _enable(cameras: any): void {167 var cams: Nullable<Array<Camera>> = Tools.MakeArray(cameras || this._cameras);168 if (!cams) {169 return;170 }171 for (var i = 0; i < cams.length; i++) {172 var camera = cams[i];173 var cameraName = camera.name;174 for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {175 if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined || camera._postProcesses[this._indicesForCamera[cameraName][j]] === null) {176 this._postProcesses[this._singleInstance ? 0 : cameraName].forEach((postProcess) => {177 cams![i].attachPostProcess(postProcess, this._indicesForCamera[cameraName][j]);178 });179 }180 }181 }182 }183 /**184 * Disables the effect on the given cameras185 * @param cameras The camera to disable.186 * @hidden187 */188 public _disable(cameras: Camera): void;189 /**190 * Disables the effect on the given cameras191 * @param cameras The camera to disable.192 * @hidden193 */194 public _disable(cameras: Nullable<Camera[]>): void;195 /**196 * Disables the effect on the given cameras197 * @param cameras The camera to disable.198 * @hidden199 */200 public _disable(cameras: any): void {201 var cams: Nullable<Array<Camera>> = Tools.MakeArray(cameras || this._cameras);202 if (!cams) {203 return;204 }205 for (var i = 0; i < cams.length; i++) {206 var camera = cams[i];207 var cameraName = camera.name;208 this._postProcesses[this._singleInstance ? 0 : cameraName].forEach((postProcess) => {209 camera.detachPostProcess(postProcess);210 });211 }212 }213 /**214 * Gets a list of the post processes contained in the effect.215 * @param camera The camera to get the post processes on.216 * @returns The list of the post processes in the effect.217 */218 public getPostProcesses(camera?: Camera): Nullable<Array<PostProcess>> {219 if (this._singleInstance) {220 return this._postProcesses[0];221 }222 else {223 if (!camera) {224 return null;225 }226 return this._postProcesses[camera.name];227 }228 }...
ProcessManager.ts
Source:ProcessManager.ts
1import * as child_process from 'child_process';2import * as file_manager from './FileManager';3import * as socket_manager from './SocketManager';4import * as processes from './IDEProcesses';5import * as paths from './paths';6import * as util from './utils';7import { Lock } from './Lock';8import * as cpu_monitor from './CPUMonitor';9const lock: Lock = new Lock();10// this function gets called whenever the ace editor is modified11// the file data is saved robustly using a lockfile, and a syntax12// check started if the flag is set13export async function upload(data: any){14 await lock.acquire();15 try{16 await file_manager.save_file(paths.projects+data.currentProject+'/'+data.newFile, data.fileData, paths.lockfile);17 if (data.checkSyntax){18 checkSyntax(data);19 }20 }21 catch(e){22 lock.release();23 throw e;24 }25 lock.release();26}27// this function starts a syntax check28// if a syntax check or build process is in progress they are stopped29// a running program is not stopped30export function checkSyntax(data: any){31 if (processes.syntax.get_status()){32 processes.syntax.stop();33 processes.syntax.queue(() => processes.syntax.start(data.currentProject));34 } else if (processes.build.get_status()){35 processes.build.stop();36 processes.build.queue( () => processes.syntax.start(data.currentProject) );37 } else {38 processes.syntax.start(data.currentProject);39 }40}41// this function is called when the run button is clicked42// if a program is already building or running it is stopped and restarted43// any syntax check in progress is stopped44export function run(data: any){45 if (processes.run.get_status()){46 processes.run.stop();47 processes.run.queue( () => build_run(data.currentProject) );48 } else if (processes.build.get_status()){49 processes.build.stop();50 processes.build.queue( () => build_run(data.currentProject) );51 } else if (processes.syntax.get_status()){52 processes.syntax.stop();53 processes.syntax.queue( () => build_run(data.currentProject) ); 54 } else {55 build_run(data.currentProject);56 }57}58// this function starts a build process and when it ends it checks59// if it was stopped by a call to stop() or if there were build errors60// if neither of these are true the project is immediately run61function build_run(project: string){62 processes.build.start(project);63 processes.build.queue( (stderr: string, killed: boolean, code: number) => {64 if (!killed && !code){65 processes.run.start(project); 66 }67 });68}69// this function parses the stderr output of the build process 70// returning true if build errors (not warnings) are found71function build_error(stderr: string): boolean {72 let lines: string[] = stderr.split('\n');73 for (let line of lines){74 let split_line: string[] = line.split(':');75 if (split_line.length >= 4){76 if (split_line[3] === ' error' || split_line[3] === ' fatal error'){77 return true;78 } else if (split_line[3] === ' warning'){79 //console.log('warning');80 }81 }82 }83 return false;84}85// this function is called when the stop button is clicked86// it calls the stop() method of any running process87// if there is no running process, 'make stop' is called88export function stop(){89 let stopped: boolean = false;90 if (processes.run.get_status()){91 processes.run.stop();92 stopped = true;93 }94 if (processes.build.get_status()){95 processes.build.stop();96 stopped = true;97 }98 if (processes.syntax.get_status()){99 processes.syntax.stop();100 stopped = true;101 }102 if (!stopped){103 console.log('make -C '+paths.Bela+' stop');104 child_process.exec('make -C '+paths.Bela+' stop'); 105 }106}107function get_status(): util.Process_Status {108 return {109 checkingSyntax : processes.syntax.get_status(),110 building : processes.build.get_status(),111 buildProject : (processes.build.get_status() ? processes.build.project : ''),112 running : processes.run.get_status(),113 runProject : (processes.run.get_status() ? processes.run.project : '')114 };115}116// each process emits start and finish events, which are handled here117processes.syntax.on('start', (project: string) => socket_manager.broadcast('status', get_status()) );118processes.syntax.on('finish', (stderr: string) => {119 let status: util.Process_Status = get_status();120 status.syntaxError = stderr;121 socket_manager.broadcast('status', status);122});123processes.build.on('start', (project: string) => socket_manager.broadcast('status', get_status()) );124processes.build.on('finish', (stderr: string, killed: boolean) => {125 let status: util.Process_Status = get_status();126 status.syntaxError = stderr;127 socket_manager.broadcast('status', status);128 if (!killed)129 socket_manager.broadcast('std-warn', stderr);130});131processes.build.on('stdout', (data) => socket_manager.broadcast('status', {buildLog: data}) );132processes.run.on('start', (pid: number, project: string) => {133 socket_manager.broadcast('status', get_status());134 cpu_monitor.start(pid, project, async cpu => {135 socket_manager.broadcast('cpu-usage', {136 bela: await file_manager.read_file(paths.xenomai_stat).catch(e => console.log('error reading xenomai stats', e)),137 belaLinux: cpu138 });139 });140});141processes.run.on('finish', (project: string) => {142 socket_manager.broadcast('status', get_status());143 cpu_monitor.stop();144});145processes.run.on('stdout', (data) => socket_manager.broadcast('status', {belaLog: data}) );...
Using AI Code Generation
1import { createMock } from 'ts-auto-mock';2import { MyInterface } from './MyInterface';3describe('test1', () => {4 it('test1', () => {5 const mock: MyInterface = createMock<MyInterface>();6 console.log(mock);7 });8});9import { createMock } from 'ts-auto-mock';10import { MyInterface } from './MyInterface';11describe('test2', () => {12 it('test2', () => {13 const mock: MyInterface = createMock<MyInterface>();14 console.log(mock);15 });16});17import { createMock } from 'ts-auto-mock';18import { MyInterface } from './MyInterface';19describe('test3', () => {20 it('test3', () => {21 const mock: MyInterface = createMock<MyInterface>();22 console.log(mock);23 });24});25export interface MyInterface {26 id: number;27 name: string;28 address: string;29}30import { createMock } from 'ts-auto-mock';31import { MyInterface } from './MyInterface';32describe('test4', () => {33 it('test4', () => {34 const mock: MyInterface = createMock<MyInterface>();35 console.log(mock);36 });37});
Using AI Code Generation
1import { createMocks } from 'ts-auto-mock';2import { Test1 } from './test1';3describe('Test1', () => {4 it('should create a mock', () => {5 const { instance, mocks } = createMocks<Test1>();6 });7});8import { createMocks } from 'ts-auto-mock';9import { Test2 } from './test2';10describe('Test2', () => {11 it('should create a mock', () => {12 const { instance, mocks } = createMocks<Test2>();13 });14});15import { createMocks } from 'ts-auto-mock';16import { Test3 } from './test3';17describe('Test3', () => {18 it('should create a mock', () => {19 const { instance, mocks } = createMocks<Test3>();20 });21});22import { createMocks } from 'ts-auto-mock';23import { Test4 } from './test4';24describe('Test4', () => {25 it('should create a mock', () => {26 const { instance, mocks } = createMocks<Test4>();27 });28});29import { createMocks } from 'ts-auto-mock';30import { Test5 } from './test5';31describe('Test5', () => {32 it('should create a mock', () => {33 const { instance, mocks } = createMocks<Test5>();34 });35});36import { createMocks } from 'ts-auto-mock';37import { Test6 } from './test6';38describe('Test6', () => {39 it('should create a mock', () => {40 const { instance, mocks } = createMocks<Test6>();41 });42});43import { createMocks } from
Using AI Code Generation
1import { process } from 'ts-auto-mock';2const result = process('path/to/file.ts');3console.log(result);4import { process } from 'ts-auto-mock';5const result = process('path/to/file.ts');6console.log(result);7import { processes } from 'ts-auto-mock';8const result = processes(['path/to/file1.ts', 'path/to/file2.ts']);9console.log(result);10import { process } from 'ts-auto-mock';11const result = process('path/to/file1.ts');12console.log(result);13import { process } from 'ts-auto-mock';14const result = process('path/to/file2.ts');15console.log(result);
Using AI Code Generation
1const tsAutoMock = require('ts-auto-mock');2const tsAutoMockProcess = tsAutoMock.createProcess();3tsAutoMockProcess.process('test.ts', 'test.ts');4import { Test } from './test1';5const test: Test = {};6console.log(test);
Using AI Code Generation
1import { process } from 'ts-auto-mock';2const test1Mock = process('Test1');3const test2Mock = process('Test2');4const test3Mock = process('Test3');5const test4Mock = process('Test4');6const test5Mock = process('Test5');7const test6Mock = process('Test6');8const test7Mock = process('Test7');9const test8Mock = process('Test8');10const test9Mock = process('Test9');11const test10Mock = process('Test10');12const test11Mock = process('Test11');13const test12Mock = process('Test12');14const test13Mock = process('Test13');15const test14Mock = process('Test14');16const test15Mock = process('Test15');17const test16Mock = process('Test16');18const test17Mock = process('Test17');19const test18Mock = process('Test18');20const test19Mock = process('Test19');21const test20Mock = process('Test20');22const test21Mock = process('Test21');23const test22Mock = process('Test22');24const test23Mock = process('Test23');25const test24Mock = process('Test24');
Using AI Code Generation
1const {process} = require('ts-auto-mock');2const {resolve} = require('path');3const path = resolve(__dirname, 'test2.ts');4const result = process(path);5console.log(result);6export interface ITest {7 property1: string;8 property2: number;9}10export function test(): ITest {11 return {12 };13}14const {createMock} = require('ts-auto-mock');15const {resolve} = require('path');16const path = resolve(__dirname, 'test4.ts');17const result = createMock(path);18console.log(result);19export interface ITest {20 property1: string;21 property2: number;22}23export function test(): ITest {24 return {25 };26}27const {createMock} = require('ts-auto-mock');28const {resolve} = require('path');29const path = resolve(__dirname, 'test6.ts');30const result = createMock(path, 'ITest');31console.log(result);32export interface ITest {33 property1: string;34 property2: number;35}36export function test(): ITest {37 return {38 };39}40const {createMock} = require('ts-auto-mock');41const {resolve} = require('path');42const path = resolve(__dirname, 'test8.ts');43const result = createMock(path, 'ITest', {44});45console.log(result);
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!