How to use Session method of com.intuit.karate.http.Session class

Best Karate code snippet using com.intuit.karate.http.Session.Session

Source:DriverOptions.java Github

copy

Full Screen

...95 public final List<String> addOptions;96 public final List<String> args = new ArrayList<>();97 public final String webDriverUrl;98 public final String webDriverPath;99 public final Map<String, Object> webDriverSession;100 public final Map<String, Object> httpConfig;101 public final Target target;102 public final String beforeStart;103 public final String afterStop;104 public final String videoFile;105 public final boolean highlight;106 public final int highlightDuration;107 public final String attach;108 public final boolean screenshotOnFailure;109 public final String playwrightUrl;110 public final Map<String, Object> playwrightOptions;111 // mutable during a test112 private boolean retryEnabled;113 private Integer retryInterval = null;114 private Integer retryCount = null;115 private String preSubmitHash = null;116 private Integer timeoutOverride;117 public static final String SCROLL_JS_FUNCTION = "function(e){ var d = window.getComputedStyle(e).display;"118 + " while(d == 'none'){ e = e.parentElement; d = window.getComputedStyle(e).display }"119 + " e.scrollIntoView({block: 'center'}) }";120 public static final String KARATE_REF_GENERATOR = "function(e){"121 + " if (!document._karate) document._karate = { seq: (new Date()).getTime() };"122 + " var ref = 'ref' + document._karate.seq++; document._karate[ref] = e; return ref }";123 public boolean isRetryEnabled() {124 return retryEnabled;125 }126 public String getPreSubmitHash() {127 return preSubmitHash;128 }129 public void setPreSubmitHash(String preSubmitHash) {130 this.preSubmitHash = preSubmitHash;131 }132 private <T> T get(String key, T defaultValue) {133 T temp = (T) options.get(key);134 return temp == null ? defaultValue : temp;135 }136 public DriverOptions(Map<String, Object> options, ScenarioRuntime sr, int defaultPort, String defaultExecutable) {137 this.options = options;138 this.appender = sr.logAppender;139 logger = new Logger(getClass());140 logger.setAppender(appender);141 timeout = get("timeout", Config.DEFAULT_TIMEOUT);142 type = get("type", null);143 start = get("start", true);144 stop = get("stop", true);145 executable = get("executable", defaultExecutable);146 headless = get("headless", false);147 showProcessLog = get("showProcessLog", false);148 addOptions = get("addOptions", null);149 uniqueName = type + "_" + System.currentTimeMillis();150 String packageName = getClass().getPackage().getName();151 processLogger = showProcessLog ? logger : new Logger(packageName + "." + uniqueName);152 showDriverLog = get("showDriverLog", false);153 driverLogger = showDriverLog ? logger : new Logger(packageName + "." + uniqueName);154 if (executable != null) {155 if (executable.startsWith(".")) { // honor path even when we set working dir156 args.add(new File(executable).getAbsolutePath());157 } else {158 args.add(executable);159 }160 }161 userAgent = get("userAgent", null);162 if (options.containsKey("userDataDir")) {163 String temp = get("userDataDir", null);164 if (temp != null) {165 workingDir = new File(temp);166 userDataDir = workingDir.getAbsolutePath();167 } else { // special case allow user-specified null168 userDataDir = null;169 workingDir = null;170 }171 } else {172 workingDir = new File(sr.featureRuntime.suite.buildDir + File.separator + uniqueName);173 userDataDir = workingDir.getAbsolutePath();174 }175 if (workingDir == null) {176 processLogFile = sr.featureRuntime.suite.buildDir + File.separator + uniqueName + ".log";177 } else {178 processLogFile = workingDir.getPath() + File.separator + type + ".log";179 }180 maxPayloadSize = get("maxPayloadSize", Integer.MAX_VALUE);181 target = get("target", null);182 host = get("host", "localhost");183 webDriverUrl = get("webDriverUrl", null);184 webDriverPath = get("webDriverPath", null);185 webDriverSession = get("webDriverSession", null);186 httpConfig = get("httpConfig", null);187 beforeStart = get("beforeStart", null);188 afterStop = get("afterStop", null);189 videoFile = get("videoFile", null);190 pollAttempts = get("pollAttempts", 20);191 pollInterval = get("pollInterval", 250);192 highlight = get("highlight", false);193 highlightDuration = get("highlightDuration", Config.DEFAULT_HIGHLIGHT_DURATION);194 attach = get("attach", null);195 screenshotOnFailure = get("screenshotOnFailure", true);196 playwrightUrl = get("playwrightUrl", null);197 playwrightOptions = get("playwrightOptions", null);198 // do this last to ensure things like logger, start-flag, webDriverUrl etc. are set199 port = resolvePort(defaultPort);200 }201 private int resolvePort(int defaultPort) {202 if (webDriverUrl != null) {203 return 0;204 }205 int preferredPort = get("port", defaultPort);206 if (start) {207 int freePort = Command.getFreePort(preferredPort);208 if (preferredPort == 0) {209 logger.info("use a automatically allocated port number {}", freePort);210 } else if (freePort != preferredPort) {211 logger.warn("preferred port {} not available, will use: {}", preferredPort, freePort);212 }213 return freePort;214 }215 return preferredPort;216 }217 public Http getHttp() {218 Http http = Http.to(getUrlBase());219 http.setAppender(driverLogger.getAppender());220 if (httpConfig != null) {221 http.configure(httpConfig);222 }223 return http;224 }225 private String getUrlBase() {226 if (webDriverUrl != null) {227 return webDriverUrl;228 }229 String urlBase = "http://" + host + ":" + port;230 if (webDriverPath != null) {231 return urlBase + webDriverPath;232 }233 return urlBase;234 }235 public void arg(String arg) {236 args.add(arg);237 }238 public Command startProcess() {239 return startProcess(null);240 }241 public Command startProcess(Consumer<String> listener) {242 if (beforeStart != null) {243 Command.execLine(null, beforeStart);244 }245 Command command;246 if (target != null || !start) {247 command = null;248 } else {249 if (addOptions != null) {250 args.addAll(addOptions);251 }252 command = new Command(false, processLogger, uniqueName, processLogFile, workingDir, args.toArray(new String[args.size()]));253 if (listener != null) {254 command.setListener(listener);255 }256 command.setPollAttempts(pollAttempts);257 command.setPollInterval(pollInterval);258 command.start();259 }260 if (command != null) { // wait for a slow booting browser / driver process261 command.waitForPort(host, port);262 if (command.isFailed()) {263 throw new KarateException("start failed", command.getFailureReason());264 }265 }266 return command;267 }268 public static Driver startOrigin(Map<String, Object> options, ScenarioRuntime sr) {269 Target target = (Target) options.get("target");270 if (target != null) {271 sr.logger.debug("custom target configured, calling start()");272 Map<String, Object> map = target.start(sr);273 sr.logger.trace("custom target returned options: {}", map);274 options.putAll(map);275 }276 String type = (String) options.get("type");277 if (type == null) {278 sr.logger.warn("type was null, defaulting to 'chrome'");279 type = "chrome";280 options.put("type", type);281 }282 try { // to make troubleshooting errors easier283 switch (type) {284 case "chrome":285 return Chrome.start(options, sr);286 case "msedge":287 return EdgeChromium.start(options, sr);288 case "chromedriver":289 return ChromeWebDriver.start(options, sr);290 case "geckodriver":291 return GeckoWebDriver.start(options, sr);292 case "safaridriver":293 return SafariWebDriver.start(options, sr);294 case "msedgedriver":295 return MsEdgeDriver.start(options, sr);296 case "mswebdriver":297 return MsWebDriver.start(options, sr);298 case "iedriver":299 return IeWebDriver.start(options, sr);300 case "winappdriver":301 return WinAppDriver.start(options, sr);302 case "android":303 return AndroidDriver.start(options, sr);304 case "ios":305 return IosDriver.start(options, sr);306 case "playwright":307 return PlaywrightDriver.start(options, sr);308 case "indigo":309 return IndigoDriver.start(options, sr);310 case "electron":311 return Chrome.start(options, sr);312 default:313 sr.logger.warn("unknown driver type: {}, defaulting to 'chrome'", type);314 options.put("type", "chrome");315 return Chrome.start(options, sr);316 }317 } catch (Exception e) {318 String message = "driver config / start failed: " + e.getMessage() + ", options: " + options;319 sr.logger.error(message, e);320 if (target != null) {321 target.stop(sr);322 }323 throw new RuntimeException(message, e);324 }325 }326 public static Driver start(Map<String, Object> options, ScenarioRuntime sr) { // TODO unify logger327 DriverProvider driverProvider = getDriverProvider();328 if (driverProvider != null) {329 return driverProvider.get(options, sr);330 } else {331 return startOrigin(options, sr);332 }333 }334 private Map<String, Object> getSession(String browserName) {335 Map<String, Object> session = webDriverSession;336 if (session == null) {337 session = new HashMap();338 }339 Map<String, Object> capabilities = (Map) session.get("capabilities");340 if (capabilities == null) {341 capabilities = (Map) session.get("desiredCapabilities");342 }343 if (capabilities == null) {344 capabilities = new HashMap();345 session.put("capabilities", capabilities);346 Map<String, Object> alwaysMatch = new HashMap();347 capabilities.put("alwaysMatch", alwaysMatch);348 alwaysMatch.put("browserName", browserName);349 }350 return session;351 }352 // TODO abstract as method per implementation353 public Map<String, Object> getWebDriverSessionPayload() {354 switch (type) {355 case "chromedriver":356 return getSession("chrome");357 case "geckodriver":358 return getSession("firefox");359 case "safaridriver":360 return getSession("safari");361 case "msedgedriver":362 case "mswebdriver":363 return getSession("edge");364 case "iedriver":365 return getSession("internet explorer");366 default:367 // else user has to specify full payload via webDriverSession368 return getSession(type);369 }370 }371 public static String preProcessWildCard(String locator) {372 boolean contains;373 String tag, prefix, text;374 int index;375 int pos = locator.indexOf('}');376 if (pos == -1) {377 throw new RuntimeException("bad locator prefix: " + locator);378 }379 if (locator.charAt(1) == '^') {380 contains = true;381 prefix = locator.substring(2, pos);382 } else {...

