我想访问@before
挂钩中的所有黄瓜方案步骤。有办法吗?
我曾尝试通过before hook方法传递黄瓜方案对象,但是它仅提供基本信息,例如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方法中传递了类banana.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)
答案 0 :(得分:1)
尝试这样的事情:
@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
}
}
}
答案 1 :(得分:0)
黄瓜不提供任何直接的方法来获取Hook内方案的完整信息。 场景界面可以为您提供非常有限的信息,例如场景名称,下面是该界面的其余直接方法。
public interface Scenario {
Collection<String> getSourceTagNames();
Result.Type getStatus();
boolean isFailed();
void embed(byte[] data, String mimeType);
void write(String text);
String getName();
String getId();
String getUri();
List<Integer> getLines();
}
答案 2 :(得分:0)
Java:
请参考TestCase
下的cucumber-jvm/core/src/main/java/cucumber/api/TestCase.java
界面
https://github.com/cucumber/cucumber-jvm/blob/master/core/src/main/java/cucumber/api/TestCase.java
testcase.getTestSteps();
我知道问题与红宝石无关,但我也想提供红宝石解决方案,以便它可以帮助某人在红宝石中寻找解决方案。
Ruby::将提供所有步骤列表。
scenario.source[1].steps
答案 3 :(得分:0)
使用 Cucumber 6.10.3 可以做到,代码如下:
int days
进口:
Field f = scenario.getClass().getDeclaredField("delegate");
f.setAccessible(true);
io.cucumber.core.backend.TestCaseState sc = (io.cucumber.core.backend.TestCaseState) f.get(scenario);
Field f1 = sc.getClass().getDeclaredField("testCase");
f1.setAccessible(true);
io.cucumber.plugin.event.TestCase testCase = (io.cucumber.plugin.event.TestCase) f1.get(sc);
List<PickleStepTestStep> testSteps = testCase.getTestSteps().stream().filter(x -> x instanceof PickleStepTestStep).map(x -> (PickleStepTestStep) x).collect(Collectors.toList());
for (PickleStepTestStep ts : testSteps) {
System.out.println(ts.getStep().getKeyword() + ts.getStep().getText());
}
依赖项:(你只需要'cucumber-java8'或'cucumber-java')
import io.cucumber.java8.Scenario;
import io.cucumber.plugin.event.PickleStepTestStep;
import io.cucumber.core.backend.TestCaseState;
import java.lang.reflect.Field;
import java.util.stream.Collectors;