¿Webdriver soporta pagefactory para Python?

Estaba leyendo acerca de los objetos de página y los patrones de diseño en el sitio del proyecto Webdriver y encontré pagefactory . No parece que la API de Webdriver for Python incluya pagefactory. ¿Es esto cierto?

No creo que haya equivalencias de las anotaciones de Java (@Find (By.xxx), etc.) en Python. Pero eso no significa que no puedas usar el patrón de PageObject.

Puede encontrar un buen ejemplo de cómo hacerlo aquí: https://github.com/SeleniumHQ/selenium/blob/master/py/test/selenium/webdriver/common/google_one_box.py

Los lenguajes de tipo dynamic como Python están menos obsesionados con los patrones de diseño para crear objetos, ya que es trivialmente sencillo, simplemente cree objetos de cualquier tipo (con los métodos adecuados) y devuélvalos. Los patrones son soluciones comunes a problemas comunes. Si algo no es un problema, no necesita un patrón para resolverlo 🙂 OOP fue inicialmente un patrón de diseño en C.

Edición, diciembre de 2017:

En nuestro marco interno para la automatización de páginas (para pruebas de UI automatizadas y otros propósitos), usamos el patrón de diseño de objetos de página, pero no tuvimos necesidad de una fábrica de páginas. La herencia de la vieja escuela de nuestra BasePage personalizada cubría todas nuestras necesidades (bastante diversificadas). Usamos algunos trucos para crear elementos de la página y nos aseguramos de que se haya creado una instancia de la página correcta, y en base a esa experiencia, me gusta que nuestro PageObject sea simple.

Además, Python permite la herencia múltiple, si sus necesidades se vuelven más complicadas.

En mi experiencia (usando Python, Selenium y WebDriver durante más de 5 años), la falta de patrón de fábrica de páginas es una señal de que no lo necesita, no de que no se pueda implementar.

He creado un módulo llamado pageobject_support que implementa el patrón de PageFactory de forma pirónica.

Con este módulo, la página de búsqueda de Google podría modelarse de la siguiente manera:

 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() 

Su opinión es apreciada. Para obtener más detalles, visite https://jeremykao.wordpress.com/2015/06/10/pagefactory-pattern-in-python/