Full Screen

Full Screen

Source:AndroidDriver.java Github

copy

Full Screen

1package com.intuit.karate.driver.android;23import com.intuit.karate.FileUtils;4import com.intuit.karate.Http;5import com.intuit.karate.Logger;6import com.intuit.karate.core.ScenarioContext;7import com.intuit.karate.driver.AppiumDriver;8import com.intuit.karate.driver.DriverOptions;9import com.intuit.karate.shell.CommandThread;1011import java.util.Collections;12import java.util.Map;1314/**15 * @author babusekaran16 */17public class AndroidDriver extends AppiumDriver {1819 protected AndroidDriver(DriverOptions options, CommandThread command, Http http, String sessionId, String windowId) {20 super(options, command, http, sessionId, windowId);21 }2223 public static AndroidDriver start(ScenarioContext context, Map<String, Object> map, Logger logger) {24 DriverOptions options = new DriverOptions(context, map, logger, 4723, FileUtils.isOsWindows() ? "cmd.exe" : "appium");25 // additional commands needed to start appium on windows26 if (FileUtils.isOsWindows()){27 options.arg("/C");28 options.arg("cmd.exe");29 options.arg("/K");30 options.arg("appium");31 }32 options.arg("--port=" + options.port);33 CommandThread command = options.startProcess();34 String urlBase = "http://" + options.host + ":" + options.port + "/wd/hub";35 Http http = Http.forUrl(options.driverLogger, urlBase);36 http.config("readTimeout","120000");37 String sessionId = http.path("session")38 .post(Collections.singletonMap("desiredCapabilities", map))39 .jsonPath("get[0] response..sessionId").asString();40 options.driverLogger.debug("init session id: {}", sessionId);41 http.url(urlBase + "/session/" + sessionId);42 AndroidDriver driver = new AndroidDriver(options, command, http, sessionId, null);43 driver.activate();44 return driver;45 }4647 @Override48 public void activate() {49 super.setContext("NATIVE_APP");50 }5152} ...

Full Screen

Full Screen

Source:IosDriver.java Github

copy

Full Screen

1package com.intuit.karate.driver.ios;23import com.intuit.karate.Http;4import com.intuit.karate.Logger;5import com.intuit.karate.core.ScenarioContext;6import com.intuit.karate.driver.AppiumDriver;7import com.intuit.karate.driver.DriverOptions;8import com.intuit.karate.shell.CommandThread;910import java.util.Collections;11import java.util.Map;1213/**14 * @author babusekaran15 */16public class IosDriver extends AppiumDriver {1718 public IosDriver(DriverOptions options, CommandThread command, Http http, String sessionId, String windowId) {19 super(options, command, http, sessionId, windowId);20 }2122 public static IosDriver start(ScenarioContext context, Map<String, Object> map, Logger logger) {23 DriverOptions options = new DriverOptions(context, map, logger, 4723, "appium");24 options.arg("--port=" + options.port);25 CommandThread command = options.startProcess();26 String urlBase = "http://" + options.host + ":" + options.port + "/wd/hub";27 Http http = Http.forUrl(options.driverLogger, urlBase);28 http.config("readTimeout","120000");29 String sessionId = http.path("session")30 .post(Collections.singletonMap("desiredCapabilities", map))31 .jsonPath("get[0] response..sessionId").asString();32 options.driverLogger.debug("init session id: {}", sessionId);33 http.url(urlBase + "/session/" + sessionId);34 IosDriver driver = new IosDriver(options, command, http, sessionId, null);35 driver.activate();36 return driver;37 }3839 @Override40 public void activate() {41 super.setContext("NATIVE_APP");42 }4344} ...

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session2import com.intuit.karate.http.Cookie3import com.intuit.karate.http.HttpClient4import com.intuit.karate.http.HttpRequestBuilder5import com.intuit.karate.http.HttpResponse6import com.intuit.karate.http.HttpMethod7import static com.intuit.karate.http.HttpMethod.GET8def session = Session.newInstance()9def request = HttpRequestBuilder.newInstance()10def response = session.invoke(request)11import com.intuit.karate.http.Session12import com.intuit.karate.http.Cookie13import com.intuit.karate.http.HttpClient14import com.intuit.karate.http.HttpRequestBuilder15import com.intuit.karate.http.HttpResponse16import com.intuit.karate.http.HttpMethod17import static com.intuit.karate.http.HttpMethod.GET18def session = Session.newInstance()19def request = HttpRequestBuilder.newInstance()20def response = session.invoke(request)21import com.intuit.karate.http.Session22import com.intuit.karate.http.Cookie23import com.intuit.karate.http.HttpClient24import com.intuit.karate.http.HttpRequestBuilder25import com.intuit.karate.http.HttpResponse26import com.intuit.karate.http.HttpMethod27import static com.intuit.karate.http.HttpMethod.GET28def session = Session.newInstance()

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session2import com.intuit.karate.http.HttpClient3import com.intuit.karate.http.HttpRequest4import com.intuit.karate.http.HttpResponse5def client = HttpClient()6def session = new Session(client, request)7def response = session.get('/a')8response = session.get('/b')9response = session.get('/c')10response = session.get('/a')11response = session.get('/b')12response = session.get('/c')13response = session.get('/a')14response = session.get('/b')15response = session.get('/c')16import com.intuit.karate.http.Session17import com.intuit.karate.http.HttpClient18import com.intuit.karate.http.HttpRequest19import com.intuit.karate.http.HttpResponse20def client = HttpClient()21def session = new Session(client, request)22def response = session.get('/a')23response = session.get('/b')24response = session.get('/c')25response = session.get('/a')26response = session.get('/b')27response = session.get('/c')28response = session.get('/a')29response = session.get('/b')30response = session.get('/c')31import com.intuit.karate.http.Session32import com.intuit.karate.http.HttpClient33import com.intuit.karate.http.HttpRequest34import com.intuit.karate.http.HttpResponse35def client = HttpClient()

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session;2import com.intuit.karate.http.Cookie;3import com.intuit.karate.FileUtils;4import com.intuit.karate.HttpUtils;5import com.intuit.karate.StringUtils;6import com.intuit.karate.JsonUtils;7import com.intuit.karate.XmlUtils;8import com.intuit.karate.ScriptValue;9import com.intuit.karate.ScriptBindings;10import com.intuit.karate.ScriptBridge;11import com.intuit.karate.Script;12import com.intuit.karate.ScriptValue;13import com.intuit.karate.ScriptValueMap;14import com.intuit.karate.ScriptValueList;15import com.intuit.karate.CallContext;16import com.intuit.karate.ScriptEnv;17import com.intuit.karate.FileUtils;18import com.intuit.karate.FileUtils.FileType;19import com.intuit.karate.FileUtils.FileInfo;20import com.intuit.karate.FileUtils.FileInfo.FileInfoBuilder;21import com.intuit.karate.FileUtils.FileInfo.FileInfoBuilder;22import com.intuit.karate.JsonUtils;23import

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session2import com.intuit.karate.http.HttpResponse3import com.intuit.karate.http.HttpRequest4import com.intuit.karate.http.HttpMethod5import com.intuit.karate.http.HttpClient6def client = HttpClient()7def session = new Session(client)8def request = new HttpRequest()9def response = session.send(request)10import com.intuit.karate.http.Session11import com.intuit.karate.http.HttpResponse12import com.intuit.karate.http.HttpRequest13import com.intuit.karate.http.HttpMethod14import com.intuit.karate.http.HttpClient15def client = HttpClient()16def session = new Session(client)17def request = new HttpRequest()18def response = session.send(request)19import com.intuit.karate.http.Session20import com.intuit.karate.http.HttpResponse21import com.intuit.karate.http.HttpRequest22import com.intuit.karate.http.HttpMethod23import com.intuit.karate.http.HttpClient24def client = HttpClient()25def session = new Session(client)26def request = new HttpRequest()27def response = session.send(request)28import com.intuit.karate.http.Session29import com.intuit.karate.http.HttpResponse30import com.intuit.karate.http.HttpRequest31import com.intuit.karate.http.HttpMethod32import com.intuit.karate.http.HttpClient33def client = HttpClient()34def session = new Session(client)35def request = new HttpRequest()36def response = session.send(request)

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Cookie;2import com.intuit.karate.http.Session;3import java.util.Map;4public class 4 {5 public static void main(String[] args) {6 Session session = Session.start();7 Cookie cookie = new Cookie("cookieName", "cookieValue");8 session.setCookie(cookie);9 Map cookies = session.getCookies();10 System.out.println(cookies);11 }12}13{cookieName=cookieValue}14import com.intuit.karate.http.Cookie;15import com.intuit.karate.http.Session;16import java.util.Map;17public class 5 {18 public static void main(String[] args) {19 Session session = Session.start();20 Cookie cookie = new Cookie("cookieName", "cookieValue");21 session.setCookie(cookie);22 Map cookies = session.getCookies();23 System.out.println(cookies);24 session.clearCookies();25 cookies = session.getCookies();26 System.out.println(cookies);27 }28}29{cookieName=cookieValue}30{}31import com.intuit.karate.http.Cookie;32import com.intuit.karate.http.Session;33import java.util.Map;34public class 6 {35 public static void main(String[] args) {36 Session session = Session.start();37 Cookie cookie = new Cookie("cookieName", "cookieValue");38 session.setCookie(cookie);39 Map cookies = session.getCookies();40 System.out.println(cookies);41 session.clearCookies();42 cookies = session.getCookies();43 System.out.println(cookies);44 session.setCookies(cookies);45 cookies = session.getCookies();46 System.out.println(cookies);47 }48}49{cookieName=cookieValue}50{}51{cookieName=cookieValue}52import com.intuit.karate.http.Cookie;53import com.intuit.karate.http.Session;54import java.util.Map;55public class 7 {56 public static void main(String[] args) {57 Session session = Session.start();

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session;2import java.util.HashMap;3import java.util.Map;4public class 4 {5 public static void main(String[] args) {6 Session session = new Session();7 Map<String, String> headers = new HashMap<String, String>();8 headers.put("Content-Type", "application/json");9 String body = "{\"

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.junit5.Karate;2class 4 {3 Karate testSession() {4 return Karate.run("4").relativeTo(getClass());5 }6}7 * def serverConfig = read('classpath:server-config.js')8 * def session = karate.call('classpath:4-session.feature@session')9 * def session1 = karate.call('classpath:4-session.feature@session')10 * def session2 = karate.call('classpath:4-session.feature@session')11 * def session3 = karate.call('classpath:4-session.feature@session')12 * def serverConfig = read('classpath:server-config.js')13 * def session = karate.call('classpath:4-session.feature@session')14 * def session1 = karate.call('classpath:4-session.feature@session')15 * def session2 = karate.call('classpath:4-session.feature@session')16 * def session3 = karate.call('classpath:4-session.feature@session')17 * def session = karate.call('classpath:4-session.feature@session')18 * def session1 = karate.call('classpath:4-session.feature@session')19 * def session2 = karate.call('classpath:4-session.feature@session')

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session;2import com.intuit.karate.http.Cookie;3def session = new Session()4session.get()5def cookie = new Cookie("name", "value")6cookie.setPath("/")7cookie.setDomain("www.google.com")8cookie.setExpires(1234567890)9cookie.setSecure(true)10cookie.setHttpOnly(true)11session.addCookie(cookie)12session.get()13session.getCookie("name")14session.getCookies()15session.removeCookie("name")16session.removeAllCookies()17session.getUrl()18session.get()

Full Screen

Full Screen

Session

Using AI Code Generation

copy

Full Screen

1import com.intuit.karate.http.Session2def session = new Session()3session.setCookie("cookie1", "value1")4session.setCookie("cookie2", "value2")5session.setCookie("cookie3", "value3")6session.setCookie("cookie4", "value4")7session.setCookie("cookie5", "value5")8session.setCookie("cookie6", "value6")9session.setCookie("cookie7", "value7")10session.setCookie("cookie8", "value8")11session.setCookie("cookie9", "value9")12session.setCookie("cookie10", "value10")13session.setCookie("cookie11", "value11")14session.setCookie("cookie12", "value12")15session.setCookie("cookie13", "value13")16session.setCookie("cookie14", "value14")17session.setCookie("cookie15", "value15")18session.setCookie("cookie16", "value16")19session.setCookie("cookie17", "value17")20session.setCookie("cookie18", "value18")21session.setCookie("cookie19", "value19")22session.setCookie("cookie20", "value20")23session.setCookie("cookie21", "value21")24session.setCookie("cookie22", "value22")25session.setCookie("cookie23", "value23")26session.setCookie("cookie24", "value24")27session.setCookie("cookie25", "value25")28session.setCookie("cookie26", "value26")29session.setCookie("cookie27", "value27")30session.setCookie("cookie28", "value28")31session.setCookie("cookie29", "value29")32session.setCookie("cookie30", "value30")33session.setCookie("cookie31", "value31")34session.setCookie("cookie32", "value32")35session.setCookie("cookie33", "value33")36session.setCookie("cookie34", "value34")37session.setCookie("cookie35", "value35")38session.setCookie("cookie36", "value36")39session.setCookie("cookie37", "value37")40session.setCookie("cookie38", "value38")41session.setCookie("cookie39", "value39")42session.setCookie("cookie40", "value40")43session.setCookie("cookie41", "value41")44session.setCookie("cookie42", "value42")45session.setCookie("cookie43", "value43")

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Karate 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