org.apache.commons.exec.ExecuteException: Process exited with an error with ChromeDriver Chrome Selenium and TestNG Suite

19,800

@kovid, hi. Lets try to debug it in a step by step way:

Could You please also share testng.XML suite how its organized and share test code You're attempting to execute please?

From the exception I see - its trying to reach browser instance and for some reason its non accessible. Might be called
driver.close(); or driver.quit(); Somewhere in the code.

And regarding testNG configuration - You may take a look in framework specs and/or example representing how test suite is organized.

Hope it be helpful for You, regards, Eugene

============== UPD 2019/03/02 In addition to the explicit versioning @debanjanB provided above ^^ , I'd recommend to re-work code a bit in the following way:

IMPROVEMENT #1 Driver init (I've separated this method with appropriate configs ; personally I'm using selenium GRID , but You may keep using Chromedriver You use in your code, I'd say its a matter of habbit):

public static WebDriver driverSetUp(WebDriver driver) throws MalformedURLException {

ChromeOptions options = new ChromeOptions();
options.addArguments("-incognito");
DesiredCapabilities capability = DesiredCapabilities.chrome();
capability.setCapability(ChromeOptions.CAPABILITY, options);
//System.setProperty("webdriver.chrome.driver", System.getProperty("user.home")+"/Documents/:Proj_folder:/chromedriver");
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
capability.setBrowserName("chrome");
capability.setCapability("nativeEvents", true);
LoggingPreferences logs = new LoggingPreferences();
//Javascript console logs from the browser
logs.enable(LogType.BROWSER, Level.WARNING);
logs.enable(LogType.PERFORMANCE, Level.ALL);
capability.setCapability(CapabilityType.LOGGING_PREFS, logs);
String webDriverURL = "http://" + environmentData.getHubIP() + ":" + environmentData.getHubPort() + "/wd/hub";
log.info("creating driver instance on the URL :#### " + webDriverURL);
driver = new RemoteWebDriver(new URL(webDriverURL), capability);
driver.manage().window().maximize();
return driver;}





public static WebDriver driverInit(WebDriver driver, String startingUrl) throws MalformedURLException {
    driver = DriverInit.driverSetUp(driver);
    driver.get(startingUrl);

    return driver;
}

And if You need to do driver-restart action - You may use driver init with driver.close() wrapped in try-catch block

public static WebDriver driverRestart(WebDriver driver, String startingUrl) throws MalformedURLException {
    try {
        driver.close();
    } catch (WebDriverException e) {
        log.error("#### oops, seems driver instance have been already closed. Doing re-initialization right now!", e.getMessage(), e);
    }
    return driverInit(driver, startingUrl);
}

So AfterMethod will look like(Please add 'alwaysRun=true' flag):

   @AfterMethod(alwaysRun = true)
    public void closeDriverInstance() {
        try {
        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File(
String.format("c:\\SeleniumScreenshots\\%s.jpg", count)));
            driver.close();
        } catch (Exception e) {
            log.info(" oops, it seems that driver instance have been already closed.");
        }
    }

IMPROVEMENT #2

Please modify testng XML a bit (please add parallel="false" tag explicitly in suite tag):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="CustomerPortalTestSuite-SIT2" parallel="false" thread-count="5" verbose="8">
  <test name="CustomerPortalTestExecution">
    <classes>
    <class name="testclasses.CustomerPortalSupportTest"/>
    <class name="testclasses.CustomerPortalAccountTest"/>
    <class name="testclasses.CustomerPortalBillingTest"/>
    <class name="testclasses.CustomerPortalHomeTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite --> 

IMPROVEMENT #3 (assumption) if that not helps. From experience, if for some tests chrome instance is started and many times closed and re-launched again - You may still have bunch of chromedriver.exe processes (hanging in Your system and preventing new chromedriver processed to start)

Chromedriver processes list

So if You figure out that You have many processes, to kill them in WIN -You may call the command:

Taskkill /T /F /IM chromedriver.exe

So considering that You 'kill' each time Your chrome after every test method, You may additionally kill any chromedriver processes in after method as well (explained here how to execute cmd wrapped in java code).

Hope that finally helps :) Regards, Eugene

Share:
19,800

Related videos on Youtube

Kovid Mehta
Author by

Kovid Mehta

Updated on June 04, 2022

