org.apache.commons.exec.ExecuteException: процесс завершился с ошибкой в ​​ChromeDriver Chrome Selenium и TestNG Suite - PullRequest
0 голосов
/ 28 февраля 2019

Я наблюдаю ошибку ниже, когда я выполняю комплект TestNG через TestNG XML.

SEVERE: org.apache.commons.exec.ExecuteException: процесс завершился с ошибкой: -1073741502 (значение выхода: -1073741502) СБОЙ КОНФИГУРАЦИЯ: @BeforeMethod initializetest org.openqa.selenium.WebDriverExceptionПревышено время ожидания запуска драйвера.Информация о сборке: версия: '3.141.59', ревизия: 'e82be7d358', время: '2018-11-14T08: 17: 03' Информация о системе: хост: '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.version: ChromeDriver по адресу org.openqa.selenium.remote.service.DriverService.waitUntilAvailable (DriverService.java:202) в org.openqa.selenium.remote.service.DriverService.start (DriverService.java:188) в org.openqa.selenium.remote.service.DriverCommandExecutor.Java: 79) на org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:552) на org.openqa.selenium.remote.RemoteWebDriver.startSession (RemoteWebDriver.jote:213) на org.open.RemoteWebDriver. (RemoteWebDriver.java:131) по адресу org.openqa.selenium.chrome.ChromeDriver. (ChromeDriver.java:181) по адресу org.openqa.selenium.chrome.ChromeDriver. (ChromeDriver.javag: 168) в at.selenium.chrome.ChromeDriver. (ChromeDriver.java:123) в тестовом классеes.BaseClass.initializetest (BaseClass.java:25) в sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java).Java: 43) на java.lang.reflect.Method.invoke (Method.java:498) на org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:85) на org.testng.internal.Invoker.invokefiguration.java: 510) в org.testng.internal.Invoker.invokeConfigurations (Invoker.java:211) в org.testng.internal.Invoker.invokeMethod (Invoker.java:585) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:816) в org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1124) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125) в org.Terin(TestMethodWorker.java:108) в org.testng.TestRunner.privateRun (TestRunner.java:774) в org.testng.TestRunner.run (TestRunner.java:624) в org.testng.SuiteRunner.runTest (SuiteRunner.java:359) в org.testng.SuiteRunner.runSequentially (SuiteRunner.java:354) в org.testng.SuiteRunner.RunRun (Suite).java: 312) в org.testng.SuiteRunner.run (SuiteRunner.java:261) в org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) в org.testng.SuiteRunnerWorker.run (SuiteRunnerW86)на org.testng.TestNG.runSuitesSequentially (TestNG.java:1191) на org.testng.TestNG.runSuitesLocally (TestNG.java:1116) на org.testng.TestNG.run (TestNG.java:1024) на org.test.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:115) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:251) в org.testng.remote.RemoteTestNG.main (RemoteTestNG): by: Remote org).openqa.selenium.net.UrlChecker $ TimeoutException: истекло время ожидания ожидания [http://localhost:33768/status] через 20001 мс в org.openqa.selenium.net.UrlChecker.waitUntilAvailable (UrlChecker.java:100) в организации.openqa.selenium.remote.service.DriverService.waitUntilAvailable (DriverService.java:197) ... еще 35 причин: java.util.concurrent.TimeoutException в java.util.concurrent.FutureTask.get (FutureTask.java:205)на com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout (SimpleTimeLimiter.java:156) на org.openqa.selenium.net.UrlChecker.waitUntilAvailable (UrlChecker.java:75) ... еще 36

1007*

Изначально тесты проходили гладко для 10-12 тестов, но позже не сработали с приведенным выше сообщением об ошибке.Я надеюсь, что это какая-то проблема с версиями конфигурации, но я не могу это выяснить.

Проект имеет 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 - это Java-версия "1.8.0_201".ChromeDriver 2.43.600210.Пожалуйста, помогите мне с этой проблемой, так как тесты внезапно терпят неудачу, оставляя весь скрипт автоматизации нестабильным.

TestNG организован следующим образом:

<?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 -->

Ниже приведен код, написанный на @BeforeMethod и @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;
    }

Образец класса тестирования ниже:

@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();

    }

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Это сообщение об ошибке ...

 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

... означает, что ChromeDriver не смог взаимодействовать с WebElement .

Ваша главная проблема - несовместимость между версиями двоичных файлов, которые вы используете, следующим образом:

Хотя вы упомянули об использовании:

  • Java-версия - Javaверсия "1.8.0_201"
  • ChromeDriver 2.43.600210

Tracelogs говорит:

java.version: '1.8.0_162'

При использовании Selenium v3.141.59 компоненты не совместимы.


Решение

0 голосов
/ 28 февраля 2019

@ Ковид, привет.Попробуем пошагово отладить его:

Не могли бы вы также поделиться testng.XML комплектом его организации и поделиться тестовым кодом, который вы пытаетесьвыполнить пожалуйста?

Из исключения, которое я вижу - он пытается связаться с экземпляром браузера и по какой-то причине недоступен.Может называться
driver.close(); или driver.quit(); Где-то в коде.

А что касается конфигурации testNG - вы можете взглянуть на спецификации фреймворка и / или пример , представляющий, как организован набор тестов.

Надеюсь, это такБуду полезен Вам, С уважением, Евгений

============== UPD 2019/03/02 В дополнение к явной версии @debanjanB, предоставленной выше^^, я бы порекомендовал немного переработать код следующим образом:

УЛУЧШЕНИЕ # 1 Драйвер init (Я разделил этот метод с соответствующими конфигами; лично я 'Я использую GRID селена, но вы можете продолжать использовать Chromedriver, который вы используете в своем коде, я бы сказал, что это вопрос хаббита):

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;
}

И если вам нужно выполнить действие по перезагрузке драйвера - вы можетеиспользовать драйвер init с driver.close(), завернутым в блок try-catch

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);
}

Так что AfterMethod будет выглядеть (пожалуйста, добавьте флаг 'AlwaysRun = true' ):

   @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.");
        }
    }

УЛУЧШЕНИЕ # 2

Пожалуйста, немного измените testng XML (пожалуйста, добавьте parallel = "false " явно в теге suite):

<?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 (предположение), если это не помогает.Исходя из опыта, если для некоторых тестов экземпляр chrome запускается и много раз закрывается и снова запускается - у вас все еще может быть куча процессов chromedriver.exe (зависание в вашей системе и предотвращение запуска нового обработчика chromedriver)

Chromedriver processes list

Так что, если вы выясните, что у вас много процессов, чтобы убить их в WIN, вы можете вызвать команду:

Taskkill /T /F /IM chromedriver.exe

Таким образом, учитывая, что Вы «убиваете» каждый раз свой chrome после каждого тестового метода, Вы можете дополнительно уничтожить любые процессы chromedriver в последующем методе (объяснено здесь , как выполнить cmd, завернутый в код Java).

Надеюсь, что наконец-то поможет :) С уважением, Евгений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...