Поддерживает ли Webdriver pagefactory для Python?

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


person hourback    schedule 12.12.2011    source источник
comment
Вот статья о том, как использовать шаблон PageObject в Python с Selenium: pragprog.com/magazines/2010-08/page-objects-in-python   -  person jononomo    schedule 28.12.2012
comment
Ссылка обратного пути на указанную выше ссылку https://web.archive.org/web/20190428004331/https://pragprog.com/magazines/2010-08/page-objects-in-python   -  person Conrad B    schedule 06.10.2020


Ответы (3)


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

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

person n1r3    schedule 12.12.2011
comment
Ссылка изменена на код .google.com/p/selenium/source/browse/py/test/selenium/ - person abhi; 09.04.2013
comment
Ссылка снова была обновлена ​​на github. .com/SeleniumHQ/selenium/blob/master/py/test/selenium/ - person Deep; 15.02.2016

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

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

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

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

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

person Peter M. - stands for Monica    schedule 30.04.2014

Я создал модуль под названием 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/

person Jeremy Kao    schedule 10.06.2015