Cucumber-JAVA:使用 ConcurrentEventListener 启动和停止驱动程序时出现问题

Cucumber-JAVA : Getting issue while starting and stopping the driver using ConcurrentEventListener

提问人:DeepakVerma 提问时间:10/23/2023 更新时间:10/23/2023 访问量:20

问:

当功能文件启动时,我能够成功启动驱动程序,并且一旦执行了该功能文件中的所有方案,驱动程序就会停止。但是,我编写的代码存在两个问题。

问题 1:在功能文件中使用标记时,驱动程序行为异常。

样品Feature_File
特征: Sample_1
@Run
方案:这是功能 1_1 的示例方案
鉴于这是一个前提条件语句
当这是一个操作语句时
那么这是一个断言语句
方案:这是功能 1_2 的示例方案
鉴于这是一个前提条件语句
当这是一个操作语句时
那么这是一个断言语句
方案:这是功能 1_3 的示例方案
鉴于这是一个前提条件语句
当这是一个操作语句时
那么这是一个断言语句

问题 2:方案计数不匹配。假设有两个功能文件:

功能 1 有 3 个方案。 功能 2 有 2 个方案。

在这种情况下,驱动程序在功能文件开始时启动。但是,在第二种情况之后,驱动程序将停止,然后再次启动。这是因为功能 2 有 2 个方案。这不应该发生

当功能 1 的第三个方案完成且功能 2 开始时,驱动程序将再次停止并启动,然后在执行功能 2 中的两个方案后停止,此行为是正确的。

/**
 * Handler for when a test case starts.
 * It initializes the driver and checks if it's the start of a new feature.
 */
private void handleTestCaseStarted(TestCaseStarted event) {
    if(DriverContext.getDriver() != null) {
        LOGGER.info("Driver Session ID at start of scenario: " + DriverContext.getDriver().getSessionId());
    } else {
        LOGGER.error("Driver is null at start of scenario.");
    }
    
    String newFeatureFile = event.getTestCase().getUri().toString();

    // Check for the start of a new feature and initialize driver if necessary
    if (isFirstFeature.get()) {
        LOGGER.info("NEW FEATURE STARTED: STARTING DRIVER");
        DriverFactory.getMobileDriverManager().startDriver();
        isFirstFeature.set(false);
    } else if (!currentFeatureFile.get().equals(newFeatureFile)) {
        LOGGER.info("NEW FEATURE STARTED: STARTING DRIVER");
        DriverFactory.getMobileDriverManager().startDriver();
    }

    // Update the current feature file and reset scenario count if it's a new feature
    if (!currentFeatureFile.get().equals(newFeatureFile)) {
        currentFeatureFile.set(newFeatureFile);
        executedScenariosCount.get().set(0);
    }
}

/**
 * Handler to read and store the current feature file details.
 */
private void readFeatureFile(TestSourceRead event) {
    currentFeatureFile.set(event.getUri().toString());
    totalScenariosInCurrentFeature.set(countScenariosInFeatureContent(event.getSource()));
}

/**
 * Handler for when a test case finishes.
 * It checks if all scenarios in the feature have been executed and stops the driver if necessary.
 */
private void handleTestCaseFinished(TestCaseFinished event) {
    if(DriverContext.getDriver() != null) {
        LOGGER.info("Driver Session ID at end of scenario: " + DriverContext.getDriver().getSessionId());
    } else {
        LOGGER.error("Driver is null at end of scenario.");
    }

    int count = executedScenariosCount.get().incrementAndGet();
    if (count == totalScenariosInCurrentFeature.get()) {
        LOGGER.info("FEATURE COMPLETED: STOPPING DRIVER");
        DriverFactory.getMobileDriverManager().quitDriver();
    }
}

/**
 * count the number of scenarios in the feature content.
 */
private int countScenariosInFeatureContent(String content) {
    int numberOfScenarios = 0;
    Scanner scanner = new Scanner(content);
    while (scanner.hasNext()) {
        String line = scanner.nextLine().trim();
        for (ScenarioPattern pattern : ScenarioPattern.values()) {
            if (pattern.matches(line)) {
                numberOfScenarios++;
                break;
            }
        }
    }
    scanner.close();
    return numberOfScenarios;
}

}

事件侦听器 cucumber-jvm cucumber-java

评论


答: 暂无答案