Комментарии 10
Все хорошо, только вы описали не фабрику, а частный случай fluent interface. Я еще кое-как соглашусь, что под капотом используется фабричный метод, а вот фабрикой в принципе не пахнет.
А вообще рекомендую впилить IoC контейнер. Решает многие надуманные проблемы.
PS: тесты может и пишутся просто, а вот поддержка тестов с fluent interface может быть очень болезненной.
А вообще рекомендую впилить IoC контейнер. Решает многие надуманные проблемы.
PS: тесты может и пишутся просто, а вот поддержка тестов с fluent interface может быть очень болезненной.
+1
А диавол должон быть за левым плечом!
0
Крутая статья, спасибо! Как-то думал написать про свой опыт, а теперь не нужно, буду ссылаться на вашу статью :-)
0
а в чем сложность написать так?
class ExampleLoginTestSuit: BaseTestCase {
func testExampleLogin() {
let user = userFixtureService.createUser()
mainScreen
.openProfileTab()
.goToAuthorization()
.goToLogin()
.enterLogin(user.login)
.enterPassword(user.password)
.logIn()
}
}</source>
где "openProfileTab" возвращает "ProfileScreen" класс напрямую.
Мы именно так пишем на Java: "return new SomePage(driver)". Только еще драйвер передаем.
0
В примере с цепочкой вызовов методов у меня именно так и написано. За исключением, что в вашем примере нужно еще дополнительно создать объект экрана mainScreen, то есть
Ну или если у вас нет дополнительных параметров при инициаилизации PO-в и вы не выносите их в фабрику, то
openProfileTab() у нас так же возвращает ProfileScreen().
Если вопрос про описанные сложности с таббаром, то тут суть, что openProfileTab() должен быть доступен не только с MainScreen, но и с почти любого другого PO-а.
let mainScreen = pageObjectFactory.makeMainScreenPageObject()
Ну или если у вас нет дополнительных параметров при инициаилизации PO-в и вы не выносите их в фабрику, то
let mainScreen = MainScreenPageObject()
openProfileTab() у нас так же возвращает ProfileScreen().
Если вопрос про описанные сложности с таббаром, то тут суть, что openProfileTab() должен быть доступен не только с MainScreen, но и с почти любого другого PO-а.
0
Ну типа того. Только вместо «pageObjectFactory» у нас «myApp», где конструктор с драйвером.
далее внутри myApp все поделено по функционалу, а сама myApp инициализируется автоматом перед тестом.
Таким образом получилось типа того:
А доступность какой-то странички всем другим страницам в Java просто решается добавлением ее в BasePage класс. В принципе похоже на вас.
ЗЫ в общем меня смутил у вас лишь «return pageObjectsFactory.makeMainScreenPageObject()», а не к примеру «return new SomePage()».
далее внутри myApp все поделено по функционалу, а сама myApp инициализируется автоматом перед тестом.
Таким образом получилось типа того:
myApp()
.homePage()
.tapSomeButton()
.isSomePageLoaded()
.tapSomeButton();
// если нужен переход на иную станичку в тесте, чем обычно
myApp()
.login().loginPage()
.isLoginPageLoaded()
.tapSomeButton()
А доступность какой-то странички всем другим страницам в Java просто решается добавлением ее в BasePage класс. В принципе похоже на вас.
ЗЫ в общем меня смутил у вас лишь «return pageObjectsFactory.makeMainScreenPageObject()», а не к примеру «return new SomePage()».
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Оля, тесты и фабрика — путь к красивой архитектуре и чистоте кода