Page Object
Автоматизация Ajax с помощью Selenium, BDD и Page Object
Опубликовано polusok в 28.10.2011Одна сложность, с которой сталкиваются тестеры, когда они начинают управлять браузерами с помощью Cucumber, - как управлять сайтами, которые содержат множество Ajax вызовов.
Они пишут скрипты, которые предполагают, что элементы на странице существуют, и очень удивлены, когда тесты не проходят, потому что они пытаются получить доступ к тому, чего еще не было на странице.
В этой статье я напишу простой сценарий, который демонстрирует асинхронные действия обработки Page Object gem. Я также кратко ознакомлю Вас с новым Gem, который я использую для создания моих новых проектов. Я сделаю все это написанием сценария, который использует один из примеров, который Google предоставила для демонстрации GWT библиотеки. Для тех из вас, которые посетили один из моих уроков, вы уже знакомы с этим примером, но, возможно есть еще несколько новых вещей для вас для изучения. Давайте начнем писать код!
Создание проекта
Первое, что мне нужно сделать, - это создать структуру моего проекта. Я думаю, я буду использовать Page Object gem с Selenium. Давайте использовать testgen gem для запуска. Если у вас нет установленного gem, вы можете просто выполнить gem install testgen. Вот команда, которую я использовал для создания своего проекта:
testgen project ajax_example --pageobject-driver=selenium
Это создает всю структуру проекта. Давайте быстро проверим, все ли в порядке. Первое, что нужно сделать, это убедиться, что все gem установлены. Testgen создал Gemfile файл для нас, теперь все, что нужно нам сделать, - это изменить на вновь созданные ajax_example каталог и выполнить bundle install.
Теперь, когда мы уверены, что у нас все gem установлены, пришло время для запуска Сucumber. Testgen создал Rakefile для нас, чтобы сделать это легко. Просто введите rake команду в ajax_example каталоге. Вы должны увидеть следующее:
Using the default profile... 0 scenarios 0 steps 0m0.000s
Теперь мы готовы к написанию сценария.
Написание сценария
Мы будем использовать пример DynaTable с сайта GWT. Вот эта страница. На этой странице выберите checkbox «день», а затем классы, предлагаемые на этот день, отображаются в строке с именем профессора. Давайте попробуем написать сценарий.
Я начинаю с создания файла в каталоге функций. Вот содержание:
Feature: Displaying class schedules
I need to be able to display the class schedule for professors. When I
select a day the page should display all of the class taught by professors
on that day as well as the time for the classes.
Scenario: Displaying classes offered by professors
Given I am on the google dynamic table page
When I view the schedule for "Monday"
Then I should see that "Inman Mendez" offers a class at "Mon 9:45-10:35"
When I view the schedule for "Tuesday"
Then I should see that "Inman Mendez" offers a class at "Tues 2:15-3:05"
And I should see that "Teddy Gibbs" offers a class at "Tues 10:00-10:50"
Заметьте, что я ничего не сказал о нажатии кнопок или checkboxes. Также заметьте, что я никоим образом не указал, как находятся или отображаются на странице класс или имя инструктора. Как вы думаете, почему я это сделал? В будущих статьях у меня будет намного больше, что рассказать об этом.
Мой следующий шаг заключается в создании шага определений. Для этого я снова выполню команду ‘rake’. Cucumber достаточно хорош для создания шагов ожидания.
Given /^I am on the google dynamic table page$/ do pending # express the regexp above with the code you wish you had end When /^I view the schedule for "([^\"]*)"$/ do |arg1| pending # express the regexp above with the code you wish you had end Then /^I should see that "([^\"]*)" offers a class at "([^\"]*)"$/ do |arg1, arg2| pending # express the regexp above with the code you wish you had end
Я знаю, что собираюсь создать объект страницы, но в первую очередь я хочу подумать о том, как этот объект будет выглядеть. Я думаю, что я напишу код, который я бы хотел иметь через пару определений. Вот то, что я получил:
When /^I view the schedule for "([^\"]*)"$/ do |day| page.select_schedule_for day end Then /^I should see that "([^\"]*)" offers a class at "([^\"]*)"$/ do |name, expected| page.schedule_for(name).include? expected end
Да. Я думаю, что именно так я хочу взаимодействовать со страницей объекта. Эти шаги определений незавершенные. Я только что написал достаточно, чтобы понять, что мне нужно добавить на страницу объект, который я собираюсь писать. Теперь, давайте писать.
»
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Читать далее







