Как правильно сменить контекст страницы в кейсе?

Для автоматизации использую Ruby + Cucumber + Capybara + SitePrism

В чем проблема: в 90% случаев в приложении после клика по ссылке или кнопке осуществляется редирект на другую страницу.
Сейчас после клика в кейсе, я делаю проверку ту ли страницу видит юзер.

пример кода который есть сейчас:

# .feature file
Given user click "button_name"
Then user see "page name" page
# реализация степов
When(/^user click "([^"]*)"$/) do |element|
  @current_page.send(element).click
 end

Then(/^user see "([^"]*)" page$/) do |page|
  page_for(page) # page_for - хелпер, который производит загрузку объекта страницы
  expect(current_url).to be_include @current_page.url
end
  1. Думаю, в каждом кейсе писать шаг загрузки страницы не правильно, но так же мне не очень нравится идея реализовать отдельно клик по каждой кнопке.
  2. Столкнулся с проблемой, которая заключается в том, что есть “вложенные” страницы, т.е. это куски страниц, которые дублируются на нескольких страницах(приложение большое, таких виджетов несколько десятков на сотнях страниц).
    Пока частично решил проблему отлавливанием исключений, но считаю это костылем.
    пример:
When(/^user click"([^"]*)"$/) do |element|
  begin
    @current_page.send(element).click
  rescue
    @current_page.sidebar.send(element).click
  rescue
    @current_page.some_widget.send(element).click
  rescue
    @current_page.some_widget2.send(element).click
  rescue
    raise 'Элемент не найден'
  end
end

Посоветуйте пожалуйста возможные решения этих проблем.

ну во первых зачем вам cucumber? Аналитики у вас пишут тесты и участвуют в их ревью?
По поводу проблемы:
Выделите виджеты как отдельные page object, и инжектите их в другие page object где они находятся. Или юзайте сразу напрямую

ну во первых зачем вам cucumber? Аналитики у вас пишут тесты и участвуют в их ревью?

У приложения очень сложная бизнес логика. Так удобнее и нагляднее получается.

Выделите виджеты как отдельные page object, и инжектите их в другие page object где они находятся.

Я так и сделал, но появилась проблема №2 - обращение к таким элементам осуществляется через дополнительный неймспейс, состоящий из названия виджета. Выше я привел пример реализации, которая частично решает вопрос с помощью обработки исключений, но такой маневр требует дополнительного времени на обработку + плодить исключения не хочется…

Или юзайте сразу напрямую

Насколько я знаю SitePrism не дает их юзать напрямую, Юзать можно через доп неймспейсы, т.е. страница.виджет.элемент. Может вы имели ввиду что-то иное? Поясните пожалуйста.

Собственно мне важно понять, как решить вышеозначенные проблемы:

  1. Писать в фича файлах шаги загрузки страницы, или реализовать шаги кликов по каждой кнопке и загрузку объектов соответствующих страниц или есть еще какой-то вариант?
  2. Если оставлять универсальный степ клика по какой-либо кнопке, как быть с неймспейсами виджетов?