我想访问 @before
中的所有 cucumber 场景步骤钩。有办法做到这一点吗?
我尝试在 before hook 方法中传递 cucumber 场景对象,但它只提供基本信息,如 scenario.getName()
, scenario.getId()
。我需要的是类似 getSteps()
这给了我 List<String>
该特定场景的所有步骤。
我正在寻找的是这样的东西
@Before("@dev")
public void testcase(Scenario scenario){
for (Step a : scenario.getSteps()) {
System.out.println("scenario step = " + a.getText());
}
}
基本上我想要在测试执行开始时获得完整的场景信息。
如果我在 before 方法中传递类 cucumber.api.TestCase 的参数,那么我可以访问 getTestSteps()
方法,但这会导致以下异常。
cucumber.runtime.CucumberException: When a hook declares an argument it must be of type cucumber.api.Scenario. public void com.thermofisher.bid.spa.kingfisher.ui.steps.Hooks.poc(cucumber.api.TestCase)
最佳答案
尝试这样的事情:
@Before
public void setUp(Scenario scenario) throws Exception{
tags = (ArrayList<String>) scenario.getSourceTagNames();
System.out.println("At Hooks: " + scenario.getId());
Iterator ite = tags.iterator();
while (ite.hasNext()) {
String buffer = ite.next().toString();
if (buffer.startsWith("<tagOfATestCase>")) {
Field f = scenario.getClass().getDeclaredField("testCase");
f.setAccessible(true);
TestCase r = (TestCase) f.get(scenario);
List<PickleStepTestStep> testSteps = r.getTestSteps().stream().filter(x -> x instanceof PickleStepTestStep)
.map(x -> (PickleStepTestStep) x).collect(Collectors.toList());
for (PickleStepTestStep ts : testSteps) {
System.out.println(ts.getStepText());//will print your test case steps
}
}
}
关于java - 如何在钩子(Hook)之前获取所有 cucumber 场景步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296348/