Best Testsigma code snippet using com.testsigma.automator.drivers.DriverManager.endSession
Source:TestcaseRunner.java
...51 public void startSession() throws AutomatorException {52 DriverManager.getDriverManager(testDeviceEntity, testDeviceEntity.getWorkspaceType(), testDeviceSettings.getOs(),53 testCaseResult.getId(), DriverSessionType.TEST_CASE_SESSION);54 }55 public void endSession() throws AutomatorException {56 DriverManager driverManager = DriverManager.getDriverManager();57 if (driverManager != null) {58 driverManager.endSession();59 }60 }61 private void populateThreadContextData() {62 ThreadContext.put("TEST_CASE", testCaseEntity.getId() + "");63 ThreadContext.put("TEST_CASE_RESULT", testCaseResult.getId() + "");64 }65 private void resetThreadContextData() {66 ThreadContext.put("TEST_CASE", "");67 ThreadContext.put("TEST_CASE_RESULT", "");68 }69 public TestCaseResult run() throws Exception {70 resetThreadContextData();71 populateThreadContextData();72 log.info("Running testcase - " + testCaseEntity.getTestCaseName());73 if (testDeviceEntity.getCreateSessionAtCaseLevel()) {74 startSession();75 } else {76 restartCurrentSession();77 }78 environmentRunResult.setSessionCreatedOn(new Timestamp(System.currentTimeMillis()));79 ResultConstant result = ResultConstant.SUCCESS;80 List<TestCaseStepEntity> stepList = testCaseEntity.getTestSteps();81 List<TestCaseStepResult> testCaseStepsResult = new ArrayList<>();82 testCaseResult.setTestCaseStepResults(testCaseStepsResult);83 testCaseResult.setIsStepGroup(testCaseEntity.getIsStepGroup());84 testCaseResult.setDataDriven(testCaseEntity.getIsDataDriven());85 testCaseResult.setTestPlanResultId(testDeviceEntity.getExecutionRunId());86 testCaseResult.setTestCaseName(testCaseEntity.getTestCaseName());87 try {88 HashMap<Long, TestCaseStepResult> parentStatus = new HashMap<>();89 int currentIndex = 0;90 testCaseResult.setCurrentIndex(currentIndex);91 int lastStep = stepList.size() - 1;92 ScreenCaptureUtil screenCaptureUtil = new ScreenCaptureUtil(new ArrayList<>());93 for (int i = 0; i < stepList.size(); i++) {94 TestCaseStepEntity testCaseStepEntity = stepList.get(i);95 TestCaseStepResult testCaseStepResult = new TestCaseStepResult();96 testCaseStepResult.setTestCaseStepId(testCaseStepEntity.getId());97 testCaseStepResult.setSkipExe(skipExecution);98 testCaseStepResult.setSkipMessage(resultFailureMessage);99 /* if (!skipExecution && (workspaceType.equals(WorkspaceType.WebApplication) || workspaceType100 .equals(WorkspaceType.MobileWeb))) {101 url = getUrl();102 }*/103 boolean skipGetUrl = false;104 if (testCaseStepEntity.getAction() != null) {105 skipGetUrl = Arrays.asList(SKIP_GETURL).stream().filter(action -> testCaseStepEntity.getAction().contains(action)).count() > 0;106 }107 TestStepType type = testCaseStepEntity.getType();108 TestcaseStepRunner testcaseStepRunner =109 new TestcaseStepRunnerFactory().getRunner(this.workspaceType, testDeviceSettings.getOs(), type);110 TestCaseStepResult parentResult = parentStatus.get(testCaseStepEntity.getParentId());111 RunnerUtil util = new RunnerUtil();112 boolean isFailure =113 util.canSkipNormalStep(parentResult, testCaseStepEntity, testCaseStepResult)114 || util.nestedConditionalStep(parentResult, testCaseStepEntity, testCaseStepResult)115 || util.canSkipIfElse(parentResult, testCaseStepEntity, testCaseStepResult)116 || util.canSkipIfElseIf(parentResult, testCaseStepEntity, testCaseStepResult)117 || util.canSkipElseIfElseIf(parentResult, testCaseStepEntity, testCaseStepResult)118 || util.canSkipElseIfElse(parentResult, testCaseStepEntity, testCaseStepResult)119 || util.canSkipIfCondition(parentResult, testCaseStepEntity, testCaseStepResult)120 || util.canSkipForLoop(parentResult, testCaseStepEntity, testCaseStepResult);121 log.info(new ObjectMapperService().convertToJson(testCaseStepEntity));122 int stepResultUpdateSize = 10;123 if (!skipExecution && isFailure) {124 parentStatus.put(testCaseStepEntity.getId(), testCaseStepResult);125 testCaseStepResult.setResult(ResultConstant.NOT_EXECUTED);126 int processedSteps = processedStepCount(testCaseStepsResult);127 if (processedSteps % stepResultUpdateSize == 0) {128 testCaseResult.setTestCaseStepResults(testCaseStepsResult);129 postTestcaseResult();130 currentIndex = +stepResultUpdateSize;131 processedSteps = 0;132 testCaseStepsResult = new ArrayList<>();133 testCaseResult.setCurrentIndex(currentIndex);134 }135 if (screenCaptureUtil.screenshots.size() > 0 && (lastStep == i)) {136 log.debug("Screenshots task for :::" + testCaseStepResult);137 final String requestId = ThreadContext.get("X-Request-Id");138 UploadThreadPool.getInstance().upload(new ScreenshotUploadTask(screenCaptureUtil.screenshots, requestId, testDeviceEntity));139 screenCaptureUtil.screenshots = new ArrayList<>();140 }141 testCaseStepResult = testcaseStepRunner142 .run(testCaseStepEntity, testCaseStepResult, mapStepResult, testCaseResult, parentStatus,143 false, false, screenCaptureUtil);144 testCaseStepsResult.add(testCaseStepResult);145 mapStepResult.put(testCaseStepEntity.getId(), testCaseStepResult);146 continue;147 }148 testCaseStepResult = testcaseStepRunner149 .run(testCaseStepEntity, testCaseStepResult, mapStepResult, testCaseResult, parentStatus,150 false, false, screenCaptureUtil);151 if (screenCaptureUtil.screenshots.size() == SAVE_BATCH_IMAGES || (lastStep == i)) {152 final String requestId = ThreadContext.get("X-Request-Id");153 UploadThreadPool.getInstance().upload(new ScreenshotUploadTask(screenCaptureUtil.screenshots, requestId, testDeviceEntity));154 screenCaptureUtil.screenshots = new ArrayList<>();155 }156 skipExecution = testCaseStepResult.getSkipExe();157 resultFailureMessage = testCaseStepResult.getSkipMessage();158 testCaseStepsResult.add(testCaseStepResult);159 mapStepResult.put(testCaseStepEntity.getId(), testCaseStepResult);160 TestCaseStepEntity stepGroup = null;161 TestCaseStepResult stepGroupResult = null;162 if (testCaseStepEntity.getStepGroupId() != null) {163 stepGroup = ((testCaseStepEntity.getTestCaseSteps() != null) && (testCaseStepEntity.getTestCaseSteps().size() > 0)) ?164 testCaseStepEntity.getTestCaseSteps().get(0) : null;165 stepGroupResult = ((testCaseStepResult.getStepResults() != null) && (testCaseStepResult.getStepResults().size() > 0)) ?166 testCaseStepResult.getStepResults().get(0) : null;167 }168 if (i == 0 && ((workspaceType == WorkspaceType.WebApplication) || (workspaceType169 == WorkspaceType.MobileWeb)) && (getUrl() != null) && !skipGetUrl && ((testCaseStepEntity.getStepGroupId() != null && stepGroup != null170 && (stepGroup.getStepGroupId() != null && !stepGroup.getAction().contains(AutomatorMessages.KEYWORD_GO_TO) && stepGroupResult171 .getResult() == ResultConstant.SUCCESS)) ||172 (testCaseStepEntity.getAction() != null && !testCaseStepEntity.getAction()173 .contains(AutomatorMessages.KEYWORD_GO_TO) && testCaseStepResult.getResult() == ResultConstant.SUCCESS))174 ) {175 } else if (i == (stepList.size() - 1) && !skipGetUrl && testCaseStepResult.getResult() == ResultConstant.SUCCESS176 && (workspaceType.equals(WorkspaceType.WebApplication) || workspaceType.equals(WorkspaceType.MobileWeb))) {177 ExecutionEnvironmentRunner.addUrl(testPlanId, testCaseEntity.getId(), getUrl());178 }179 //TODO:use check based step type180 if ((testCaseStepEntity.getConditionType() == null || testCaseStepEntity.getConditionType() == ConditionType.NOT_USED181 || ConditionType.LOOP_FOR == testCaseStepEntity.getConditionType()) && (testCaseStepEntity.getStepDetails().getIgnoreStepResult() != null && !testCaseStepEntity.getStepDetails().getIgnoreStepResult()) ) {182 result = (result.getId() < testCaseStepResult.getResult().getId()) ? testCaseStepResult.getResult() : result;183 }184 int processedSteps = processedStepCount(testCaseStepsResult);185 if (processedSteps % stepResultUpdateSize == 0) {186 testCaseResult.setTestCaseStepResults(testCaseStepsResult);187 postTestcaseResult();188 currentIndex = +stepResultUpdateSize;189 processedSteps = 0;190 testCaseStepsResult = new ArrayList<>();191 testCaseResult.setCurrentIndex(currentIndex);192 }193 }194 testCaseResult.setTestCaseStepResults(testCaseStepsResult);195 } catch (Exception e) {196 log.error(e.getMessage(), e);197 }198 testCaseResult.setResult(ObjectUtils.defaultIfNull(testCaseResult.getResult(), result));199 testCaseResult.setEndTime(new Timestamp(System.currentTimeMillis()));200 if ((testCaseResult.getResult() == ResultConstant.SUCCESS) && (result == ResultConstant.SUCCESS)) {201 testCaseResult.setMessage(AutomatorMessages.MSG_TEST_CASE_SUCCESS);202 } else if (StringUtils.isBlank(testCaseResult.getMessage())) {203 testCaseResult.setMessage(AutomatorMessages.MSG_TEST_CASE_FAILURE);204 }205 // check for browser closed condition206 if (testCaseResult.getResult() != ResultConstant.SUCCESS) {207 if (ErrorCodes.BROWSER_CLOSED.equals(testCaseResult.getErrorCode())) {208 DriverManager.getDriverManager().setRestartDriverSession(Boolean.TRUE);209 }210 }211 if (testDeviceEntity.getCreateSessionAtCaseLevel()) {212 endSession();213 }214 resetThreadContextData();215 return testCaseResult;216 }217 private boolean startNewDriverSession() {218 boolean shouldStart = false;219 DriverManager driverManager = DriverManager.getDriverManager();220 String capabilityStr = hasDriverSession();221 String currentSessionId = DriverManager.getDriverManager().getDriver().getRemoteWebDriver().getSessionId().toString();222 if (driverManager != null) {223 shouldStart = driverManager.getRestartDriverSession() || currentSessionId == null224 || (currentSessionId != null && capabilityStr == null);225 }226 return shouldStart;227 }228 public String getUrl() {229 try {230 return DriverManager.getDriverManager().getDriver().getRemoteWebDriver().getCurrentUrl();231 } catch (Exception e) {232 log.error(e.getMessage(), e);233 }234 return null;235 }236 public String hasDriverSession() {237 try {238 return DriverManager.getDriverManager().getDriver().getRemoteWebDriver().getCapabilities().toString();239 } catch (Exception e) {240 log.error(e.getMessage(), e);241 }242 return null;243 }244 public void postTestcaseResult() throws Exception {245 AutomatorConfig.getInstance().getAppBridge().postTestCaseResult(testCaseResult);246 }247 protected int processedStepCount(List<TestCaseStepResult> testCaseStepResults) {248 int processedSteps = testCaseStepResults.size();249 for (TestCaseStepResult step : testCaseStepResults) {250 processedSteps += step.getStepResults().size();251 }252 return processedSteps;253 }254 private void restartCurrentSession() throws AutomatorException {255 if (workspaceType.equals(WorkspaceType.Rest)) {256 return;257 }258 DriverManager driverManager = DriverManager.getDriverManager();259 if (startNewDriverSession()) {260 log.info("Found startNewDriverSession flag to be true. Starting a new driver session.");261 driverManager.endSession();262 driverManager.startSession(DriverSessionType.TEST_CASE_SESSION, testCaseResult.getId(), Boolean.TRUE);263 driverManager.setRestartDriverSession(Boolean.FALSE);264 } else {265 log.info("Found startNewDriverSession flag to be false. Continuing with the existing driver session.");266 if (driverManager.isRestart()) {267 driverManager.storeSessionId(DriverSessionType.TEST_CASE_SESSION, testCaseResult.getId());268 }269 }270 }271}...
Source:DriverManager.java
...126 throw new TestsigmaNoParallelRunException(ErrorCodes.NO_PARALLEL_RUN,errorMessage);127 }else {128 errorMessage = "Unable to create a new Test Session due to unexpected failure(0x537). " + errorMessage;129 }130 endSession();131 throw new AutomatorException(ErrorCodes.DRIVER_NOT_CREATED, errorMessage);132 }133 if (remoteWebDriver != null) {134 log.info("Driver Session ID - " + getSessionId());135 } else {136 throw new AutomatorException(ErrorCodes.DRIVER_NOT_CREATED, AutomatorMessages.EXCEPTION_WEBDRIVER_NOTCREATED);137 }138 afterSessionCreateActions();139 }140 public void endSession() throws AutomatorException {141 try {142 if (getDriver() != null && (getDriver().getRemoteWebDriver() != null)) {143 log.info("Ending session(if exists) with execution UUID - " + executionUuid + " and session ID - "144 + getSessionId());145 RemoteWebDriver driver = getDriver().getRemoteWebDriver();146 try {147 beforeEndSessionActions();148 driver.quit();149 } catch (Exception e) {150 log.error(e.getMessage(), e);151 driver.quit();152 }153 afterEndSessionActions();154 } else {155 log.debug("There is no driver session with executionID - " + executionUuid);156 }157 } catch (Exception e) {158 throw new AutomatorException(e.getMessage(), e);159 }160 }161 protected void beforeEndSessionActions() throws AutomatorException {162 log.debug("Executing before end session actions for execution UUID - " + executionUuid);163 }164 protected void afterEndSessionActions() throws AutomatorException {165 log.debug("Executing after end session actions for execution UUID - " + executionUuid);166 new RuntimeDataProvider().clearRunTimeData(executionUuid);167 getDriver().setRemoteWebDriver(null);168 setDriver(null);169 sessionEndInstant = Instant.now();170 log.info("Total session time - " + TimeUtil.getFormattedDuration(sessionStartInstant, sessionEndInstant));171 }172 private String parseErrorMessage(String errorMessage) {173 String parsedErrorMessage = "";174 try {175 String[] tokens;176 if (errorMessage != null) {177 tokens = errorMessage.split("Original error:");178 if (tokens.length > 1) {179 tokens = tokens[1].split("Build info: version:");180 if (tokens.length > 1) {181 parsedErrorMessage = tokens[0];182 }183 }184 if(errorMessage.contains(SessionErrorType.PLATFORM_OS_NOT_SUPPORTED.name())){185 parsedErrorMessage = MSG_OS_NOT_SUPPORTED;186 }else if(errorMessage.contains(SessionErrorType.PLATFORM_BROWSER_VERSION_NOT_SUPPORTED.name())){187 parsedErrorMessage = MSG_BROWSER_NOT_SUPPORTED;188 }else if(errorMessage.contains(SessionErrorType.LAB_MINUTES_EXCEEDED.name())){189 parsedErrorMessage = MSG_LAB_MINUTES_EXCEEDED;190 }else if(errorMessage.contains(SessionErrorType.NO_PARALLEL_RUN.name())){191 parsedErrorMessage = MSG_NO_PARALLEL_RUN;192 }193 }194 } catch (Exception e) {195 log.error(e.getMessage(), e);196 }197 return parsedErrorMessage;198 }199 public void storeSessionId(DriverSessionType driverSessionType, Long entityId) throws AutomatorException {200 try {201 switch (driverSessionType) {202 case ENVIRONMENT_SESSION:203 storeEnvironmentSessionId(entityId);204 break;205 case TEST_SUITE_SESSION:206 storeTestSuiteSessionId(entityId);207 break;208 case TEST_CASE_SESSION:209 storeTestCaseSessionId(entityId);210 break;211 default:212 log.error("Unknown driver session type value provided - " + driverSessionType);213 }214 } catch (Exception e) {215 endSession();216 throw e;217 }218 }219 private void storeEnvironmentSessionId(Long entityId) throws AutomatorException {220 try {221 TestDeviceResultRequest testDeviceResultRequest = new TestDeviceResultRequest();222 testDeviceResultRequest.setId(entityId);223 testDeviceResultRequest.setSessionId(getSessionId());224 AutomatorConfig.getInstance().getAppBridge().updateEnvironmentResultData(testDeviceResultRequest);225 } catch (Exception e) {226 log.error(e.getMessage(), e);227 throw new AutomatorException(e.getMessage(), e);228 }229 }...
endSession
Using AI Code Generation
1import com.testsigma.automator.drivers.DriverManager;2public class 2 {3 public static void main(String[] args) {4 DriverManager.endSession();5 }6}7import com.testsigma.automator.drivers.DriverManager;8public class 3 {9 public static void main(String[] args) {10 DriverManager.endSession();11 }12}13import com.testsigma.automator.drivers.DriverManager;14public class 4 {15 public static void main(String[] args) {16 DriverManager.endSession();17 }18}19import com.testsigma.automator.drivers.DriverManager;20public class 5 {21 public static void main(String[] args) {22 DriverManager.endSession();23 }24}25import com.testsigma.automator.drivers.DriverManager;26public class 6 {27 public static void main(String[] args) {28 DriverManager.endSession();29 }30}31import com.testsigma.automator.drivers.DriverManager;32public class 7 {33 public static void main(String[] args) {34 DriverManager.endSession();35 }36}37import com.testsigma.automator.drivers.DriverManager;38public class 8 {39 public static void main(String[] args) {40 DriverManager.endSession();41 }42}43import com.testsigma.automator.drivers.DriverManager;44public class 9 {45 public static void main(String[] args) {46 DriverManager.endSession();47 }48}49import com.testsigma.automator.drivers.DriverManager;50public class 10 {
endSession
Using AI Code Generation
1import com.testsigma.automator.drivers.DriverManager;2public class Test {3 public static void main(String[] args) {4 DriverManager.endSession();5 }6}7import com.testsigma.automator.drivers.DriverManager;8public class Test {9 public static void main(String[] args) {10 DriverManager.endSession();11 }12}13import com.testsigma.automator.drivers.DriverManager;14public class Test {15 public static void main(String[] args) {16 DriverManager.endSession();17 }18}19import com.testsigma.automator.drivers.DriverManager;20public class Test {21 public static void main(String[] args) {22 DriverManager.endSession();23 }24}25import com.testsigma.automator.drivers.DriverManager;26public class Test {27 public static void main(String[] args) {28 DriverManager.endSession();29 }30}31import com.testsigma.automator.drivers.DriverManager;32public class Test {33 public static void main(String[] args) {34 DriverManager.endSession();35 }36}37import com.testsigma.automator.drivers.DriverManager;38public class Test {39 public static void main(String[] args) {40 DriverManager.endSession();41 }42}43import com.testsigma.automator.drivers.DriverManager;44public class Test {45 public static void main(String[] args) {46 DriverManager.endSession();47 }48}49import com.testsigma.automator.drivers.DriverManager;50public class Test {
endSession
Using AI Code Generation
1import com.testsigma.automator.drivers.DriverManager;2public class 2 {3 public static void main(String[] args) {4 DriverManager.endSession();5 }6}7import com.testsigma.automator.drivers.DriverManager;8public class 3 {9 public static void main(String[] args) {10 DriverManager.closeSession();11 }12}13import com.testsigma.automator.drivers.DriverManager;14import org.openqa.selenium.WebDriver;15public class 4 {16 public static void main(String[] args) {17 WebDriver driver = DriverManager.getDriver();18 }19}20import com.testsigma.automator.drivers.DriverManager;21public class 5 {22 public static void main(String[] args) {23 String driverName = DriverManager.getDriverName();24 }25}26import com.testsigma.automator.drivers.DriverManager;27public class 6 {28 public static void main(String[] args) {29 String driverVersion = DriverManager.getDriverVersion();30 }31}32import com.testsigma.automator.drivers.DriverManager;33public class 7 {34 public static void main(String[] args) {35 String browserName = DriverManager.getBrowserName();36 }37}38import com.testsigma.automator.drivers.DriverManager;39public class 8 {40 public static void main(String[] args) {
endSession
Using AI Code Generation
1WebDriver driver = DriverManager.getWebDriver();2driver.findElement(By.name("q")).sendKeys("Hello World");3driver.findElement(By.name("btnK")).click();4driver.findElement(By.name("btnI")).click();5driver.findElement(By.name("btnK")).click();6driver.findElement(By.name("btnI")).click();7driver.findElement(By.name("btnK")).click();8driver.findElement(By.name("btnI")).click();9driver.findElement(By.name("btnK")).click();10driver.findElement(By.name("btnI")).click();11driver.findElement(By.name("btnK")).click();12driver.findElement(By.name("btnI")).click();13driver.findElement(By.name("btnK")).click();14driver.findElement(By.name("btnI")).click();15driver.findElement(By.name("btnK")).click();16driver.findElement(By.name("btnI")).click();17driver.findElement(By.name("btnK")).click();18driver.findElement(By.name("btnI")).click();19driver.findElement(By.name("btnK")).click();20driver.findElement(By.name("btnI")).click();21driver.findElement(By.name("btnK")).click();22driver.findElement(By.name("btnI")).click();23driver.findElement(By.name("btnK")).click();24driver.findElement(By.name("btnI")).click();25driver.findElement(By.name("btnK")).click();26driver.findElement(By.name("btnI")).click();27driver.findElement(By.name("btnK")).click();28driver.findElement(By.name("btnI")).click();29driver.findElement(By.name("btnK")).click();30driver.findElement(By.name("btnI")).click();31driver.findElement(By.name("btnK")).click();32driver.findElement(By.name("btnI")).click();33driver.findElement(By.name("btnK")).click();34driver.findElement(By.name("btnI")).click();35driver.findElement(By.name("btnK")).click();36driver.findElement(By.name("btnI")).click();37driver.findElement(By.name("btnK")).click();38driver.findElement(By.name("btnI")).click();39driver.findElement(By.name("btnK")).click();40driver.findElement(By.name("btnI")).click();41driver.findElement(By.name("btnK")).click();42driver.findElement(By.name("btnI")).click();43driver.findElement(By.name("btnK")).click();44driver.findElement(By.name("btnI")).click();45driver.findElement(By.name("btnK")).click();46driver.findElement(By.name("btnI")).click();47driver.findElement(By.name("btnK")).click();48driver.findElement(By.name("btnI")).click();49driver.findElement(By.name("btnK")).click();
endSession
Using AI Code Generation
1import com.testsigma.automator.drivers.DriverManager;2public class EndSession {3public static void main(String[] args) {4DriverManager driverManager = new DriverManager();5driverManager.endSession("sessionID");6}7}8import com.testsigma.automator.drivers.DriverManager;9import com.testsigma.automator.drivers.DriverOptions;10public class CreateSession {11public static void main(String[] args) {12DriverManager driverManager = new DriverManager();13DriverOptions driverOptions = new DriverOptions();14driverOptions.setBrowserName("chrome");15driverOptions.setPlatform("windows");16driverOptions.setVersion("latest");17driverManager.createSession(driverOptions);18}19}20import com.testsigma.automator.drivers.DriverManager;21import com.testsigma.automator.drivers.DriverOptions;22public class CreateSession {23public static void main(String[] args) {24DriverManager driverManager = new DriverManager();25DriverOptions driverOptions = new DriverOptions();26driverOptions.setBrowserName("chrome");27driverOptions.setPlatform("windows");28driverOptions.setVersion("latest");29driverManager.createSession(driverOptions);30}31}32import com.testsigma.automator.drivers.DriverManager;33import com.testsigma.automator.drivers.DriverOptions;34public class GetDriver {35public static void main(String[] args) {36DriverManager driverManager = new DriverManager();37DriverOptions driverOptions = new DriverOptions();38driverOptions.setBrowserName("chrome");39driverOptions.setPlatform("windows");40driverOptions.setVersion("latest");41driverManager.createSession(driverOptions);42driverManager.getDriver();43}44}
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!!