我正在使用cucumber-jvm。
我有一个初始化所有必要内容的init方法,例如浏览器维度,应用程序URL等。 我已将此init方法放在@Before(cucumber.api)标记下。
@Before
public void initLoginPage() throws Exception {
getBrowserDimension();
setBrowserCapabilities();
init(getApplicationUrl());
}
这次运动顺利,我的生活很美好。 现在,我还想在场景级别使用@Before作为一些标签。 说我的方案如下:
@myTag
When I do blah
Then I should get blah-blah
我想使用类似的东西:
@Before(@myTag)
public void beforeScenario(){
blah = true;
}
但是当我给它另一个@Before时,它开始给出一个NullPointerException。我在Cucumber的Runtime类中追溯到runBeforeHooks和runHookIfTagsMatch方法。 他们抛出了@Before(对于initLoginPage())本身的异常。 是否有多个@ Before的冲突? 我该如何解决这个问题?
答案 0 :(得分:2)
我找到了解决方案让这个工作。 问题是任何@Before代码都是以随机顺序拾取的。它不是基于在@Before(“myTag”)之前执行没有参数的@Before的假设。
所以诀窍是为订单参数(在@Before中)分配一些值。分配给@Before的默认顺序是10000.因此,如果我们明确定义订单值,它应该有效。
基本上,我的初始化程序代码可能如下:
@Before(order=1)
public void initLoginPage() throws Exception {
getBrowserDimension();
setBrowserCapabilities();
init(getApplicationUrl());
}
这解决了我的问题