Source:
<code>public void start() throws CandybeanException { ChromeOptions chromeOptions = new ChromeOptions(); String chromeDriverLogPath = candybean.config.getPathValue("browser.chrome.driver.log.path"); logger.info("chromeDriverLogPath: " + chromeDriverLogPath); chromeOptions.addArguments("--log-path=" + chromeDriverLogPath); String chromeDriverPath = candybean.config.getPathValue("browser.chrome.driver.path"); <START> if("true".equals(candybean.config.getPathValue("parallel.enabled")) && <END> Integer.parseInt(candybean.config.getPathValue("parallel.threads")) > 1) { chromeDriverPath = chromeDriverPath.replaceAll("$", "_" + Thread.currentThread().getName()); } logger.info("chromeDriverPath: " + chromeDriverPath); if(StringUtils.isEmpty(chromeDriverPath) || !new File(chromeDriverPath).exists()){ String error = "Unable to find chrome browser driver from the specified location ("+chromeDriverPath+") in the configuration file! \n" + "Please add a configuration to the candybean config file for key \"browser.chrome.driver.path\" " + "that indicates the absolute or relative location the driver."; logger.severe(error); throw new CandybeanException(error); }else{ System.setProperty("webdriver.chrome.driver", chromeDriverPath); logger.info("Instantiating Chrome with:\n log path:" + chromeDriverLogPath + "\n driver path: " + chromeDriverPath); super.wd = ThreadGuard.protect(new ChromeDriver(chromeOptions)); super.start(); } }</code><technical_language>this means code removed Grimoire's SugarTest setup() method? forget this needs work correctly of URL in config file ends a / (the standard is trailing / included, if forgets do break everything). SugarTest code handles this replacing slash end of string empty string appending thread name</technical_language>

Target:
public void start() throws CandybeanException { ChromeOptions chromeOptions = new ChromeOptions(); String chromeDriverLogPath = candybean.config.getPathValue("browser.chrome.driver.log.path"); logger.info("chromeDriverLogPath: " + chromeDriverLogPath); chromeOptions.addArguments("--log-path=" + chromeDriverLogPath); String chromeDriverPath = candybean.config.getPathValue("browser.chrome.driver.path"); validateChromeDriverExist(chromeDriverPath); if("true".equals(candybean.config.getPathValue("parallel.enabled"))) { String originalChromePath = chromeDriverPath; if(OSValidator.isWindows()) { chromeDriverPath = chromeDriverPath.replaceAll("(.*)(\\.exe)", "$1_" + Thread.currentThread().getName() + "$2"); } else { chromeDriverPath = chromeDriverPath.replaceAll("$", "_" + Thread.currentThread().getName()); } if(!new File(chromeDriverPath).exists()) { try { FileUtils.copyFile(new File(originalChromePath), new File(chromeDriverPath)); if(!OSValidator.isWindows()) { Runtime.getRuntime().exec("chmod u+x " + chromeDriverPath); } } catch(IOException e) { String error = "Cannot duplicate a new chromedriver for parallelization"; logger.severe(error); throw new CandybeanException(error); } } } logger.info("chromeDriverPath: " + chromeDriverPath); System.setProperty("webdriver.chrome.driver", chromeDriverPath); logger.info("Instantiating Chrome with:\n log path:"+ chromeDriverLogPath + "\n driver path: " + chromeDriverPath); super.wd = ThreadGuard.protect(new ChromeDriver(chromeOptions)); super.start(); }