Comments

  • Kovid Mehta
    Kovid Mehta almost 2 years

    I am observing below error when I am executing TestNG suite through TestNG XML.

    SEVERE: org.apache.commons.exec.ExecuteException: Process exited with an error: -1073741502 (Exit value: -1073741502) FAILED CONFIGURATION: @BeforeMethod initializetest org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start. Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: 'PDC2LAP-7173253', ip: '10.170.10.178', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_162' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:202) at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:188) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:181) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:168) at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:123) at testclasses.BaseClass.initializetest(BaseClass.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211) at org.testng.internal.Invoker.invokeMethod(Invoker.java:585) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) at org.testng.TestRunner.privateRun(TestRunner.java:774) at org.testng.TestRunner.run(TestRunner.java:624) at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) at org.testng.SuiteRunner.run(SuiteRunner.java:261) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1191) at org.testng.TestNG.runSuitesLocally(TestNG.java:1116) at org.testng.TestNG.run(TestNG.java:1024) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77) Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:33768/status] to be available after 20001 ms at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100) at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:197) ... 35 more Caused by: java.util.concurrent.TimeoutException at java.util.concurrent.FutureTask.get(FutureTask.java:205) at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:156) at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75) ... 36 more

    The tests run smoothly initially for 10-12 tests but fails later with the above error message. I am hoping this is some issue with the configuration versions but I am not able to find it out.

    Project has below POM :

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>PageObjects</groupId>
      <artifactId>CustomerPortal</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>CustomerPortal</name>
      <url>http://maven.apache.org</url>
      <dependencies>
      <!-- https://mvnrepository.com/artifact/com.aventstack/extentreports -->
    <dependency>
        <groupId>com.aventstack</groupId>
        <artifactId>extentreports</artifactId>
        <version>4.0.9</version>
    </dependency>
      <!-- https://mvnrepository.com/artifact/com.relevantcodes/extentreports -->
    <dependency>
        <groupId>com.relevantcodes</groupId>
        <artifactId>extentreports</artifactId>
        <version>2.41.2</version>
    </dependency>
      <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
       <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
       <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-api -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>3.141.59</version>
    </dependency>
       <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>
       <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.testng/testng -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.14.3</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    
    <dependency>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
          <version>6.9.8</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    

    Java Version is java version "1.8.0_201". ChromeDriver 2.43.600210. Please help me with this issue as the tests are failing abruptly leaving the whole Automation Script unstable.

    TestNG is organized as below :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="CustomerPortalTestSuite-SIT2">
      <test thread-count="5" name="CustomerPortalTestExecution">
        <classes>
        <class name="testclasses.CustomerPortalSupportTest"/>
        <class name="testclasses.CustomerPortalAccountTest"/>
        <class name="testclasses.CustomerPortalBillingTest"/>
        <class name="testclasses.CustomerPortalHomeTest"/>
        </classes>
      </test> <!-- Test -->
    </suite> <!-- Suite -->
    

    Below is the code written in @BeforeMethod and @AfterMethod,

    @BeforeMethod
    public void initializetest() {
            System.setProperty("webdriver.chrome.driver", "C:\\Downloads\\ChromeDriverLatest\\chromedriver.exe");
            driver =new ChromeDriver();
            wait = new WebDriverWait(driver,10);
    
        }
    
        @AfterMethod
        public void endTest() throws IOException, Exception {
            File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                FileUtils.copyFile(scrFile, new File("c:\\SeleniumScreenshots\\" + count +".jpg"));
                count++;
            Thread.sleep(5000);
            driver.quit();
            driver=null;
        }
    

    Test Class Sample Below :

    @DataProvider(name="editAccDetails")
        public Object[][] logincreds(){
            Object[][] data = new Object[1][2];
            data[0][0] = "test";
            data[0][1] = "test";
            return data;
        }
    
    
        @Test(priority=1, dataProvider="editAccDetails")
        public void Details(String UsernameDP, String PasswordDP) throws Exception {
                Login TS1 = new Login(driver,wait);
                TS1.test(UsernameDP, PasswordDP);
                HomePage TS2 = new HomePage(driver,wait);
                TS2.test();
                AccountPages TS3 = new AccountPages(driver,wait);
                TS3.Details();
    
        }
    
    • Waqar Nadir
      Waqar Nadir about 5 years
      Share your complete Java test class
    • Kovid Mehta
      Kovid Mehta about 5 years
      Added above @waqar
    • Waqar Nadir
      Waqar Nadir about 5 years
      What is at line no 25 in BaseClass.java?
    • Kovid Mehta
      Kovid Mehta about 5 years
      driver=new ChromeDriver(); is at line 25 in my code. @waqar
    • Waqar Nadir
      Waqar Nadir about 5 years
      Please add complete code of classes.
  • Kovid Mehta
    Kovid Mehta about 5 years
    Thanks @eugene for your input. Selenium Server is the latest one along with the ChromeDriver. I have added the TestNG.XML structure above.
  • eugene.polschikov
    eugene.polschikov about 5 years
    @KovidMehta, could You please also share what methods/code do You call in @BeforeSuite @BeforeTest @BeforeClass @BeforeMethod and in after-methods please?
  • Kovid Mehta
    Kovid Mehta about 5 years
    Added the code in BeforeMethod and AfterMethod above Eugene.
  • eugene.polschikov
    eugene.polschikov about 5 years
    quick question - do You need to get tests running in parallel or they should be executed in one-by-one mode?
  • Kovid Mehta
    Kovid Mehta about 5 years
    Executed one by one would be my preference.
  • eugene.polschikov
    eugene.polschikov about 5 years
    @KovidMehta, updated my answer, Please feel free to up-vote if it helps for You. Thankful in advance.
  • Kovid Mehta
    Kovid Mehta about 5 years
    Thanks @eugene. This worked wonders. Just made changes to TestNG XML and AfterMethod and ran the suite. It worked perfectly and executed all the tests without any errors. Thank you so much for such detailed step by step explanation. Will try to implement the CMD part soon.
  • Kovid Mehta
    Kovid Mehta about 5 years
    Thanks @debanjan for your inputs. Tried to update all the above but still saw that error. I was able to run the Suite after making changes in testng XML and After method.
  • eugene.polschikov
    eugene.polschikov about 5 years
    anytime @KovidMehta