2011-12-12 13 views
7

Estaba leyendo acerca de page objects y los patrones de diseño en el sitio del proyecto Webdriver y me encontré con pagefactory. No parece que Webdriver para Python API incluya pagefactory. ¿Es esto cierto?¿Webdriver admite pagefactory para Python?

+1

Aquí hay un artículo sobre cómo utilizar el patrón PageObject en Python con Selenium: http://pragprog.com/magazines/2010-08/page-objects-in-python – jononomo

Respuesta

5

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

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

+4

El enlace ha cambiado a https://code.google.com/p/selenium/source/browse/py/test/selenium/webdriver/common/google_one_box.py – abhi

+0

El enlace se ha actualizado nuevamente a https://github.com/ SeleniumHQ/selenium/blob/master/py/test/selenium/webdriver/common/google_one_box.py – Deep

4

lenguajes de tipo dinámico como Python son menos obsesionados por los patrones de diseño para crear objetos - porque es trivialmente fácil sólo crean objeto de cualquier tipo (con adecuada métodos) y devolverlo. Los patrones son soluciones comunes a problemas comunes. Si hay algo que no es un problema, que no es necesario un patrón de tratar con él :-) programación orientada a objetos fue inicialmente un patrón de diseño en C.

edición, diciembre 2017

En nuestro marco de cosecha propia para la automatización de la página (para pruebas UI automatizadas y otros fines), utilizamos el patrón de diseño de los objetos de página, pero no teníamos necesidad de una fábrica de páginas. La herencia de la vieja escuela de nuestra BasePage personalizada cubre todas nuestras necesidades (bastante diversas). Usamos algunos trucos para crear elementos de página y nos aseguramos de que se creó 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.

Según mi experiencia (usando Python, Selenium y WebDriver por más de 5 años), la falta de un patrón de fábrica de página es una señal de que no la necesita, no es que no pueda implementarse.

1

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

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

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 regeneración se aprecia. Para obtener más información, visite https://jeremykao.wordpress.com/2015/06/10/pagefactory-pattern-in-python/

Cuestiones relacionadas