2017-07-18 27 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,它將更容易跟蹤測試流程。