2016-12-02 3 views
0

Я использовал рамки огурца/рубина/capybara/siteprism и реализую тестовые страницы в настоящее время. Я достиг точки, в которой на нескольких страницах есть много переключателей (более 20) на страницу, и я думал, есть ли какая-либо польза в попытке сопоставить все эти элементы как статические элементы в моей объектной модели страницы?Есть ли какая-либо возможность определять переключатели в модели объекта страницы (например, SitePrism), а не напрямую использовать Capybara?

Т.е., думая об этом, кажется, гораздо удобнее просто использовать текст переключателя в определении шага и вызвать метод capybara 'choose' напрямую, что-то вроде следующего, так что мне не нужно чтобы сделать что-нибудь еще для тех 20+ радиокнопок, все это должно работать только путем изменения параметра мы передаем в функцию:

cucumber feature: 
    When I select that "I am over 18" 

capybara step: 
    When /^I select that "(.*)"$/ |option| 
     choose(option) 

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

element :over_18_button, :radio_button, "I am over 18" 
element :over_12_button, :radio_button, "I am over 12" 
etc x50times 

И для его использования нужно создать страницу, вызвать элемент, который не кажется мне прямым?

siteprism step: 
    When /^I select that "(.*)"$/ |option| 
    case option 
     when 'I am over 18' 
      over_18_button.click 
     when 'I am over 12' 
      over_12_button.click 

Я думаю, можно было бы создать «элементы» или «раздел» с массивом на все кнопки, но тогда мы должны поставить дополнительную логику, чтобы разобрать их и нажмите на соответствующую одну все равно где-то в коде, в то время как все будет сделано аккуратно и без необходимости какого-либо дополнительного кода или обслуживания с помощью метода «выбрать» из capybara.

Могу ли я предположить, что в этом примере использование Capybara - лучший вариант? , или если было бы лучше определить «ВСЕ» веб-элементы в объектной модели страницы, какая польза от этого? и может ли код объекта страницы быть выполнен иным способом, чтобы воспользоваться любой возможной выгодой?

PS: добавление тега «страница-объект», «» Watir так же, как я предполагаю, что концептуально структура тестов будет таким же, поэтому, возможно, кто-то использует эту структуру может помочь, а также ...

ответ

0

Эта сложная формулировка дела не нужна.

When /^I select that I am over "(\d\d)"$/ |age| 
    @page_object.select_age(age) 

Я не знаком с site_prism. Мой watir_drops камень позволит вам определить все с той же схемой, как это:

element(:age_button) { |age| browser.radio_button(text: "I am over #{age}") 

с помощью этого метода в объекте страницы:

def select_age(age) 
    age_button(age).set 
end 

Мы также могли бы получить в целом долгую дискуссию об использовании декларативных вместо императивных шагов. Кроме того, использование метода «Использование страницы» не позволяет напрямую вызвать определенные элементы. Методы вызова, которые выполняют бизнес-логику и эти методы, выполняют всю реализацию, включая определения элементов и действия над ними.

+0

Я вижу, что вы имеете в виду, есть функция, которая получает параметр и передает его при определении элемента объекта страницы ... но в этом случае в чем преимущество использования '@ page_object.select_age (age)' с новой реализации (плюс необходимость создания новой функции и определения элемента) вместо того, чтобы просто использовать путь capybara или watir напрямую - например, «выбрать (возраст)» и избежать всех остальных бит? Я не понимаю, почему это была бы хорошая идея, но я мог бы пропустить важный момент в объектной модели страницы? – mickael

+0

Образец объекта страницы рассматривает несколько проблем.1) Аннотация логика реализации из бизнес-логики (что и как) 2) сохранить код DRY (все может быть обновлено в одном месте) и 3) интеллектуальная организация для упрощения обслуживания (при изменении страницы вы обновляете одну связанную страницу объект). Я не могу говорить с лучшими практиками Капибары, но Ватир - скорее библиотека (для рамки Капибары), которая хорошо поддается этой абстракции. – titusfortner

Смежные вопросы