Ruby проблема архитектуры и переиспользования кода

selenium
rspec
page-factory
ruby
page-object
webdriver
Теги: #<Tag:0x00007f3d45289fb8> #<Tag:0x00007f3d45289c20> #<Tag:0x00007f3d452898d8> #<Tag:0x00007f3d452894f0> #<Tag:0x00007f3d45289270> #<Tag:0x00007f3d45288f00>

(Anton Karpenko) #1

Использую Ruby + Selenium + RSpec + page-object gem
Есть проблема с переиспользованием кода. Вернее сказать, не могу понять как сделать лучше.
На примере теста регистрации, варианты, которые вижу я:
(можно составить кейсы по работоспособности элементов, валидации полей кода подтверждения, пароля, отображения текста пользовательского соглашения и т.п.)
вариант 1. Привести систему к определенному состоянию, например, отображение попапа с пользовательским соглашением и формой ввода кода подтверждения. И, после получения попапа:
* писать кейсы на отображение пользовательского соглашения
* писать кейсы на валидацию кода подтверждения

вариант 2. В каждом кейсе приводить систему к определенному состоянию, например, к описанному выше. Этот вариант порождает большое количество кода, которое можно переиспользовать. Но есть проблема. Например, я пытаюсь вынести этот код в отдельные методы, создав класс User, но при вызове методов в spec, получаю ошибку RuntimeError: Unable to pick a platform for the provided browser or element Не могу понять куда надо передать браузер. Когда не использовал гем page-object, не было таких проблем, но кода приходилось писать намного больше. Пожалуйста, подскажите, как лучше сделать и что почитать / посмотреть по теме. В доках по гему не нашел как исправить проблему.


(ffess) #2

Привет
Есть достаточно большой опыт использования данного набора тулов
Итак во-первых что уже читал-смотрел, прежде чем взяться за реализацию с page-object gem + rspec?


(Anton Karpenko) #3

Привет.
Всего по-немногу. Начал с урока какого-то индуса, где он вручную реализовывал паттерн page-object. Потом понял, что руками очень долго писать каждый метод, решил что дорос до использования гема, посмотрел пару роликов cheezy. По одному из них построил проект. До сих пор не понятно зачем нужны некоторые файлы(например, routes), но без них не работает.
По rspec посмотрел часть курса lynda, также смотрел разных индусов.
По page-object gem практически ничего не нашел, кроме доков и вышеозначенных роликов cheezy.

Означенную в первом посте проблему временно решил, объединяя тесты в context и в каждом контексте содаю блок before, в котором фактически готовится среда(редирект на нужные страницы, некоторые действия со страницей).

Буду рад любой помощи:slight_smile:. Вопросов очень много:joy:


(ffess) #4

пиши в скайп
f.fess


#5
  1. Gem page-object надо запретить к использованию, мозго...бство лютое )) Сократить код можно запихнув driver.find_element в свой метод, куда будешь просто передавать значение локатора.
  2. Плодить код в тестах не надо совсем, ибо DRY ) Впрочем, я совсем не понял, что и куда ты пытаешься вынести? Можно примеры?

(Daniel Castillo) #6

Check this
Ruby + Selenium + RSpec + Capybara + SitePrizm