依赖注入如何在Cucumber中发挥作用?

Sal*_*ara 11 java junit selenium dependency-injection cucumber

我一直试图注入webdriver这些步骤.我已经使用了这个说明并且效果很好.

我们的想法是将WebDriver作为服务注入步骤类.在初始步骤中,您需要添加以下依赖项.

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>1.2.5</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

依赖注入涉及三个主要类.在这里,我们逐一介绍它们.

在此输入图像描述

BaseUtil

BaseUtil是具有WebDriverof Selenium属性的类.这堂课很简单:

public class BaseUtil {

 private WebDriver driver;

 public WebDriver getDriver() {return driver;}

 public void setDriver(WebDriver driver) { this.driver = driver;}
}
Run Code Online (Sandbox Code Playgroud)

Hook类包含@Before, @After.方法testInitialier()负责加载webDriver 文件并创建实例,而方法testTearDown()负责关闭浏览器.

    public class Hook extends BaseUtil{

    BaseUtil base;


    @Before
    public void testInitializer(){
        File file = new 
            File(IgniteTaskApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile());
        String driverPath=file.getAbsolutePath();
        System.out.println("Webdriver is in path: "+driverPath);
        System.setProperty("webdriver.chrome.driver",driverPath);
        base.setDriver(new ChromeDriver());
    }

    public Hook(BaseUtil base) {
        this.base = base;
    }

    @After
    public void tearDownTest(){
        base.getDriver().close();
    }
}
Run Code Online (Sandbox Code Playgroud)

脚步

steps类包含来自编译特征文件的步骤.要在Eclipse中编译功能文件,您需要在Eclipse中安装Eclipse-Cucumber插件.

public class ClickButton_Steps extends BaseUtil{
    BaseUtil base;

    public ClickButton_Steps(BaseUtil base){
        super();
        this.base=base;
    }

    @When("^I clcik on the button$")
    public void i_clcik_on_the_button() throws Throwable {
        cb=new ClickButtonPage(base.getDriver());
        cb.navigator();
    }

        // The other steps ...
}
Run Code Online (Sandbox Code Playgroud)

我怎么运行它?

打开要素文件 - >运行为 - >使用Junit运行

我想知道运行方法的顺序什么,它导致依赖注入?

我想订单如下:

  1. Junit调用@Before方法testInitializer()
  2. testInitializer()是钩子类,所以它需要做出的一个实例Hook类.
  3. 它导致调用Hook类的构造函数.

但是,我无法理解其余的步骤.也许它根本不是真的.我的意思是,我有一个功能代码,但我无法解释它是如何工作的?

Lev*_*vik 1

据我了解,您正确使用 JUnit 作为带有 cucumber-spring 的测试框架。JUnit 提供以下生命周期。

当您使用注释 @Before 注释该方法时,它将在您进行的每个测试之前调用此方法。至于@After可以用于清理资源并在每次测试后调用。

运行测试时的测试流程:

  • 测试初始化​​器
  • i_clcik_on_the_button
  • 拆解测试

此外,您可以使用日志记录(slf4j)而不是System.out.println,这样跟踪测试流程会更容易。