Поддерживает ли Webdriver pagefactory для Python? - PullRequest
7 голосов
/ 12 декабря 2011

Я читал о объектах страницы и шаблонах проектирования на сайте проекта Webdriver, и наткнулся на pagefactory . Это не похоже на то, что Webdriver для Python API включает в себя pagefactory. Это правда?

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Я не думаю, что есть какие-либо эквиваленты аннотаций Java (@Find (By.xxx) и т. Д.) В Python. Но это не значит, что вы не можете использовать шаблон PageObject.

Хороший пример того, как это сделать, вы можете найти здесь: https://github.com/SeleniumHQ/selenium/blob/master/py/test/selenium/webdriver/common/google_one_box.py

4 голосов
/ 30 апреля 2014

Языки с динамической типизацией, такие как Python, менее одержимы шаблонами проектирования для создания объектов - потому что тривиально легко просто создать объект любого типа (с надлежащими методами) и вернуть его. Шаблоны - это общие решения общих проблем. Если что-то не является проблемой, вам не нужен шаблон для его решения :-) ООП изначально был шаблоном проектирования в C.

Редактировать, декабрь 2017 г .:

В нашей собственной инфраструктуре для автоматизации страниц (для автоматического тестирования пользовательского интерфейса и других целей) мы используем шаблон проектирования объекта страницы, но не нуждались в фабрике страниц. Наследство старой школы от нашей пользовательской BasePage покрывало все наши (довольно разнообразные) потребности. Мы используем несколько трюков для создания элементов страницы и следим за тем, чтобы была создана конкретная страница, и, исходя из этого, мне нравится, что наш PageObject прост.

Кроме того, Python допускает множественное наследование, если ваши потребности усложняются.

По моему опыту (использую Python, Selenium и WebDriver уже более 5 лет), отсутствие шаблона фабрики страниц является признаком того, что он вам не нужен, а также то, что он не может быть реализован.

1 голос
/ 10 июня 2015

Я создал модуль с именем pageobject_support, который реализует паттерн PageFactory питонским способом.

С помощью этого модуля страницу поиска Google можно смоделировать следующим образом:

from pageobject_support import cacheable, callable_find_by as find_by
from selenium.webdriver.common.by.By

class GoogleSearchPage(object):

    _search_box = find_by(how=By.NAME, using='q', cacheable=True)

    _search_button = find_by(name='btnK')

    def __init__(self, driver):
        self._driver = driver

    def search(self, keywords):
        self._search_box().click()
        self._search_box().send_keys(keywords)
        self._search_button().click()

Ваш отзыв приветствуется. Для более подробной информации, пожалуйста, посетите https://jeremykao.wordpress.com/2015/06/10/pagefactory-pattern-in-python/

...