Как мне получить полиморфные тесты, работающие с огурцом-jvm, огурцом-серенити и SerenityObjectFactory

Я нашел интересный блог, в котором в общих чертах объясняется, как реализовать определения полиморфных шагов с использованием огуречного bdd и инъекции зависимостей пикоконтейнера. Вы можете посетить блог здесь

Где я застреваю, так это в том, что не знаю, как сохранить логику автоматизации за «общим» интерфейсом, а затем предоставить две разные реализации: одна напрямую взаимодействует с моделью предметной области для тестирования модульной интеграции, а другая использует Selenium WebDriver для пользовательского интерфейса. тестирование.

Может кто-нибудь дать мне совет/скелет, как это реализовать. Я не могу отблагодарить вас за помощь сообществу.


person makhlo    schedule 13.06.2017    source источник


Ответы (1)


Вы можете использовать класс Utility для передачи переменных между классами.

Например, возьмем пример запуска драйвера WebDriver.

public class ClassUtility {

    public WebDriver baseDriver; 

}

У вас есть класс, в котором вы хотите получить доступ к webDriver.

public class InventoryPage extends ClassUtility {
private ClassUtility driver;
public InventoryPage(ClassUtility driver, ClassUtility fileElementLocator, ClassUtility elementLocatorProperties, ClassUtility page) {
    this.driver= driver;
    this.page =page;
}

@When("^Open the Google Page$")
public void openInventoryPage() throws Throwable {  
    driver.baseDriver = new FirefoxDriver();
    driver.baseDriver.get("www.google.com");
}

Если вам нужно выполнить инъекцию в другой класс, сделайте это аналогичным образом.

public class IntroductoryPage extends ClassUtility {

private ClassUtility driver;

public IntroductoryPage(ClassUtility driver, ClassUtility logger) {
    this.driver= driver;    
}

@When("^It should go to Account \"([^\"]*)\"")
public void openIntroductoryPage(String region) throws Throwable {
    driver.baseDriver.findElement(By.linkText("link")")).click();   
}

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Вы можете играть с инъекцией зависимостей, как хотите.

person Mathan    schedule 14.06.2017
comment
Прежде всего, спасибо за быстрый ответ и исчерпывающее объяснение. Мне нужно иметь две разные реализации из одного и того же универсального интерфейса. Одна реализация для тестирования интеграции и другая реализация для тестирования графического интерфейса. Как выглядит этот общий интерфейс с методом(ами) для меня загадка. Это зависит от типа теста, какие зависимости нужны. Для тестирования графического интерфейса внедрите веб-драйвер, но не для интеграционных тестов. Может быть, ввести что-то еще или вообще никаких зависимостей. Заранее спасибо и приветствуются новые идеи ;) - person makhlo; 14.06.2017
comment
Можете ли вы сказать ваше требование? Спецификация, например, что вам нужно делать при тестировании графического интерфейса и интеграционном тестировании. Внедрение зависимостей может быть распространено на любой объект любого класса. Это зависит от того, что вы определяете в утилите класса и расширяете ее в своем классе реализации. Какие зависимости вам нужно внедрить для тестирования графического интерфейса и интеграции? - person Mathan; 15.06.2017
comment
Для GUI зависимостью является webdriver, но для интеграционного тестирования это может быть testdoubles, mockings. Пример: - person makhlo; 16.06.2017
comment
public class SomeStepDefs { public SomeStepDefs(AutomationApi api) { } } public class SomeOtherStepDefs { public SomeOtherStepDefs(AutomationApi api) { } } addClass(WebAutomationApi.class); ИЛИ addClass(IntegrationAutomationApi.class); WebAutomationApi ЯВЛЯЕТСЯ AutomationApi в конструкторе определения шага IntegrationAutomationApi ЯВЛЯЕТСЯ AutomationApi в конструкторе определения шага. - person makhlo; 16.06.2017