Я использую Cucumber с бегуном JUnit. Я провожу тесты пользовательского интерфейса приложений с помощью Appium, но для этого вопроса это не имеет значения. Важно то, что я хочу повторно использовать функции и определения шагов в iOS и Android и передавать экземпляр драйвера selenium из JUnit в шаги, так как я хочу запустить тестовый сервер только один раз.
У меня есть что-то вроде этого:
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
}
}
И почти то же самое для Android в 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
}
}
Шаги находятся в GenericSteps.java
(пока только один файл):
public class GenericSteps {
public GenericSteps(WebDriver driver) {
this.driver = driver;
}
@Given("^...$")
public void ...() throws Throwable {
...
}
}
Как передать driver
из CucumberIOSTest
/CucumberAndroidTest
в конструктор шагов?
Проблема в том, что только экземпляр CucumberIOSTest
/CucumberAndroidTest
знает, хочу ли я протестировать теги iOS или Android. GenericSteps
не может этого знать. Также я хочу запустить симулятор только один раз для всех тестов на каждой платформе соответственно.
Я попробовал DI, но не нашел способа передать экземпляр WebDriver
, который я создал в JUnit Runner. Любые идеи?