2016-11-09 5 views
0

Мы делаем автоматизацию с использованием Ruby и Cucumber. У нас есть около 80 файлов функций, 1 файл web_Steps, содержащий все общие шаги.
Проблема, с которой мы сталкиваемся, - это все локаторы, присутствующие в файле функций. Поэтому, если структура html изменяется, мы должны обновлять локаторы во всех соответствующих файлах, которые очень трудоемки. например:
веб шаг:Автоматизация рубинового огурца

And /^I fill in "([^"]*)" with "([^"]*)"$/ do |field, value| 
fill_in(field, with: value) 
end 

Характеристика файла:

And I fill in "location" with "Mumbai" 
And I fill in "contact_details" with "[email protected]" 

Таким образом, если локатор «местоположение» изменено на что-то другое, то мы должны обновить все полнометражных файлы, которые содержат локатор «местоположение "

Есть ли лучший способ решить эту проблему ?.

+0

Я не знаю, понял ли я ваш вопрос. Но, если я это сделаю: не можете ли вы создать глобальную переменную '$ locator = 'location''? Поэтому вам нужно будет только изменить его, и он изменится во всех файлах функций. – fabersky

+0

Также, если у вас есть много из этих переменных переменных, создайте глобальный хеш и сохраните локаторы с подходящим ключом в них. – Grasshopper

+0

Используете ли вы объекты страницы? если нет, вы должны. – lauda

ответ

0

Я хотел бы добавить в ваш spec_helper.rb глобальную переменную

$locator = 'location' 

В случае изменения HTML, вы легко сможете изменить его только один раз в spec_helper и локатор будет меняться во всех ваших художественных файлов ,

+0

Я не могу понять, как мои веб-страницы поймут, какую глобальную переменную выбрать. Можете ли вы дать некоторые ссылки для этого. – Genex

1

В основном «вы не ошибаетесь» - тип тестов, которые у вас есть, именно поэтому web_steps.rb был удален из огурца несколько лет назад. Следующая статья посвящена тому, как тесты должны быть написаны при использовании огурца - http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off

0

Есть много замечательных статей уже по теме, но мне очень нравится push HOW down. Подводя итог:

  • пользу декларативного BDD
  • рефакторинг ввести DSL
  • ход все UI чувствительные детали (например, селекторы) к одному источнику истины в вашем коде

Узоры, такие как Loadable component, Page object и Object map помогут вам со всем этим.

0

This is our exisitng structure

This is something i am thinking of, by creating multiple web_steps

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