Ich benutze Gurke mit einem JUnit Runner. Ich mache App UI Tests mit Appium, aber das sollte für diese Frage keine Rolle spielen. Der relevante Teil ist, dass ich Features und Schrittdefinitionen über iOS und Android wiederverwenden möchte und die Selen-Treiberinstanz von JUnit an die Schritte übergebe, da ich den Testserver nur einmal starten möchte.Pass Context von JUnit Runner zu Gurke Schritte
Ich habe so etwas wie dies:
login.feature
:
Feature: Login
@android_phone @ios_phone
Scenario: Successful login
Given ...
CucumberIOSTest.java
:
@RunWith(Cucumber.class)
@CucumberOptions(
glue = {"classpath:my.stepdefinitions"},
tags = {"@ios_phone,@ios_tablet"}
)
public class CucumberIOSTest {
private static WebDriver driver;
@BeforeClass
public static void setUp() throws Exception {
// setup code that starts up the ios simulator via appium
driver = DriverFactory.createIOSDriver();
}
@AfterClass
public static void tearDown() {
// shutdown ios simulator
}
}
Und fast das gleiche für Android in CucumberAndroidTest.java
:
@RunWith(Cucumber.class)
@CucumberOptions(
glue = {"classpath:my.stepdefinitions"},
tags = {"@android_phone,@android_tablet"}
)
public class CucumberAndroidTest {
private static WebDriver driver;
@BeforeClass
public static void setUp() throws Exception {
// setup code that starts up the android simulator via appium
driver = DriverFactory.createAndroidDriver();
}
@AfterClass
public static void tearDown() {
// shutdown android simulator
}
}
Die Schritte werden in GenericSteps.java
(vorerst nur eine Datei):
public class GenericSteps {
public GenericSteps(WebDriver driver) {
this.driver = driver;
}
@Given("^...$")
public void ...() throws Throwable {
...
}
}
Wie kann ich die driver
von CucumberIOSTest
/CucumberAndroidTest
an den Steps Konstruktor übergeben?
Das Problem ist, dass nur die CucumberIOSTest
/CucumberAndroidTest
Instanz weiß, ob ich die iOS- oder Android-Tags testen möchte. Die GenericSteps
kann das nicht wissen. Außerdem möchte ich den Simulator nur einmal für alle Tests auf jeder Plattform starten.
Ich versuchte DI, aber ich fand keine Möglichkeit, die WebDriver
Instanz zu übergeben, die ich in der JUnit Runner erstellt habe. Irgendwelche Ideen?
Hm, das tatsächlich funktioniert, danke! Ich muss nur die WebDriver-Instanz in '@ AfterClass' zurücksetzen, so dass sie korrekt funktioniert, wenn ich zuerst die iOS-Tests und dann die Android-Tests ausführe. – fabb