我需要解析我正在使用的事件发布器的cucumber特性。但是,我无法读取一个步骤的数据表,也无法读取场景附带的示例。
public class DryRunPlugin implements EventListener {
@Override
public void setEventPublisher(EventPublisher publisher) {
publisher.registerHandlerFor(TestCaseStarted.class, this::handleCaseStarted);
}
private void handleCaseStarted(TestCaseStarted event) {
Iterator steps = event.getTestCase().getTestSteps().iterator();
while(steps.hasNext())
{
Object stp = steps.next();
if(stp instanceof PickleStepTestStep)
{
PickleStepTestStep p = (PickleStepTestStep) stp;
String keyword = p.getStep().getKeyWord().toString();
String stepText = p.getStep().getText();
System.out.println(keyword + stepText);
Object dataTable = p.getStep().getArgument();
System.out.println(dataTable.getClass());
if(dataTable !=null)
{
//GherkinVintageDataTableArgument arg = (GherkinVintageDataTableArgument)dataTable;
//Object Rows = (dataTable.cells();
}
}
}
}
}
当我试图使用gherkinventagedatatableargument时,它给了我一个错误,因此无法访问datatable进行打印。我用的是 cucumber 5.5版
错误:io.cumber.core.gherkin.vintage.gherkinIntageDataTableArgument在io.cumber.core.gherkin.vintage中不是公共的。无法从包外部访问
1条答案
按热度按时间wfauudbj1#
签字人
Step.getArgument()
显示:然后看着
StepArgument
您将看到一个空接口和两个子接口,DataTableArgument
以及DocStringArgument
.您需要使用:
您可能还看到了接口的几个具体实现,例如
GherkinVintageDataTableArgument
但是你不能访问这些,因为它们是包私有的。这是故意的。
插件应该只需要使用
cucumber-plugin
模块。这可以确保您不依赖cucumber的内部实现细节,并且您的插件在升级时很可能工作。所以试着用io.cucumber.plugin.event.DataTableArgument
相反。我需要解析我正在使用的事件发布器的cucumber特性。
取决于你真正想要达到的目标,cucumber提供的忠诚可能还不够。考虑在
TestSourceRead
事件。