2017-07-18 9 views
9

Ich habe versucht, webdriver in die Schritte zu injizieren. Ich habe this instructions verwendet und es funktioniert gut.Wie funktioniert die Abhängigkeitsinjektion in Gurke?

Die Idee ist, WebDriver in Steps-Klassen als Service zu injizieren. Im ersten Schritt müssen Sie die folgende Abhängigkeit hinzufügen.

Es gibt drei Hauptklassen, die an der Abhängigkeitsinjektion beteiligt sind. Hier stellen wir sie einzeln vor.

enter image description here

BaseUtil

BaseUtil ist die Klasse, die ein Attribut für WebDriverof Selen hat. Die Klasse ist ganz einfach:

public class BaseUtil { 

private WebDriver driver; 

public WebDriver getDriver() {return driver;} 

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

Haken

The Hook Klasse @Before, @After enthält. Die Methode testInitialier() ist dafür verantwortlich, die WebDriver Datei zu laden und eine Instanz zu erstellen, während die Methode testTearDown() für das Schließen des Browsers zuständig ist.

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(); 
    } 
} 

Schritte

Und die Schritte Klasse enthält die Schritte, die von kompilierten Funktionen Datei kam. Um die Feature-Datei in Eclipse zu kompilieren, muss das Eclipse-Cucumber-Plugin in Ihrem Eclipse installiert sein.

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

Wie führe ich es?

Öffnen Sie die Funktion Datei -> Ausführen als -> mit Junit Run

Frage

ich frage mich, was die Reihenfolge der laufenden Verfahren in einer Weise, die es führt Abhängigkeitsspritze?

denke ich die Reihenfolge, wie folgend:

  1. Junit ruft @Before Methode, die testInitializer()
  2. Die testInitializer() ist in Hook-Klasse ist so braucht es eine Instanz von Hook Klasse zu machen.
  3. Es führt zum Aufruf des Konstruktors der Hook-Klasse.

Aber ich kann den Rest der Schritte nicht verstehen. Vielleicht stimmt es überhaupt nicht. Ich meine, Ich habe einen funktionalen Code, aber ich kann nicht erklären, wie es funktioniert?

Antwort

1

Wie ich Sie richtig verstehe, verwenden Sie JUnit als Testframework mit Gurkenfeder.JUnit bietet den folgenden Lebenszyklus.

Wenn Sie die Methode mit Annotation @ annotieren, bevor es diese Methode vor jedem Test aufrufen, die Sie haben. Wie @After könnte für die Reinigung von Ressourcen verwendet werden und nach jedem Test aufrufen.

Ihr Testablauf, wenn Sie den Test ausführen:

  • testInitializer
  • i_clcik_on_the_button
  • tearDownTest

Darüber hinaus könnten Sie statt System.out Protokollierung (slf4j) verwenden. println und es wird einfacher, den Testablauf zu verfolgen.

Verwandte Themen