Recientemente estaba realizando un automatización de un procedimiento web y me he encontrado con un problema que he tenido que dar bastantes vueltas para resolverlo.
En un principio comencé grabando la interacción con el Selenium IDE y todo funcionaba correctamente en el navegador de pruebas. El problema venía cuando esto se intentaba trasladar a otro navegador y es que la página web requería que el navegador compartiese la ubicación.
Por defecto todos los navegadores bloquean estas peticiones y tenemos que dar acceso individualmente a cada dominio. Esto se hace con la clásica ventana modal de petición como la siguiente:
Una vez que lo hayamos aceptado el navegador guardará ese permiso y el sitio funcionará correctamente.
El problema es que al realizar una automatización con Selenium no partimos necesariamente de un navegador con una configuración determinada. Por lo tanto tendremos que añadir esta configuración en los tests para que siempre funcione correctamente.
La solución que voy a mostrar es para Firefox y los tests están escritos en Python. En la creación del webdriver tendremos que pasarle un conjunto de opciones que se convertirán en las preferencias de la instancia del navegador.
def setup_method(self, method):
options = Options()
options.set_preference('geo.enabled', True)
options.set_preference('geo.prompt.testing', True)
options.set_preference('geo.prompt.testing.allow', True)
options.set_preference('permissions.default.geo', True)
options.set_preference('geo.provider.network.url', 'data:application/json,{"location": {"lat": 40.7590, "lng": -73.9845}, "accuracy": 27000.0}')
self.driver = webdriver.Firefox(options=options)
En el JSON del campo geo.provider.network.url podremos modificar los valores de longitud, latitud y precisión a los que nos interesen para nuestro caso.
Es importante reseñar que este método funciona únicamente en versiones recientes de Firefox porque los nombres de algunas preferencias han cambiado.
También reseñar que este sistema es totalmente compatible con lanzar los tests en remoto en Selenium Grid.
Comentarios