Итак, я внедряю PoM в новом проекте, это будет мой первый раз.Я использую Capybara с Rspec (Selenium) для написания своих фреймворков.
Одна вещь, с которой я продолжаю сталкиваться, это то, насколько «дискретными» должны быть методы в моих объектных классах Page.Когда дело доходит до этого, я вижу два хода мысли:
Давайте возьмем страницу, которая создает виджет:
Вариант 1 (обобщенный, более сфокусированный на том, что будет делать пользователь)
class WidgetPage
def click_widgets_tab
click_on('Widgets')
end
def create_widget_button
click_on('Add Widget')
end
def enter_widget_name(name)
fill_in 'Widget Name', with: name
end
def enter_widget_type(type)
fill_in 'Widget Type', with: type
end
def widget_success?
expect(page).to have_content('.alert', text: 'Widget Successfully created!')
end
end
(Методы «Заполнить», вероятно, можно даже объединить в указанном выше случае
или вариант 2:
class WidgetPage
def click_widgets_tab
widget_tab_link.click
end
def create_widget_button
widget_add_element.click
end
def enter_widget_name(name)
widget_form_name.fill_in(name)
end
def enter_widget_type(type)
widget_form_type.fill_in(type)
end
def widget_success?
widget_success_alert.has_text? 'Widget successfully created!'
end
private
def widget_add_element
find_button('Widget')
end
def widget_form_name
find_field('Widget Name')
end
def widget_form_type
find_field('Widget Type')
end
def widget_tab_link
find_link('Widgets')
end
def widget_success_alert
find(.alert, text: "Widget successfully created!")
end
end
Мне кажется, что я вижу большинство учебных пособий по объектам страницыиспользуйте вариант 2 ... но кажется, что для небольшого возврата вложенных средств требуется много дополнительного кода. Наличие методов для возврата элементов имеет смысл для меня, если они используются в нескольких методах ... но не для каждого метода.
Также, что касается утверждений, вариант 1 имеет больше смысла. Но я также слышал, что у вас не должно быть утверждений в объекте страницы. Так что, возможно, имеет больше смысла просто иметь метод, который возвращает ли оповещениеНапример, видим или нет? Все еще не уверен, что лучший способ справиться с этим.