当前位置: 首页 > 知识库问答 >
问题:

ExecuteException:进程在ChromeDriver Chrome Selenium和TestNG Suite出现错误时退出

松和璧
2023-03-14

当我通过TestNG xml执行TestNG套件时,我观察到以下错误。

测试最初在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>
<?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
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();

    }

共有1个答案

邹齐智
2023-03-14

@科维德,嗨。让我们尝试一步一步地调试它:

>

  • 1)将selenium server更新至最新版本

    2)确保您也使用最新的chromedriver

    希望对你有帮助,尊敬的尤金

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

    改进#1驱动程序init(我已经用适当的配置分离了这个方法;我个人使用的是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;
    }
    

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

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

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

    Taskkill /T /F /IM chromedriver.exe
    

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

    希望最后能有所帮助:)问候你,尤金

  •  类似资料:
    • 进程退出和等待进程 当进程执行完它的工作后,就需要执行退出操作,释放进程占用的资源。ucore分了两步来完成这个工作,首先由进程本身完成大部分资源的占用内存回收工作,然后由此进程的父进程完成剩余资源占用内存的回收工作。为何不让进程本身完成所有的资源回收工作呢?这是因为进程要执行回收操作,就表明此进程还存在,还在执行指令,这就需要内核栈的空间不能释放,且表示进程存在的进程控制块不能释放。所以需要父进

    • 问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味

    • 您好,我是一个新的角度和量角器,我得到了“e/发射器-进程退出与错误代码199”这个错误在我的代码 但是当我试图通过下面的命令“protrator”filepath\conf.js“运行protrator时,出现了”e-launcher process exited with error code 199“错误。有人能告诉我,我在哪里出错了吗?我使用的是chrome 54和量角器版本5.3.0

    • 使用的配置: 请提及其他可能有用的细节。 我正在尝试从我的windows机器运行量角器测试。我得到以上错误,请帮助!!

    • 问题内容: 我正在努力使RSelenium在UNIX服务器上工作。它具有Mozilla Firefox 60.6.1,并运行两个命令: 似乎可以使用geckodriver(是吗?)。但是当我尝试启动驱动程序时: 由于这个问题和其他[问题,我试图降级geckodriver的版本,并使用firefox的无头模式: 但是仍然会得到相同的错误。我的怀疑是实际上没有安装geckodriver。这可能吗 ?怎

    • 我已经在Windows中安装了Android Studio,每当我试图创建一个新项目时,构建失败,错误地说进程意外退出,我使用的是和Android Studio最新版本。 这是我在构建日志时的例外情况。