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");
}
}
}
答案 0 :(得分:1)
您可以使用继承,而不是使用Roberto Pegoraro链接中引用的原因的步骤。我喜欢将我的步骤组织成不同的步骤def文件。但这会导致互操作性问题。如果使用类变量在步骤之间进行通信,则这些步骤必须位于同一文件中;除非你使用继承。我创建了一个UiCommon类来包含这些步骤用于在它们之间进行通信的共享类变量(例如页面文件实例变量)。每个步骤定义文件都扩展了UiCommon。现在,如何重构各种步骤定义文件之间的步骤定义并不重要。他们仍然可以沟通。
对于小型项目,这通常不是问题。但对于需要最小化git合并冲突的多个测试自动化工程师的大型项目来说,这很重要。
答案 1 :(得分:1)
Java中的惯用解决方案,因此Cucumber-JVM结束时,如果要在不同类中实现的步骤之间共享状态,则使用依赖注入。
Cucumber支持许多不同的依赖注入框架。如果您的项目已经使用了一个,则很可能是您的依赖框架受支持。
如果您不使用依赖注入框架,我建议您使用PicoContainer。如果您需要知道如何使用它,我写了一篇博客文章describing如何在步骤之间共享状态。