Ich versuche, eine einzelne Instanz von WebDriver in einigen Tests zu instanziieren, und dabei habe ich möglicherweise zu kompliziert. Ich denke, ich muss nur einen statischen Webdriver instantiieren und dann für jede Feature-Datei einmal verwenden, vorausgesetzt, das ist möglich.WebDriver wird nicht in Cucumber-Tests instanziiert
Ich bin nicht klar, warum der Treiber nicht instanziiert wird. Ich versuche, zu debuggen, indem ich von Feature-Datei in der IDE (intelliJ) ausführe. Ich erwarte, dass der Fahrer instanziiert, wenn Super aufgerufen wird.
Schritt Defs:
public class FindAHolidayStepDefs extends DriverBase {
private HolidaysHomePage tcHomePage;
private SearchResultsPage searchPage;
@Before //this is the cucumber @Before
public void setup(){
holHomePage = new HolidaysHomePage(driver);
searchPage = new SearchResultsPage(driver);
}
@Given("^I am on the Holidays homepage$")
public void IAmOnTheHolidaysHomepage() {
assertEquals("the wrong page title was displayed !", "Cheap Travel\u00ae : Cheap Holidays & Last Minute Package Deals", holHomePage.getTitle());
} // more step defs below...
Pageobject:
public class HolidaysHomePage extends SeleniumBase {
public HolidaysHomePage(WebDriver driver) {
super(driver); //Expecting driver to instantiate here
visit("");
driver.manage().window().maximize();
assertTrue("The Holidays header logo is not present",
isDisplayed(headerLogo));
}
//code...
DriverBase:
public class DriverBase implements Config {
protected WebDriver driver;
@Before //this is the Junit @Before
public void before() throws Throwable {
if (host.equals("localhost")) {
switch (browser) {
case "firefox":
driver = new FirefoxDriver();
break;
case "chrome":
System.setProperty("webdriver.chrome.driver",
System.getProperty("user.dir") + "\\drivers\\chromedriver.exe");
driver = new ChromeDriver();
break;
}
}
}
@After
public void after() {
driver.quit();
}
};
SeleniumBase (nur eine Klasse mit Selen API-Methoden abstrahiert out)
public class SeleniumBase implements Config {
public WebDriver driver;
public SeleniumBase(WebDriver driver) {
this.driver = driver;
}
public void visit(String url) {
if (url.contains("http")) {
driver.get(url);
} else {
driver.get(baseUrl + url);
}
}
Config:
public interface Config {
final String baseUrl = System.getProperty("baseUrl", "http://holidaystest.co.uk/");
final String browser = System.getProperty("browser", "chrome");
final String host = System.getProperty("host", "localhost");
}
Dank für die Kommentare, 1. DriverBase für Treiber-Management, ist SeleniumBase Abstraktion von Selen Funktionen: sowohl ihren Zweck haben, und ich sehe nicht, warum ich sollte dies ändern 2. Ich möchte nicht Fahrer-Management-Code in meinem Schritt defs - Ich möchte Treiberinstanziierung auf der Seite-Objekt-Ebene – Steerpike