Преобразование моего существующего кода в шаблон проектирования PageObject с помощью PageFactory

Я создаю тесты, используя веб-драйвер Selenium 2 с С#.Net. Прочитав большое количество документации по Selenium, я не уверен, что следую правильному шаблону проектирования, и не уверен, как проводить тестирование с использованием шаблонов проектирования PageObject.

вот мой текущий код, который я использую на своей странице, и он работает

WaitForElement(By.CssSelector("input#ctl00_ctl00_signinControl_txtUsername")).SendKeys("abc123");
WaitForElement(By.CssSelector("input#ctl00_ctl00_signinControl_txtPassword")).SendKeys("password");

SelectElement select;
IWebElement selElement = WaitForElement(By.CssSelector("select#ctl00_ctl00_ddlGoTo"));
select = new SelectElement(selElement);
select.SelectByText("Homepage");

*<more code .....>*

также я сказал, что не могу использовать элемент страницы Select с помощью pageFactory.

Нужно ли мне изменить свой код так, как я его закодировал? любая обратная связь будет здорово.


person Nick Kahn    schedule 12.02.2013    source источник
comment
Почему нельзя использовать класс Select? Не вижу причин, почему бы и нет. Шаблон Page Object просто предназначен для того, чтобы разделить ваши тесты на их элементы и то, как они взаимодействуют. Ваш тест не должен заботиться о том, как будет найден элемент, за это отвечает объект вашей страницы.   -  person Arran    schedule 13.02.2013
comment
Если вы используете PageFactory, каждый элемент управления экраном создается автоматически как WebElement (не соответствующий подкласс, например Select). Вы можете преобразовать WebElement в Select во время выполнения, когда собираетесь взаимодействовать с элементом управления экраном, но это не очень чисто; было бы намного лучше, если бы вы могли создать его как Select в первую очередь.   -  person Vince Bowdren    schedule 30.04.2013


Ответы (1)


Идея шаблона объекта страницы состоит в том, чтобы иметь объект, представляющий страницу. По сути, вы пишете API для взаимодействия со страницей.

Например, объект страницы входа может иметь следующие методы:

  • введитеимяпользователя(строкаимяпользователя);
  • введите пароль (строковый пароль);
  • нажмитеКнопкуВхода();

Человеку, использующему объект страницы для взаимодействия со страницей, не нужно заботиться о том, как селен находит элементы и взаимодействует с ними. Если идентификатор в поле изменится, вам просто нужно будет изменить локатор на объекте страницы, и вам не нужно будет изменять все тесты, которые вызывают общедоступный метод связанного объекта страницы.

person jdumonti    schedule 13.02.2013
comment
Я просто укажу здесь, что описанный объект не соответствует шаблону Page Object. В лучшем случае это будет называться Page Wrapper. Объект страницы будет иметь такой метод, как login(String userName, String password), и учетные данные будут переданы в этот метод. - person JimEvans; 15.02.2013
comment
Спасибо за исправление. Я не понимал разницы, пока вы не указали на нее. У меня были такие методы, как метод входа в систему, который вы описали, но я обнаружил, что мои тесты должны контролировать порядок ввода каждого из полей до такой степени, что почти каждый метод просто работал с одним или двумя полями. Я предполагаю, что Page Wrapper в конце концов работает лучше для меня. - person jdumonti; 15.02.2013
comment
да, что сказал Джим Эванс. Я написал пост, в котором объясняется, как вы можете подойти к шаблону объекта страницы. Проверьте это paulsodimu .co.uk/Пост/ - person bayological; 06.01.2015