1

我正在使用黄瓜-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 是否会产生冲突?我该如何解决这个问题?

4

1 回答 1

3

我找到了解决这个问题的方法。问题是任何@Before 代码都以随机顺序被拾取。它不是基于不带参数的@Before 将在@Before("myTag") 之前执行的假设。

所以诀窍是为订单参数(在@Before)分配一些值。分配给 @Before 的默认顺序是 10000。因此,如果我们明确定义顺序值,它应该可以工作。

所以基本上,我的初始化代码可能如下所示:

@Before(order=1)
public void initLoginPage() throws Exception {
  getBrowserDimension();
  setBrowserCapabilities();
  init(getApplicationUrl());
}

这解决了我的问题

于 2013-07-12T06:37:49.867 回答