Как я могу найти объект страницы страницы, на которой в данный момент находится watir?

Контекст:

Я пытаюсь сделать многоразовые определения шагов, которые нажимают на объекты страницы на текущей странице, например. (следует определение шага огурца):

When(/^the user clicks the "([^"]*)" button$/) do |button|

      click_button = button.downcase.gsub(" ","_")
      @current_page #somehow get current page object on this line
      @current_page.click_button

end

Постановка задачи:

Я не могу найти ничего, что возвращает текущий объект страницы.

Объяснение того, почему очевидное решение не сработало:

Я думал, что @current_page уже есть, как то, что я мог бы использовать. Я просмотрел исходный код объекта страницы, и переменная @current_page действительно существует. Не уверен, как его использовать, если я могу...


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


person David West    schedule 10.12.2013    source источник
comment
Я бы не стал использовать такой подход. Щелчок по кнопкам — это средство для достижения цели. Кнопка может измениться на пролистывание, когда сенсорные экраны станут более распространенными. Я бы сосредоточился на цели. Когда вы нажимаете кнопку, возможно, вы пытаетесь отправить страницу. Возможно, вы хотите, чтобы текст в текстовой области автоматически форматировался. В моих шагах будет написано «Когда я отправлю покупку».   -  person Dave McNulla    schedule 11.12.2013
comment
мы проводим регрессионные тесты для собственного приложения. Я не собираюсь ставить на это свою жизнь, но очень маловероятно, что веб-интерфейс когда-либо будет на планшетах. Тем не менее, отличный комментарий +1   -  person David West    schedule 11.12.2013
comment
Я считаю, что @current_page можно установить только при использовании методов страницы on или visit (в PageFactory). Концептуально, как узнать, какой объект страницы соответствует какой странице?   -  person Justin Ko    schedule 11.12.2013
comment
Я потратил некоторое время, пытаясь думать об этом сам. Существует метод if_page, который может определить, находитесь ли вы на определенной странице. Проверка всех объектов страницы, которые у вас есть, может быть не слишком дорогой. Это возможный способ сделать то, что я хочу. Используйте if_page для каждого объекта страницы, который вы создали, пока не получите положительный результат. К чести @DaveMcNulla, похоже, что мы все равно не собираемся пытаться писать такие определения шагов. Он перемещает всю логику, которая должна быть в шаге определения и кода поддержки, в Gherkin...   -  person David West    schedule 11.12.2013


Ответы (2)


Это несколько противоречит тому, что пытается предоставить page-object.

Объект страницы пытается предоставить правильно названные действия для взаимодействия с определенной страницей. Если вы хотите сделать что-то, что в целом работает на любой странице, будет намного проще написать это напрямую с помощью watir-webdriver.

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

person Alexis Andersen    schedule 02.04.2015

Как упомянул Джастин Ко, @current_page устанавливается, когда вы вызываете методы on или visit. Не рекомендуется объединять что-то, что изменяет объект страницы, с шагом, который выполняет определенное действие (в данном случае нажатие кнопки). Вам может понадобиться другой шаг, указывающий на поведение приложения, например

     the application lands on the <your page> page

Затем вы можете использовать имя класса объекта страницы для загрузки @current_page с помощью метода on в этом определении шага. Это также дает преимущество (или проклятие того, что ваш шаг имеет более низкоуровневые детали) указания ожидаемого поведения при навигации по странице.

person mrcallahat    schedule 07.07.2014