使用方面解决了这个问题。非常棘手,请注意注释:
@After("call(public * cucumber.runtime.StepDefinitionMatch.runStep(..)) && within(cucumber.runtime.Runtime)")下面是完整的代码,由Viviana Cattenazzi编写。
pom.xml
<dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>1.8.9</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-core</artifactId> <version>1.2.4</version> </dependency> </dependencies>...... <plugin> <groupId>org.prehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.10</version> <configuration> <weaveDependencies> <weaveDependency> <groupId>info.cukes</groupId> <artifactId>cucumber-core</artifactId> </weaveDependency> </weaveDependencies> <showWeaveInfo>true</showWeaveInfo> <source>1.8</source> <target>1.8</target> <complianceLevel>1.8</complianceLevel> </configuration> <executions> <execution> <phase>process-test-classes</phase> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin>
.......
StepsInterceptor.java
@Aspect public class StepsInterceptor { @After("call(public * cucumber.runtime.StepDefinitionMatch.runStep(..)) && within(cucumber.runtime.Runtime)") public void beforeRunningStep(JoinPoint thisJoinPoint) throws Exception { try { StepDefinitionMatch stepDefinitionMatch = (StepDefinitionMatch) thisJoinPoint.getTarget(); Step step = (Step) retrievePrivateField(stepDefinitionMatch, "step"); String stepName = step.getKeyword().trim(); if ("Given".equals(stepName) || "When".equals(stepName)) { Object theRealStepDef = extractJavaStepDefinition(stepDefinitionMatch); // take screen shot here } } catch (ClassCastException exc) { ....}}}


