switch_to - unittest selenium python
¿Webdriver es compatible con pagefactory para Python? (3)
Los lenguajes de tipado dinámico como Python están menos obsesionados por los patrones de diseño para crear objetos, porque es trivialmente fácil simplemente crear objetos de cualquier tipo (con los métodos adecuados) y devolverlos. Los patrones son soluciones comunes a problemas comunes. Si algo no es un problema, no necesita un patrón para manejarlo :-) OOP fue inicialmente un patrón de diseño en C.
Edición, dic 2017:
En nuestro marco interno para la automatización de páginas (para pruebas automatizadas de UI y otros propósitos), usamos 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 tus necesidades se vuelven más complicadas.
En 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.
Estaba leyendo acerca de los objetos de la página 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?
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 un buen ejemplo de cómo hacerlo aquí: https://github.com/SeleniumHQ/selenium/blob/master/py/test/selenium/webdriver/common/google_one_box.py
pageobject_support
un módulo llamado pageobject_support
que implementa el patrón PageFactory de forma pitonica.
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 información, visite https://jeremykao.wordpress.com/2015/06/10/pagefactory-pattern-in-python/