Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果my sub step文件已经扩展了一个类,如何创建MasterStep/BaseStep?_Java_Selenium_Selenium Webdriver_Junit_Cucumber - Fatal编程技术网

Java 如果my sub step文件已经扩展了一个类,如何创建MasterStep/BaseStep?

Java 如果my sub step文件已经扩展了一个类,如何创建MasterStep/BaseStep?,java,selenium,selenium-webdriver,junit,cucumber,Java,Selenium,Selenium Webdriver,Junit,Cucumber,如果my sub step文件已经扩展了一个类,如何创建MasterStep/BaseStep 我的一个步骤文件的示例代码: public class LoginSteps extends DriverFactory { WebDriver driver = getDriver(); @Given("^User navigates to the \"([^\"]*)\" website$") public void user_navigates_to_the_website(String u

如果my sub step文件已经扩展了一个类,如何创建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
我需要使用下面的标记/代码,但我不想在每个步骤类/文件中重复,当尝试在我的DriverFactory中添加Cumber标记时,我不允许这样做,因为Cumber不允许您在扩展类中添加标记

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

更新答案:

将钩子添加到单独的类中,该类处理所有场景设置和拆卸之前/之后的操作-

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实例,而是可以将其传递到每个步骤类的构造函数中。

思考LoginSteps扩展DriverFactory的原因。它真的是一种DriverFactory吗?请考虑使用构造函数而不是继承。@ AZUR青蛙,谢谢,但我需要一个位置来初始化我的其他类,BaseP= PGeFalth.InEnLeTimsScript,BasePage.class;在所有类中,不需要在钩子代码之后重复。在任何课堂上提到它,cucumber都会把它捡起来。对于每个场景,都会创建一个所有步骤定义和钩子类的新实例。不允许扩展包含步骤定义或钩子的类。很高兴能为您提供帮助:@GbruI不明白。为什么你创造了三个关卡而不是两个关卡?@chamo不明白我自己的答案,这似乎是错误的,但仍然被接受。更新了一些更合理的东西。