@ Ковид, привет.Попробуем пошагово отладить его:
Не могли бы вы также поделиться 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)

Так что, если вы выясните, что у вас много процессов, чтобы убить их в WIN, вы можете вызвать команду:
Taskkill /T /F /IM chromedriver.exe
Таким образом, учитывая, что Вы «убиваете» каждый раз свой chrome после каждого тестового метода, Вы можете дополнительно уничтожить любые процессы chromedriver в последующем методе (объяснено здесь , как выполнить cmd, завернутый в код Java).
Надеюсь, что наконец-то поможет :) С уважением, Евгений