Selenium webdriver 在另一个场景之前运行整个场景

Selenium webdriver 在另一个场景之前运行整个场景,selenium-webdriver,cucumber-jvm,Selenium Webdriver,Cucumber Jvm,我不知道如何在运行其他场景之前先运行整个场景,这样我的测试就不会相互依赖 我有这种想象的情景 情景A 假设我有东西 当我收集一些数据时 我应该在我的网页上看到它 情景B 给定场景A 当我删除数据时 我不应该在我的网页上看到它 当我运行此场景案例时,软件无法识别场景B中的场景A,并要求我创建步骤,如下所示 您可以使用以下代码段实现缺少的步骤: @给定(“^registerere formue og inntektek$” public void registerer\u formue\u og\u

我不知道如何在运行其他场景之前先运行整个场景,这样我的测试就不会相互依赖

我有这种想象的情景

情景A
假设我有东西
当我收集一些数据时
我应该在我的网页上看到它

情景B
给定场景A
当我删除数据时
我不应该在我的网页上看到它

当我运行此场景案例时,软件无法识别场景B中的场景A,并要求我创建步骤,如下所示

您可以使用以下代码段实现缺少的步骤:

@给定(“^registerere formue og inntektek$”

public void registerer\u formue\u og\u inntektek()抛出可丢弃的{

//在此处编写代码,将上述短语转化为具体行动

抛出新的PendingException();


}

黄瓜场景应该是独立的。在假设并确保独立性的前提下,做了大量工作。试图与之对抗将是一个障碍

话虽如此,您可以创建
Cucumber
JUnit runner的自定义实现。有了这个定制的实现,并且通过查看原始运行程序的源代码,您可以公开/包装/更改内部结构,以满足您的需要。例如,对于以下跑步者:

公共类mycumber扩展cumber{
私有静态运行时;
私人静态JUnitReporter记者;
私有静态列表特性;
公共MyCucumber(类clazz)引发初始化错误,IOException{
超级(clazz);
}
@凌驾
@抑制警告(“静态访问”)
受保护的运行时createRuntime(ResourceLoader ResourceLoader,
类加载器类加载器,运行时选项(运行时选项)
引发初始化错误,IOException{
this.runtime=super.createRuntime(resourceLoader、classLoader、runtimeOptions);
this.reporter=newjunitreporter(runtimeOptions.reporter(classLoader)、runtimeOptions.formatter(classLoader)、runtimeOptions.isStrict());
this.features=runtimeOptions.cucumberFeatures(resourceLoader);
返回this.runtime;
}
公共静态void运行场景(字符串名称)引发异常{
新建ExecutionUnitRunner(运行时,getScenario(名称),reporter).run(新建RunNotifier());
}
私有静态CucumberScenario getScenario(字符串名称){
用于(黄瓜特征:特征){
for(CucumberTagStatement元素:feature.getFeatureElements()){
if(!(黄瓜场景的元素实例)){
继续;
}
CucumberScenario=(CucumberScenario)元素;
如果(!name.equals(scenario.getGherkinModel().getName())){
继续;
}
返回场景;
}
}
返回null;
}
}
您可以使用以下工具设置测试套件:

@RunWith(mycumber.class)
公共类MyTest{
}
并创建一个步骤定义,如:

@给定(^I首次运行方案(.*))
public void i_first_run_场景(字符串名称)抛出了Throwable{
mycumber.runScenario(名称);
}

这是一个脆弱的定制(在新版本的junit中很容易崩溃),但它应该可以工作

黄瓜场景应该是独立的。在假设并确保独立性的前提下,做了大量工作。试图与之对抗将是一个障碍

话虽如此,您可以创建
Cucumber
JUnit runner的自定义实现。有了这个定制的实现,并且通过查看原始运行程序的源代码,您可以公开/包装/更改内部结构,以满足您的需要。例如,对于以下跑步者:

公共类mycumber扩展cumber{
私有静态运行时;
私人静态JUnitReporter记者;
私有静态列表特性;
公共MyCucumber(类clazz)引发初始化错误,IOException{
超级(clazz);
}
@凌驾
@抑制警告(“静态访问”)
受保护的运行时createRuntime(ResourceLoader ResourceLoader,
类加载器类加载器,运行时选项(运行时选项)
引发初始化错误,IOException{
this.runtime=super.createRuntime(resourceLoader、classLoader、runtimeOptions);
this.reporter=newjunitreporter(runtimeOptions.reporter(classLoader)、runtimeOptions.formatter(classLoader)、runtimeOptions.isStrict());
this.features=runtimeOptions.cucumberFeatures(resourceLoader);
返回this.runtime;
}
公共静态void运行场景(字符串名称)引发异常{
新建ExecutionUnitRunner(运行时,getScenario(名称),reporter).run(新建RunNotifier());
}
私有静态CucumberScenario getScenario(字符串名称){
用于(黄瓜特征:特征){
for(CucumberTagStatement元素:feature.getFeatureElements()){
if(!(黄瓜场景的元素实例)){
继续;
}
CucumberScenario=(CucumberScenario)元素;
如果(!name.equals(scenario.getGherkinModel().getName())){
继续;
}
返回场景;
}
}
返回null;
}
}
您可以使用以下工具设置测试套件:

@RunWith(mycumber.class)
公共类MyTest{
}
并创建一个步骤定义,如:

@给定(^I首次运行方案(.*))
public void i_first_run_场景(字符串名称)抛出了Throwable{
mycumber.runScenario(名称);
}
这是一个脆弱的定制(可以很容易地用新版本的junit打破),但它应该 Background: Given I have something When I submit some data Then I should see it on my webpage Scenario: B When I delete the data Then I should not see it on my webpage @Given("^Scenario A") public void scenario_A() { I_have_something(); I_submit_some_data(); I_should_see_it_on_my_page(); }
Given Scenario A
When I delete the data
Then I should not see it on my webpage