Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 依赖注射在黄瓜中是如何工作的?_Java_Selenium_Junit_Dependency Injection_Cucumber - Fatal编程技术网

Java 依赖注射在黄瓜中是如何工作的?

Java 依赖注射在黄瓜中是如何工作的?,java,selenium,junit,dependency-injection,cucumber,Java,Selenium,Junit,Dependency Injection,Cucumber,我一直在尝试将webdriver注入到步骤中。我用过,效果很好 其思想是将WebDriver作为服务注入steps类。在初始步骤中,您需要添加以下依赖项 <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-spring</artifactId> <version>1.2.5</version> <sc

我一直在尝试将
webdriver
注入到步骤中。我用过,效果很好

其思想是将WebDriver作为服务注入steps类。在初始步骤中,您需要添加以下依赖项

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

钩子类包含
@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();
    }
}
步骤

steps类包含来自已编译功能文件的步骤。要在Eclipse中编译功能文件,需要在Eclipse中安装Eclipse Cumber插件

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运行

问题

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

我想顺序如下:

  • Junit在
    方法之前调用
    @testInitializer()
  • testInitializer()
    在Hook类中,因此它需要创建
    Hook
    类的实例
  • 它导致调用Hook类的构造函数

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

    正如我正确理解的那样,您使用JUnit作为cucumber spring的测试框架。JUnit提供了以下生命周期

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

    运行测试时的测试流:

    • 睾丸初始化器
    • 我按了一下按钮
    • 撕裂试验
    此外,您可以使用日志记录(slf4j)而不是System.out.println,这样可以更容易地跟踪测试流

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