2016-03-17 14 views
1

我有一个特征文件:Cucumber JUnit:当场景步骤定义跨类传播时如何截图?

@Scenario_1 
Scenario: Google search 
Given user opens "google" 
When user searches for "Hello World" 
Then user sees the results 


@Scenario_2 
Scenario: Yahoo search 
Given user opens "yahoo" 
When user searches for "Hello World" 
Then user sees the results 


@Scenario_3 
Scenario: Test w3schools links 
Given I test w3schools 
When I click on a link 
Then the page refreshes with new data displayed 


@Scenario_4 
Scenario: Test database 
Given I log into DB 
When I query for UserID 
Then the user details are displayed 

,这些文件的步骤的定义被分成3类。

由于语句是Scenario_1和Scenario_2常见,其定义在一个类别分组:

SearchStepDefinitions 
{ 
    Scenario_1 
    Scenario_2 

    @Given(...) 
    @When(...) 
    @Then(...) 
    @After(Scenario s) 
    { 
     final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);  //Take screenshot 
     s.embed(screenshot, "image/png"); 
    } 

} 

Scenario_3声明定义在另一个类。

LinkStepDefinitions 
{ 
    Scenario_3 

    @Given(...) 
    @When(...) 
    @Then(...) 
    @After(Scenario s) 
    { 
     final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);  //Take screenshot 
     s.embed(screenshot, "image/png"); 
    } 

} 

Scenario_4语句在另一个类中定义。

DatabaseStepDefinitions 
{ 
    Scenario_4 

    @Given(...) 
    @When(...) 
    @Then(...) 
} 

我需要方案1,2,3的屏幕截图,因为它们处理前端。但是,我不想为Scenario4提供任何截图,因为它处理后端。

我运行特征文件:

1)Scenario_1和Scenario_2运行正常。

2)当我运行Scenario_3时,我在SearchStepDefinitions的“//截图”处得到NullPointerException。

3)当我运行Scenario_4时,我在SearchStepDefinitions的“//截图”处得到NullPointerException。

我应该如何构建我的程序,以便我可以将语句保留在不同的类中,同时在需要时截取截图?

+1

@ Before和@After注释的所有范围都有相同的范围,因此可能首先遇到的第一个被执行,首先是每次执行所有场景。您可以指定使用标签作为参数执行哪些操作。寻找标记钩子[这里](http://zsoltfabok.com/blog/2012/09/cucumber-jvm-hooks/)。 – MikeJRamsey56

+0

@ MikeJRamsey56这工作!非常感谢! – sanaku

回答

0

@ Before和@After注释的所有范围都有相同的范围,因此可能会遇到的第一个被执行,首先是每次执行所有场景。您可以指定使用标签作为参数执行哪些操作。寻找标记挂钩here

+0

让我们从零答案列表中获得此结果。 – MikeJRamsey56

相关问题