黄瓜:如果你不能使用Cucumber继承,你怎么能创建一个BaseSteps类?

时间:2017-04-26 15:42:34

标签: java selenium selenium-webdriver webdriver cucumber

Cucumber:如果你不能在Cucumber中使用继承,你怎么能创建一个BaseSteps类?

登录步骤继承CommonSteps类:

    public class LoginSteps extends CommonSteps {

    WebDriver driver = getDriver();

    @Given("^User navigates to the \"([^\"]*)\" website$")
    public void user_navigates_to_the_website(String url) throws Throwable {
        basePage.loadUrl(url);
    }

    @And("^User entered the \"([^\"]*)\" username$")
    public void user_entered_the_username(String username) throws Throwable {
        loginPage.setUsername(username);
    }






public class CommonSteps  {
    @After
    public void close_browser_window(Scenario scenario) throws Exception {
        if (scenario.isFailed()) {
            scenario.embed(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES), "image/png");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用继承,而不是使用Roberto Pegoraro链接中引用的原因的步骤。我喜欢将我的步骤组织成不同的步骤def文件。但这会导致互操作性问题。如果使用类变量在步骤之间进行通信,则这些步骤必须位于同一文件中;除非你使用继承。我创建了一个UiCommon类来包含这些步骤用于在它们之间进行通信的共享类变量(例如页面文件实例变量)。每个步骤定义文件都扩展了UiCommon。现在,如何重构各种步骤定义文件之间的步骤定义并不重要。他们仍然可以沟通。

对于小型项目,这通常不是问题。但对于需要最小化git合并冲突的多个测试自动化工程师的大型项目来说,这很重要。

答案 1 :(得分:1)

Java中的惯用解决方案,因此Cucumber-JVM结束时,如果要在不同类中实现的步骤之间共享状态,则使用依赖注入。

Cucumber支持许多不同的依赖注入框架。如果您的项目已经使用了一个,则很可能是您的依赖框架受支持。

如果您不使用依赖注入框架,我建议您使用PicoContainer。如果您需要知道如何使用它,我写了一篇博客文章describing如何在步骤之间共享状态。