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?
Respuesta
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
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.
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/
- 1. Cómo mouseOver en Python WebDriver
- 2. selenio WebDriver ejemplo en Python
- 3. ¿Admite PySide Python 3?
- 4. Cómo usar selenium 2 PageFactory init Elements con Wait.until()?
- 5. selenium.wait_for_condition equivalent en los enlaces de Python para WebDriver
- 6. Para enviar tres teclas usando send_keys() en selenium python webdriver
- 7. Maximice WebDriver (Selenium 2) en Python
- 8. Python Selenium WebDriver drag-and-drop
- 9. Assert/VerifyElementPresent with Python and WebDriver?
- 10. Webdriver Screenshot
- 11. Servidor Python HTTP que admite codificación fragmentada?
- 12. ¿Multiprocesamiento.Pool de Python admite subprocesos remotos?
- 13. ¿Admite Python copia cero de E/S?
- 14. ¿Admite python la programación multiprocesador/multinúcleo?
- 15. Patrón de fábrica para Selenium webdriver
- 16. Formato JUnit en WebDriver vs WebDriver Respaldado
- 17. ¿Dónde está la documentación de la API Python de WebDriver?
- 18. Cómo enviar autenticación HTTP con Selenium python-binding webdriver
- 19. ¿Cómo se configura sustituto de cromo en Python WebDriver
- 20. Webdriver y servidor proxy para firefox
- 21. Cómo construir Webdriver remoto para Chrome
- 22. Selenium Webdriver: especifique filepath para Firefox exe
- 23. ¿Cómo se conecta de forma remota con Python + Webdriver
- 24. ¿Alguien ha usado ActionChains of Webdriver (enlace de python)?
- 25. ¿Admite Lua los decoradores?
- 26. ¿Es posible utilizar Selenium WebDriver para controlar PhantomJS?
- 27. ¿Qué valores posibles admite datetime.strptime() para% Z?
- 28. Amplíe Selenium WebDriver WebElement?
- 29. Eliminar cookies en Webdriver
- 30. ¿Admite argparse (python) grupos de argumentos mutuamente excluyentes?
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