Java org.apache.commons.exec.ExecuteException:进程退出,但ChromeDriver Chrome Selenium和TestNG套件出现错误
当我通过TestNG XML执行TestNG套件时,我观察到以下错误 严重: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.waitUntilavable(DriverService.java:202) 位于org.openqa.selenium.remote.service.DriverService.start(DriverService.java:188) 位于org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79) 位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) 位于org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) 位于org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:131) 位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:181) 位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:168) 位于org.openqa.selenium.chrome.ChromeDriver(ChromeDriver.java:123) 在testclasses.BaseClass.initializetest(BaseClass.java:25)中 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 位于org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510) 位于org.testng.internal.Invoker.invokeConfigulations(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.testng.internal.TestMethodWorker.run(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.runsequential上(SuiteRunner.java:354) 位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 运行(SuiteRunner.java:261) 位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在org.testng.testng.runSuitesSequentially上(testng.java:1191) 位于org.testng.testng.runSuitesLocally(testng.java:1116) 位于org.testng.testng.run(testng.java:1024) 位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115) 位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) 位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77) 原因:org.openqa.selenium.net.UrlChecker$TimeoutException:在等待[可用]时超时 20001ms后 位于org.openqa.selenium.net.UrlChecker.waitUntilavable(UrlChecker.java:100) 位于org.openqa.selenium.remote.service.DriverService.waitUntilavable(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.waitUntilavable(UrlChecker.java:75) …还有36个 最初10-12次测试运行平稳,但随后出现上述错误消息而失败。我希望这是配置版本的问题,但我无法找到它 项目具有以下POM:Java org.apache.commons.exec.ExecuteException:进程退出,但ChromeDriver Chrome Selenium和TestNG套件出现错误,java,selenium,google-chrome,testng,selenium-chromedriver,Java,Selenium,Google Chrome,Testng,Selenium Chromedriver,当我通过TestNG XML执行TestNG套件时,我观察到以下错误 严重:org.apache.commons.exec.ExecuteException:进程已退出 一 错误:-1073741502(退出值:-1073741502) 配置失败:@BeforeMethod initializetest org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时。 构建信息:版本:“3.141.59”,修订版:“e82be7d358”,时间:“20
<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>
测试类样本如下:
@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();
}
@科维德,你好。
让我们尝试一步一步地调试它:
- 1) 更新至最新版本
- 2) 确保您也使用
testng.XML
suite它是如何组织和分享您试图执行的测试代码的好吗
从我看到的例外情况来看,它试图访问浏览器实例,由于某种原因,它是不可访问的。
可称为driver.close();
或
driver.quit();
代码中的某个地方
关于testNG配置,您可以查看和/或描述测试套件的组织方式
希望对您有所帮助,
当做
尤金
==============
UPD 2019/03/02
除了上面提供的显式版本控制@debanjanB^^之外,我建议以以下方式重新编写代码:
改进#1
Driver init(我已将此方法与适当的配置分开;我个人使用selenium GRID,但您可以继续使用代码中使用的Chromedriver,我认为这是一个习惯问题):
如果您需要执行驱动程序重启操作,您可以将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'标志):
改进#2
请稍微修改testng XML(请在中显式添加parallel=“false”标记)
@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();
}
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;
}
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)
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.");
}
}
<?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 -->
Taskkill /T /F /IM chromedriver.exe
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