2017-07-18 28 views
9

我一直在尝试将webdriver注入步骤。我已经使用this instructions,它运作良好。依赖注入在黄瓜中如何工作?

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

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

有三个涉及依赖注入的主要类。这里我们一一介绍。

enter image description here

BaseUtil

BaseUtil是具有用于WebDriverof硒的属性的类。类是相当简单:

public class BaseUtil { 

private WebDriver driver; 

public WebDriver getDriver() {return driver;} 

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

挂钩

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

步骤

和台阶类包含了来自编译特性文件的步骤。要在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类的一个实例。
  3. 它导致调用Hook类的构造函数。

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

回答

1

正如我理解你正确地使用JUnit作为测试框架与黄瓜春天。JUnit提供以下生命周期。

当您使用注解@Before注释该方法时,它会在每次测试之前调用此方法。 至于@After可用于清理资源并在每次测试后通话。当你运行测试

您的测试流程:

  • testInitializer
  • i_clcik_on_the_button
  • tearDownTest

此外,你可以使用记录(SLF4J),而不是System.out中。 println,它将更容易跟踪测试流程。