Шаблон дизайна объекта страницы в нескольких проектах - PullRequest
2 голосов
/ 25 мая 2011

Мы тестируем с использованием селена и используем дизайн объекта страницы.То есть у нас есть файл библиотеки, который содержит все функции определенной страницы нашего сайта.Под «функциональностью» я также подразумеваю процессы - у нас есть библиотека «Page Object» для «Login», «Register», ... которые на самом деле не являются страницами.

Проблема начинается, когда у нас несколько проектовс той же функциональностью.Например, у нас есть мобильная версия нашего сайта, версия для ipad, ... Процесс высокого уровня остается прежним (например, для входа в систему вы все еще: 1) введите имя пользователя 2) введите пароль 3) нажмите Enter) но xpath меняются между сайтами.В большинстве случаев тесты одинаковы, за исключением очень небольшого количества различий (например, в login-mobile у вас нет 4) отметьте меня).

У нас есть решение (I 'Ниже я проиллюстрирую основную идею, которая включает наследование объектов страницы.Я был бы рад услышать, как вы решаете эту проблему.

Наше решение:

  • Мы стучим по объекту селена с объектом, который мы называем user
  • Каждый проектполучает своего собственного пользователя: т.е. mobileUser, ipadUser и т. д. Все они наследуются от родительского (абстрактного) пользователя.
  • Наши библиотечные файлы - это классы, которые наследуются друг от друга.
  • Поскольку «главный» скрипт одинаков для всех проектов, мы вызываем один и тот же фрагмент кода для каждого проекта, каждый раз предоставляя ему другой тип пользователя.
  • Поскольку в каждом проекте есть пользователь, мы «импортируем» правильный файл библиотеки через пользователя

Например:

def testLogin(user):
    user.lib.Login.LoginAction("username", "password")

Имя библиотеки«Login» и функция, которую мы хотим вызвать - «LoginAction».Если user является mobileUser, тогда Login будет библиотекой Mobile Login.Если user - это ipadUser, то это будет библиотека входа в ipad и т. Д.

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

1 Ответ

1 голос
/ 26 мая 2011

У нас была та же проблема, и наш путь был наследованием. Создайте несколько общих классов как суперклассы, и всякий раз, когда вы захотите внести небольшие изменения, расширьте их и создайте дочерний класс с новыми XPATH. Мы также пытались использовать Java-рефлексию для решения накладных расходов, связанных с несколькими классами, но, поскольку мы, прежде всего, команда QA, нам не понравилось рефлексия.

...