在使用JAVA和Cucumber进行测试的每个步骤之后,如何捕获屏幕截图?

在运行集成测试时, 捕获屏幕截图的最佳方法是什么?

使用Selenium(3.0.1)和Cucumber(1.2.4)用Java编写测试。

下面是用于在测试后获取屏幕截图的代码,但是在每种方法后面都标有@ Given,@ When,@ Then时,我需要屏幕截图。

@After

public void after(Scenario scenario){

final byte[] screenshot = driver.getScreenshotAs(OutputType.BYTES);

scenario.embed(screenshot, "image/png");

}

谢谢您的任何提示。

回答:

使用方面解决了这个问题。非常棘手,请注意注释:

@After("call(public * cucumber.runtime.StepDefinitionMatch.runStep(..)) && within(cucumber.runtime.Runtime)")

下面是完整的代码,由Viviana Cattenazzi编写。

 <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.codehaus.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>

.......

@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) { ....

}

}

}

以上是 在使用JAVA和Cucumber进行测试的每个步骤之后,如何捕获屏幕截图? 的全部内容, 来源链接: utcz.com/qa/405876.html

回到顶部