提问人:DeepakVerma 提问时间:10/23/2023 更新时间:10/23/2023 访问量:20
Cucumber-JAVA:使用 ConcurrentEventListener 启动和停止驱动程序时出现问题
Cucumber-JAVA : Getting issue while starting and stopping the driver using ConcurrentEventListener
问:
当功能文件启动时,我能够成功启动驱动程序,并且一旦执行了该功能文件中的所有方案,驱动程序就会停止。但是,我编写的代码存在两个问题。
问题 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;
}
}
答: 暂无答案
评论