首页 > 解决方案 > 在黄瓜项目中使用另一种类方法的架构问题

问题描述

我最近加入了使用 Cucumber 和 Selenium 的自动化测试 Java 项目。它用于测试 Web 应用程序。项目结构分为3层:

每个胶水文件都有带有@Before标签和 @additional标签的方法,以使该方法在相应特征文件中的每个测试场景之前执行。适当的功能文件也使用@additional标签来知道它@Before应该调用哪个方法。每个带有@Before标签的方法内部都有一堆行,用于初始化一些页面文件对象,例如:

黄瓜文件:

@DesignPage
Scenario: some example scenario
Given HI im cucumber step method

胶水文件:

@Before @DesignPage
public someBeforeMethod(){
...
designPage = new DesignPage();
managmentPage = new ManagmentPage();
...

稍后,胶水文件有黄瓜步骤的方法定义,它从页面文件中调用一些方法,例如:

@Given("HI im cucumber step method")
public void HiImCucumberMethod(){
designPage.executeSomeDesignPageMethod();
} 

到目前为止,一切正常。

现在假设我有另一个 (@MainPage) 功能文件,但我想从 (DesignPage) 功能执行完全相同的方法:

@MainPage
Scenario: some example scenario2
Given HI im cucumber step method

Cucumber 从这里看到,HI im cucumber step method已经在DesignPage胶水文件中声明了,所以我想重用这个方法。不幸的是,我会收到 NullPointerException - 原因很清楚。designPage此方法中使用的对象从未初始化,因为我从未从胶水文件中执行@Before方法。DesignPage原因是因为在这种情况下,我只执行了@Before来自不同胶水文件的方法 -MainPage胶水文件。

这种架构让我有点恼火,因为唯一的解决方案是将 DesignPage 胶水文件中的HI im cucumber step method方法复制粘贴到 MainPage 胶水文件,在MainPage @Before类中初始化设计页面对象,然后我还必须重命名HI im cucumber step method,因为 Cucumber 现在看到两个方法相同参考,它不知道应该使用哪一个。

我花了一些时间,但我不知道如何更改架构,以便能够以一种功能重用方法从另一个功能中重用。任何建议都将受到欢迎。

标签: seleniumcucumber

解决方案


尝试在方法定义中初始化对象,而不是在 before 方法中。像这样的东西

Class GlueFile
{
    DesignPage designPage;
    ManagmentPage managmentPage;

 @Before @DesignPage
 public someBeforeMethod(){
 ...
 }
 @Given("HI im cucumber step method")
 public void HiImCucumberMethod(){
 designPage = new DesignPage();
 managmentPage = new ManagmentPage();
 designPage.executeSomeDesignPageMethod();
 } 

}

推荐阅读