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.
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:
- Junit ruft
@Before
Methode, dietestInitializer()
- Die
testInitializer()
ist in Hook-Klasse ist so braucht es eine Instanz vonHook
Klasse zu machen. - 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?