Best JavaScript code snippet using wpt
user-interface.service.ts
Source:user-interface.service.ts
1/* tslint:disable */2import { Injectable } from '@angular/core';3import { HttpClient, HttpRequest, HttpResponse, HttpHeaders } from '@angular/common/http';4import { BaseService as __BaseService } from '../base-service';5import { ApiConfiguration as __Configuration } from '../api-configuration';6import { StrictHttpResponse as __StrictHttpResponse } from '../strict-http-response';7import { Observable as __Observable } from 'rxjs';8import { map as __map, filter as __filter } from 'rxjs/operators';9@Injectable({10 providedIn: 'root',11})12class UserInterfaceService extends __BaseService {13 static readonly postUiAutopilotWaypointPath = '/ui/autopilot/waypoint/';14 static readonly postUiOpenwindowContractPath = '/ui/openwindow/contract/';15 static readonly postUiOpenwindowInformationPath = '/ui/openwindow/information/';16 static readonly postUiOpenwindowMarketdetailsPath = '/ui/openwindow/marketdetails/';17 static readonly postUiOpenwindowNewmailPath = '/ui/openwindow/newmail/';18 constructor(19 config: __Configuration,20 http: HttpClient21 ) {22 super(config, http);23 }24 /**25 * Set Autopilot Waypoint26 *27 * Set a solar system as autopilot waypoint28 *29 * ---30 * Alternate route: `/dev/ui/autopilot/waypoint/`31 *32 * Alternate route: `/legacy/ui/autopilot/waypoint/`33 *34 * Alternate route: `/v2/ui/autopilot/waypoint/`35 * @param params The `UserInterfaceService.PostUiAutopilotWaypointParams` containing the following parameters:36 *37 * - `destination_id`: The destination to travel to, can be solar system, station or structure's id38 *39 * - `clear_other_waypoints`: Whether clean other waypoints beforing adding this one40 *41 * - `add_to_beginning`: Whether this solar system should be added to the beginning of all waypoints42 *43 * - `token`: Access token to use if unable to set a header44 *45 * - `datasource`: The server name you would like data from46 */47 postUiAutopilotWaypointResponse(params: UserInterfaceService.PostUiAutopilotWaypointParams): __Observable<__StrictHttpResponse<null>> {48 let __params = this.newParams();49 let __headers = new HttpHeaders();50 let __body: any = null;51 if (params.destinationId != null) __params = __params.set('destination_id', params.destinationId.toString());52 if (params.clearOtherWaypoints != null) __params = __params.set('clear_other_waypoints', params.clearOtherWaypoints.toString());53 if (params.addToBeginning != null) __params = __params.set('add_to_beginning', params.addToBeginning.toString());54 if (params.token != null) __params = __params.set('token', params.token.toString());55 if (params.datasource != null) __params = __params.set('datasource', params.datasource.toString());56 let req = new HttpRequest<any>(57 'POST',58 this.rootUrl + `/ui/autopilot/waypoint/`,59 __body,60 {61 headers: __headers,62 params: __params,63 responseType: 'json'64 });65 return this.http.request<any>(req).pipe(66 __filter(_r => _r instanceof HttpResponse),67 __map((_r) => {68 return _r as __StrictHttpResponse<null>;69 })70 );71 }72 /**73 * Set Autopilot Waypoint74 *75 * Set a solar system as autopilot waypoint76 *77 * ---78 * Alternate route: `/dev/ui/autopilot/waypoint/`79 *80 * Alternate route: `/legacy/ui/autopilot/waypoint/`81 *82 * Alternate route: `/v2/ui/autopilot/waypoint/`83 * @param params The `UserInterfaceService.PostUiAutopilotWaypointParams` containing the following parameters:84 *85 * - `destination_id`: The destination to travel to, can be solar system, station or structure's id86 *87 * - `clear_other_waypoints`: Whether clean other waypoints beforing adding this one88 *89 * - `add_to_beginning`: Whether this solar system should be added to the beginning of all waypoints90 *91 * - `token`: Access token to use if unable to set a header92 *93 * - `datasource`: The server name you would like data from94 */95 postUiAutopilotWaypoint(params: UserInterfaceService.PostUiAutopilotWaypointParams): __Observable<null> {96 return this.postUiAutopilotWaypointResponse(params).pipe(97 __map(_r => _r.body as null)98 );99 }100 /**101 * Open Contract Window102 *103 * Open the contract window inside the client104 *105 * ---106 * Alternate route: `/dev/ui/openwindow/contract/`107 *108 * Alternate route: `/legacy/ui/openwindow/contract/`109 *110 * Alternate route: `/v1/ui/openwindow/contract/`111 * @param params The `UserInterfaceService.PostUiOpenwindowContractParams` containing the following parameters:112 *113 * - `contract_id`: The contract to open114 *115 * - `token`: Access token to use if unable to set a header116 *117 * - `datasource`: The server name you would like data from118 */119 postUiOpenwindowContractResponse(params: UserInterfaceService.PostUiOpenwindowContractParams): __Observable<__StrictHttpResponse<null>> {120 let __params = this.newParams();121 let __headers = new HttpHeaders();122 let __body: any = null;123 if (params.contractId != null) __params = __params.set('contract_id', params.contractId.toString());124 if (params.token != null) __params = __params.set('token', params.token.toString());125 if (params.datasource != null) __params = __params.set('datasource', params.datasource.toString());126 let req = new HttpRequest<any>(127 'POST',128 this.rootUrl + `/ui/openwindow/contract/`,129 __body,130 {131 headers: __headers,132 params: __params,133 responseType: 'json'134 });135 return this.http.request<any>(req).pipe(136 __filter(_r => _r instanceof HttpResponse),137 __map((_r) => {138 return _r as __StrictHttpResponse<null>;139 })140 );141 }142 /**143 * Open Contract Window144 *145 * Open the contract window inside the client146 *147 * ---148 * Alternate route: `/dev/ui/openwindow/contract/`149 *150 * Alternate route: `/legacy/ui/openwindow/contract/`151 *152 * Alternate route: `/v1/ui/openwindow/contract/`153 * @param params The `UserInterfaceService.PostUiOpenwindowContractParams` containing the following parameters:154 *155 * - `contract_id`: The contract to open156 *157 * - `token`: Access token to use if unable to set a header158 *159 * - `datasource`: The server name you would like data from160 */161 postUiOpenwindowContract(params: UserInterfaceService.PostUiOpenwindowContractParams): __Observable<null> {162 return this.postUiOpenwindowContractResponse(params).pipe(163 __map(_r => _r.body as null)164 );165 }166 /**167 * Open Information Window168 *169 * Open the information window for a character, corporation or alliance inside the client170 *171 * ---172 * Alternate route: `/dev/ui/openwindow/information/`173 *174 * Alternate route: `/legacy/ui/openwindow/information/`175 *176 * Alternate route: `/v1/ui/openwindow/information/`177 * @param params The `UserInterfaceService.PostUiOpenwindowInformationParams` containing the following parameters:178 *179 * - `target_id`: The target to open180 *181 * - `token`: Access token to use if unable to set a header182 *183 * - `datasource`: The server name you would like data from184 */185 postUiOpenwindowInformationResponse(params: UserInterfaceService.PostUiOpenwindowInformationParams): __Observable<__StrictHttpResponse<null>> {186 let __params = this.newParams();187 let __headers = new HttpHeaders();188 let __body: any = null;189 if (params.targetId != null) __params = __params.set('target_id', params.targetId.toString());190 if (params.token != null) __params = __params.set('token', params.token.toString());191 if (params.datasource != null) __params = __params.set('datasource', params.datasource.toString());192 let req = new HttpRequest<any>(193 'POST',194 this.rootUrl + `/ui/openwindow/information/`,195 __body,196 {197 headers: __headers,198 params: __params,199 responseType: 'json'200 });201 return this.http.request<any>(req).pipe(202 __filter(_r => _r instanceof HttpResponse),203 __map((_r) => {204 return _r as __StrictHttpResponse<null>;205 })206 );207 }208 /**209 * Open Information Window210 *211 * Open the information window for a character, corporation or alliance inside the client212 *213 * ---214 * Alternate route: `/dev/ui/openwindow/information/`215 *216 * Alternate route: `/legacy/ui/openwindow/information/`217 *218 * Alternate route: `/v1/ui/openwindow/information/`219 * @param params The `UserInterfaceService.PostUiOpenwindowInformationParams` containing the following parameters:220 *221 * - `target_id`: The target to open222 *223 * - `token`: Access token to use if unable to set a header224 *225 * - `datasource`: The server name you would like data from226 */227 postUiOpenwindowInformation(params: UserInterfaceService.PostUiOpenwindowInformationParams): __Observable<null> {228 return this.postUiOpenwindowInformationResponse(params).pipe(229 __map(_r => _r.body as null)230 );231 }232 /**233 * Open Market Details234 *235 * Open the market details window for a specific typeID inside the client236 *237 * ---238 * Alternate route: `/dev/ui/openwindow/marketdetails/`239 *240 * Alternate route: `/legacy/ui/openwindow/marketdetails/`241 *242 * Alternate route: `/v1/ui/openwindow/marketdetails/`243 * @param params The `UserInterfaceService.PostUiOpenwindowMarketdetailsParams` containing the following parameters:244 *245 * - `type_id`: The item type to open in market window246 *247 * - `token`: Access token to use if unable to set a header248 *249 * - `datasource`: The server name you would like data from250 */251 postUiOpenwindowMarketdetailsResponse(params: UserInterfaceService.PostUiOpenwindowMarketdetailsParams): __Observable<__StrictHttpResponse<null>> {252 let __params = this.newParams();253 let __headers = new HttpHeaders();254 let __body: any = null;255 if (params.typeId != null) __params = __params.set('type_id', params.typeId.toString());256 if (params.token != null) __params = __params.set('token', params.token.toString());257 if (params.datasource != null) __params = __params.set('datasource', params.datasource.toString());258 let req = new HttpRequest<any>(259 'POST',260 this.rootUrl + `/ui/openwindow/marketdetails/`,261 __body,262 {263 headers: __headers,264 params: __params,265 responseType: 'json'266 });267 return this.http.request<any>(req).pipe(268 __filter(_r => _r instanceof HttpResponse),269 __map((_r) => {270 return _r as __StrictHttpResponse<null>;271 })272 );273 }274 /**275 * Open Market Details276 *277 * Open the market details window for a specific typeID inside the client278 *279 * ---280 * Alternate route: `/dev/ui/openwindow/marketdetails/`281 *282 * Alternate route: `/legacy/ui/openwindow/marketdetails/`283 *284 * Alternate route: `/v1/ui/openwindow/marketdetails/`285 * @param params The `UserInterfaceService.PostUiOpenwindowMarketdetailsParams` containing the following parameters:286 *287 * - `type_id`: The item type to open in market window288 *289 * - `token`: Access token to use if unable to set a header290 *291 * - `datasource`: The server name you would like data from292 */293 postUiOpenwindowMarketdetails(params: UserInterfaceService.PostUiOpenwindowMarketdetailsParams): __Observable<null> {294 return this.postUiOpenwindowMarketdetailsResponse(params).pipe(295 __map(_r => _r.body as null)296 );297 }298 /**299 * Open New Mail Window300 *301 * Open the New Mail window, according to settings from the request if applicable302 *303 * ---304 * Alternate route: `/dev/ui/openwindow/newmail/`305 *306 * Alternate route: `/legacy/ui/openwindow/newmail/`307 *308 * Alternate route: `/v1/ui/openwindow/newmail/`309 * @param params The `UserInterfaceService.PostUiOpenwindowNewmailParams` containing the following parameters:310 *311 * - `new_mail`: The details of mail to create312 *313 * - `token`: Access token to use if unable to set a header314 *315 * - `datasource`: The server name you would like data from316 */317 postUiOpenwindowNewmailResponse(params: UserInterfaceService.PostUiOpenwindowNewmailParams): __Observable<__StrictHttpResponse<null>> {318 let __params = this.newParams();319 let __headers = new HttpHeaders();320 let __body: any = null;321 __body = params.newMail;322 if (params.token != null) __params = __params.set('token', params.token.toString());323 if (params.datasource != null) __params = __params.set('datasource', params.datasource.toString());324 let req = new HttpRequest<any>(325 'POST',326 this.rootUrl + `/ui/openwindow/newmail/`,327 __body,328 {329 headers: __headers,330 params: __params,331 responseType: 'json'332 });333 return this.http.request<any>(req).pipe(334 __filter(_r => _r instanceof HttpResponse),335 __map((_r) => {336 return _r as __StrictHttpResponse<null>;337 })338 );339 }340 /**341 * Open New Mail Window342 *343 * Open the New Mail window, according to settings from the request if applicable344 *345 * ---346 * Alternate route: `/dev/ui/openwindow/newmail/`347 *348 * Alternate route: `/legacy/ui/openwindow/newmail/`349 *350 * Alternate route: `/v1/ui/openwindow/newmail/`351 * @param params The `UserInterfaceService.PostUiOpenwindowNewmailParams` containing the following parameters:352 *353 * - `new_mail`: The details of mail to create354 *355 * - `token`: Access token to use if unable to set a header356 *357 * - `datasource`: The server name you would like data from358 */359 postUiOpenwindowNewmail(params: UserInterfaceService.PostUiOpenwindowNewmailParams): __Observable<null> {360 return this.postUiOpenwindowNewmailResponse(params).pipe(361 __map(_r => _r.body as null)362 );363 }364}365module UserInterfaceService {366 /**367 * Parameters for postUiAutopilotWaypoint368 */369 export interface PostUiAutopilotWaypointParams {370 /**371 * The destination to travel to, can be solar system, station or structure's id372 */373 destinationId: number;374 /**375 * Whether clean other waypoints beforing adding this one376 */377 clearOtherWaypoints: boolean;378 /**379 * Whether this solar system should be added to the beginning of all waypoints380 */381 addToBeginning: boolean;382 /**383 * Access token to use if unable to set a header384 */385 token?: string;386 /**387 * The server name you would like data from388 */389 datasource?: 'tranquility' | 'singularity';390 }391 /**392 * Parameters for postUiOpenwindowContract393 */394 export interface PostUiOpenwindowContractParams {395 /**396 * The contract to open397 */398 contractId: number;399 /**400 * Access token to use if unable to set a header401 */402 token?: string;403 /**404 * The server name you would like data from405 */406 datasource?: 'tranquility' | 'singularity';407 }408 /**409 * Parameters for postUiOpenwindowInformation410 */411 export interface PostUiOpenwindowInformationParams {412 /**413 * The target to open414 */415 targetId: number;416 /**417 * Access token to use if unable to set a header418 */419 token?: string;420 /**421 * The server name you would like data from422 */423 datasource?: 'tranquility' | 'singularity';424 }425 /**426 * Parameters for postUiOpenwindowMarketdetails427 */428 export interface PostUiOpenwindowMarketdetailsParams {429 /**430 * The item type to open in market window431 */432 typeId: number;433 /**434 * Access token to use if unable to set a header435 */436 token?: string;437 /**438 * The server name you would like data from439 */440 datasource?: 'tranquility' | 'singularity';441 }442 /**443 * Parameters for postUiOpenwindowNewmail444 */445 export interface PostUiOpenwindowNewmailParams {446 /**447 * The details of mail to create448 */449 newMail: {body: string, recipients: Array<number>, subject: string, to_corp_or_alliance_id?: number, to_mailing_list_id?: number};450 /**451 * Access token to use if unable to set a header452 */453 token?: string;454 /**455 * The server name you would like data from456 */457 datasource?: 'tranquility' | 'singularity';458 }459}...
clients-openwindow.js
Source:clients-openwindow.js
...5importScripts('sw-test-helpers.js');6importScripts('../../../resources/get-host-info.js');7var TESTS = [8 function testWithNoNotificationClick() {9 clients.openWindow('/').catch(function(e) {10 self.postMessage('openWindow() can\'t open a window without a user interaction');11 self.postMessage('openWindow() error is ' + e.name);12 }).then(runNextTestOrQuit);13 },14 function testOpenCrossOriginWindow() {15 synthesizeNotificationClick().then(function(e) {16 var cross_origin_url =17 get_host_info()['HTTP_REMOTE_ORIGIN'] +18 '/serviceworker/chromium/resources/blank.html';19 clients.openWindow(cross_origin_url).then(function(c) {20 self.postMessage('openWindow() can open cross origin windows');21 self.postMessage('openWindow() result: ' + c);22 }).then(runNextTestOrQuit);23 });24 },25 function testOpenNotControlledWindow() {26 synthesizeNotificationClick().then(function(e) {27 clients.openWindow('/').then(function(c) {28 self.postMessage('openWindow() can open not controlled windows');29 self.postMessage('openWindow() result: ' + c);30 }).then(runNextTestOrQuit);31 });32 },33 function testOpenControlledWindow() {34 synthesizeNotificationClick().then(function(e) {35 clients.openWindow('blank.html').then(function(c) {36 self.postMessage('openWindow() can open controlled windows');37 self.postMessage('openWindow() result: ' + c);38 self.postMessage(' url: ' + c.url);39 self.postMessage(' visibilityState: ' + c.visibilityState);40 self.postMessage(' focused: ' + c.focused);41 self.postMessage(' frameType: ' + c.frameType);42 }).then(runNextTestOrQuit);43 });44 },45 function testOpenAboutBlank() {46 synthesizeNotificationClick().then(function(e) {47 clients.openWindow('about:blank').then(function(c) {48 self.postMessage('openWindow() can open about:blank');49 self.postMessage('openWindow() result: ' + c);50 }).then(runNextTestOrQuit);51 });52 },53 function testOpenAboutCrash() {54 synthesizeNotificationClick().then(function(e) {55 clients.openWindow('about:crash').then(function(c) {56 self.postMessage('openWindow() can open about:crash');57 self.postMessage('openWindow() result: ' + c);58 }).then(runNextTestOrQuit);59 });60 },61 function testOpenInvalidURL() {62 synthesizeNotificationClick().then(function(e) {63 clients.openWindow('http://[test].com').catch(function(error) {64 self.postMessage('openWindow() can not open an invalid url');65 self.postMessage('openWindow() error is: ' + error.name);66 }).then(runNextTestOrQuit);67 });68 },69 function testOpenViewSource() {70 synthesizeNotificationClick().then(function(e) {71 clients.openWindow('view-source://http://test.com').catch(function(error) {72 self.postMessage('openWindow() can not open view-source scheme');73 self.postMessage('openWindow() error is: ' + error.name);74 }).then(runNextTestOrQuit);75 });76 },77 function testOpenFileScheme() {78 synthesizeNotificationClick().then(function(e) {79 clients.openWindow('file:///').catch(function(error) {80 self.postMessage('openWindow() can not open file scheme');81 self.postMessage('openWindow() error is: ' + error.name);82 }).then(runNextTestOrQuit);83 });84 },85];86self.onmessage = function(e) {87 if (e.data == 'start') {88 e.waitUntil(initialize().then(runNextTestOrQuit));89 } else {90 e.waitUntil(initialize().then(function() {91 self.postMessage('received unexpected message');92 self.postMessage('quit');93 }));94 }95};
Using AI Code Generation
1var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]2 .getService(Components.interfaces.nsIWindowMediator);3var win = wm.getMostRecentWindow("navigator:browser");4win.getBrowser().selectedTab = tab;5win.getBrowser().getBrowserForTab(tab).addEventListener("load", function(e) {6 var doc = e.originalTarget;7 }8}, true);9var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]10 .getService(Components.interfaces.nsIWindowMediator);11var win = wm.getMostRecentWindow("navigator:browser");12win.getBrowser().selectedTab = tab;13win.getBrowser().getBrowserForTab(tab).addEventListener("load", function(e) {14 var doc = e.originalTarget;15 }16}, true);
Using AI Code Generation
1var wpt = require('webpagetest');2var wpt = new WebPageTest('www.webpagetest.org');3wpt.runTest(url, function(err, data) {4 if (err) return console.log(err);5 wpt.getTestResults(data.data.testId, function(err, data) {6 if (err) return console.log(err);7 console.log(data);8 });9});10wpt.getTestStatus(data.data.testId, function(err, data) {11 if (err) return console.log(err);12 console.log(data);13});14wpt.getLocations(function(err, data) {15 if (err) return console.log(err);16 console.log(data);17});18wpt.getTesters(function(err, data) {19 if (err) return console.log(err);20 console.log(data);21});22wpt.getBrowsers(function(err, data) {23 if (err) return console.log(err);24 console.log(data);25});26wpt.getTesters(function(err, data) {
Using AI Code Generation
1var wpt = require('webpagetest');2var webpagetest = new wpt('www.webpagetest.org');3}, function(err, data) {4 if (err) return console.error(err);5 console.log(data.data.testId);6 webpagetest.getTestResults(data.data.testId, function(err, data) {7 if (err) return console.error(err);8 console.log(data.data.median.firstView.SpeedIndex);9 });10});
Using AI Code Generation
1var wptab = require("wptab");2var wptab = require("wptab");3var wptab = require("wptab");4var tab = wptab.getActiveTab();5var wptab = require("wptab");6var window = wptab.getActiveWindow();7var wptab = require("wptab");8var tab = wptab.getTab(0);9var wptab = require("wptab");10var window = wptab.getWindow(0);11var wptab = require("wptab");12var tabs = wptab.getTabs();13var wptab = require("wptab");14var windows = wptab.getWindows();15var wptab = require("wptab");16var tab = wptab.newTab();17var wptab = require("wptab");18var window = wptab.newWindow();
Using AI Code Generation
1var wptools = require('wptools');2var wp = wptools.page(url);3wp.get(function(err, resp) {4 console.log(resp);5});6var wptools = require('wptools');7var wp = wptools.page(url);8wp.openWindow(function(err, resp) {9 console.log(resp);10});11var wptools = require('wptools');12var wp = wptools.page(url);13wp.openWindow(function(err, resp) {14 console.log(resp);15});16var wptools = require('wptools');17var wp = wptools.page(url);18wp.openWindow(function(err, resp) {19 console.log(resp);20});21var wptools = require('wptools');22var wp = wptools.page(url);23wp.openWindow(function(err, resp) {24 console.log(resp);25});26var wptools = require('wptools');27var wp = wptools.page(url);28wp.openWindow(function(err, resp) {29 console.log(resp);30});31var wptools = require('wptools');32var wp = wptools.page(url);33wp.openWindow(function(err, resp) {34 console.log(resp);35});36var wptools = require('w
Using AI Code Generation
1var wptools = require('wptools');2 if (err) throw err;3 w.close();4});5var wptools = require('wptools');6 if (err) throw err;7 w.close();8});9var wptools = require('wptools');10 if (err) throw err;11 w.close();12});13var wptools = require('wptools');14 if (err) throw err;15 w.close();16});17var wptools = require('wptools');18 if (err) throw err;19 w.close();20});21var wptools = require('wptools');22 if (err) throw err;23 w.close();24});25var wptools = require('wptools');26 if (err) throw err;27 w.close();28});29var wptools = require('wptools');30 if (err) throw err;31 w.close();32});33var wptools = require('wptools');34wptools.openWindow('
Using AI Code Generation
1var win = window.open();2win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');3win.document.close();4win.focus();5var win = window.open();6win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');7win.document.close();8win.focus();9var win = window.open();10win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');11win.document.close();12win.focus();13var win = window.open();14win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');15win.document.close();16win.focus();17var win = window.open();18win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');19win.document.close();20win.focus();21var win = window.open();22win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');23win.document.close();24win.focus();25var win = window.open();26win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');27win.document.close();28win.focus();29var win = window.open();30win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');31win.document.close();32win.focus();33var win = window.open();34win.document.write('<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>');35win.document.close();36win.focus();
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!!