为了账号安全,请及时绑定邮箱和手机立即绑定

org.apache.commons.exec.ExecuteException:

org.apache.commons.exec.ExecuteException:

万千封印 2022-07-14 17:23:26
当我通过 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 at org.openqa.selenium.remote。 service.DriverService.waitUntilAvailable(DriverService.java:202) 在 org.openqa.selenium.remote.service.DriverService.start(DriverService.java:188) 在 org.openqa。http://localhost:33768/status]在 org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100) 的 org.openqa.selenium.remote.service.DriverService.waitUntilAvailable( DriverService.java:197) ... 35 更多原因:com.google.common.util.concurrent.SimpleTimeLimiter 的 java.util.concurrent.FutureTask.get(FutureTask.java:205) 的 java.util.concurrent.TimeoutException .callWithTimeout(SimpleTimeLimiter.java:156) at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75) ... 还有 36 个对于 10-12 次测试,测试最初运行顺利,但后来因上述错误消息而失败。我希望这是配置版本的一些问题,但我无法找到它。
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

嗨。让我们尝试逐步调试它:

您能否也分享一下testng.XML套件如何组织和分享您尝试执行的测试代码?

从我看到的异常中 - 它试图访问浏览器实例并且由于某种原因它无法访问。可能在代码中被调用
driver.close(); 或 driver.quit();某处。

关于 testNG 配置 - 您可以查看框架规范 和/或 表示测试套件如何组织的示例。

希望它对你有帮助,问候,尤金

============== UPD 2019/03/02 除了上面提供的显式版本控制@debanjanB ^^ 之外,我建议通过以下方式重新编写代码:

改进 #1 驱动程序初始化(我已将此方法与适当的配置分开;我个人使用的是 selenium 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;

}

如果您需要执行驱动程序重新启动操作 - 您可以使用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"标签):


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

改进#3(假设)如果没有帮助。根据经验,如果对于某些测试,chrome 实例已启动并且多次关闭并再次重新启动 - 您可能仍然有一堆 chromedriver.exe进程(挂在您的系统中并阻止新的 chromedriver 处理启动)

因此,如果您发现您有很多进程,要在 WIN 中杀死它们 - 您可以调用以下命令:

Taskkill /T /F /IM chromedriver.exe

因此,考虑到您在每个测试方法之后每次都“杀死”您的 chrome,您还可以在 after 方法中另外杀死任何 chromedriver 进程(此处解释了 如何执行包装在 java 代码中的 cmd)。


查看完整回答
反对 回复 2022-07-14
?
森栏

TA贡献1810条经验 获得超5个赞

此错误消息...


 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时,组件不兼容。


解决方案


查看完整回答
反对 回复 2022-07-14
  • 2 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信