Я использую огурец с бегуном JUnit. Я тестирую App UI Test с Appium, но это не имеет значения для этого вопроса. Соответствующая часть состоит в том, что я хочу повторно использовать функции и определения шагов в iOS и Android, а передать экземпляр драйвера selenium из JUnit на шаги, так как я только хочу запустить тестовый сервер один раз.Пропустить контекст от JUnit Runner до огуречных шагов
У меня есть что-то вроде этого:
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. Есть идеи?
Hm, что на самом деле работает, спасибо! Мне просто нужно сбросить экземпляр WebDriver в '@ AfterClass', поэтому он работает правильно, когда я впервые запускаю тесты iOS, а затем тесты на Android. – fabb