如果我的子步骤文件已经扩展 class,如何创建 MasterStep / BaseStep?

How to create a MasterStep / BaseStep if the my sub step files already extend a class?

如果我的子步骤文件已经扩展 class,如何创建 MasterStep / BaseStep?

我的步骤文件之一的示例代码:

public class LoginSteps extends DriverFactory {

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);
}

@And("^User entered the \"([^\"]*)\" password$")
public void user_entered_the_password(String password) throws Throwable {
    l

我需要在下面使用以下标签/代码,但我不想在每个步骤中重复 class/文件,当我尝试在我的 DriverFactory 中添加黄瓜标签时,我不允许这样做,因为黄瓜不允许你在扩展 classes.

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

感谢您的帮助

更新的答案:

将挂钩添加到一个单独的 class 中,它处理您所有的场景设置和拆卸之前/之后 -

public class Hooks {

private static WebDriver driver;

public static WebDriver getDriver() { 
  return driver;
}

@Before
public void startTest(Scenario scenario) {
    driver = new DriverFactory("chrome");
}

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

public class LoginSteps {

  WebDriver driver = Hooks.getDriver();
  //steps
}

要获得更高级的处理方式,请查看依赖注入,例如 PicoContainer,这样您就不必依赖挂钩中的静态 WebDriver 实例,而是可以将其传递到每个实例的构造函数中你的步数 classes.