我使用Cucumber JVM,并尝试在每一步之后拍摄屏幕截图(如果出现故障)。问题是,我不知道如何设置在每个步骤之前和之后执行的方法。
我用过https://github.com/cucumber/cucumber-java-skeleton作为参考。我加入了runnerhttps://github.com/cucumber/cucumber-java-skeleton/blob/master/src/test/java/skeleton/RunCukesTest.javaBeforeClass和AfterClass(JUnit adnotations)以及为我提供webrdiver启动和停止(在每个场景之前和之后)的方法。我知道我可以使用Before/After注释(cucumber注释),但是带有这些注释的方法必须放在包含步骤定义的同一个类中。问题是我有很多带有步骤的类,所以我不想把这些带注释的方法放在每个步骤类中,我需要定义它们一次。
请告诉我怎么做。
[编辑]
这是我的跑者
package example;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/"
)
public class TodoTest {
@BeforeClass
public static void beforeClass() {
System.setProperty("browser", "chrome");
System.setProperty("remote", "http://localhost:4444/wd/hub");
}
@AfterClass
public static void afterClass() {
}
}
我需要定义将在整个项目的每个步骤之前和之后执行的方法,类似于场景中的方法。
带注释的Before/After方法不必驻留在同一个类中。编辑:创建如下示例项目:将StepDef类保存在名为cukes的包中,比如src/test/java/cuckes
import cucumber.api.java.en.Given;
public class StepDef
{
@Given("^order$")
public void order()
{
System.out.println("Test hook");
}
}
将您的Hook类保持在与上述相同的包中
import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.Before;
public class Hook {
@Before
public void before(Scenario scenario)
{
System.out.println("running scenario: "+scenario.getName());
}
@After
public void after(Scenario scenario)
{
scenario.write("Test string to output in reports.");
System.out.println("Finished running scenario: "+scenario.getName());
}
}
让你的跑步者(在本例中是JUnitRunner)保持在同一包中。
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@CucumberOptions(features={"src/test/resources/test.feature"},glue={"cukes"},plugin={"pretty","html:target/report"})
@RunWith(Cucumber.class)
public class JUnitRunner
{
}
在src/test/Resources文件夹下创建一个cukes命名文件夹并保留test.feature文件
Feature: Test feature
Scenario: To test scenario
Given order
现在运行您的JUnitRunner,您应该在控制台上看到以下输出:
Feature: Test feature
passed
Test hook
To test scenario
看看这个github回购协议。它在cucumber方面有很好的例子:cucumber。普拉迪普先生做得很好。这应该能回答你所有的问题
TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件
我很残酷地注意到,在cucumber-JVM中,当您定义步骤名称看似相同的特性时,它们被认为是可以互换的。 我用cucumber运行这个功能(使用 mvn/intelliJ 插件/日食插件/神奇水晶球/其他荒谬的媒介) 我收到以下消息: 还有其他一些无关紧要的台词,我会饶恕你的。 cucumber似乎没有区别,和(和和我真的不知道它们最初是为了什么,因为这些只是“和我刚刚做的一样”的语法糖) 但是
问题内容: 为了在步骤之间传递变量,我有步骤方法属于同一类,并使用该类的字段作为传递的信息。 下面是一个示例,如下所示: 带有步骤定义的Java类: 我的问题是在步骤之间共享信息是否是一个好习惯?或者将功能定义为: 问题答案: 为了在步骤之间共享共同点,您需要使用World。在Java中,它没有在Ruby中那么清晰。 引用黄瓜的创建者。 “世界”的目的是双重的: 隔离方案之间的状态。 在场景中的步
我正在寻找一种方法来设置测试步骤的状态,然后使用范围报告在HTML报告中显示场景。我现在用的是cucumberJava TestNG assert的问题是他抛出了Assertion Exceptions,而我没有找到抑制异常的方法,所以我想使用extent来设置状态,如: 这里的问题是,您需要创建功能/场景/测试,我没有找到任何留档。
我对Cucumber JVM无法获取步骤定义有问题。我在Runner文件中确实有@CucumberOptions。我的功能文件也有@SmokeTest标签。这个问题仍然存在。请帮助!我已经尝试解决这个问题几天了。 Maven 和 Java 版本: Apache Maven 3.0.4Java版本:1.6.0_65,供应商:Apple Inc. 项目结构: 演示-- 运行器文件: 包com.smok
我将硒与cucumber一起使用(使用JAVA,但不太相关) 假设我有以下场景: 功能:示例功能 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,用户按“登录”,然后执行操作A 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,然后用户按“登录”,然后执行操作B 现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步