依赖注入在 Cucumber 中是如何工作的?

问题描述 投票:0回答:1

我一直在尝试将

webdriver
注入步骤中。我已经使用了这个说明并且效果很好。

这个想法是将 WebDriver 作为服务注入到步骤类中。在第一步,您需要添加以下依赖项。

<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>1.2.5</version>
    <scope>test</scope>
</dependency>

依赖注入涉及三个主要类。下面我们一一介绍一下。

基础工具

BaseUtil 是一个具有来自 Selenium 的 WebDriver 属性的类。课程很简单:

public class BaseUtil {

 private WebDriver driver;

 public WebDriver getDriver() {return driver;}

 public void setDriver(WebDriver driver) { this.driver = driver;}
}

挂钩

Hook 类包含

@Before, @After
。 testInitializer() 方法负责加载 webDriver file 并创建一个实例,而 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();
    }
}

步骤

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 ...
}

我该如何运行它?

打开功能文件 -> 运行方式 -> 使用 Junit 运行

问题

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

我猜顺序如下:

  1. Junit 调用
    @Before
    方法,即
    testInitializer()
  2. testInitializer()
    位于Hook类中,因此需要创建
    Hook
    类的实例。
  3. 它导致调用Hook类的构造函数。

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

java selenium-webdriver junit dependency-injection cucumber
1个回答
1
投票

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

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

运行测试时的测试流程:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.