Estoy usando Selenium RC para automatizar algunas operaciones del navegador, pero quiero que el navegador sea invisible. es posible? ¿Cómo? ¿Qué pasa con Selenium Grid? ¿Puedo ocultar también la ventana de Selenium RC?
Estoy usando Selenium RC para automatizar algunas operaciones del navegador, pero quiero que el navegador sea invisible. es posible? ¿Cómo? ¿Qué pasa con Selenium Grid? ¿Puedo ocultar también la ventana de Selenium RC?
Respuestas:
Hay algunas opciones:
Puede usar Selenium Grid para que el navegador se abra en una máquina completamente diferente (o máquina virtual) a la que luego pueda conectarse a través de VNC o Conexión de escritorio remoto si desea ver el navegador. Además, otra opción: si ejecuta un proceso de primer plano de Jenkins en ese servidor remoto, puede ejecutar su proyecto de prueba en el escritorio.
Puede ejecutar Selenium 'sin cabeza' en Linux en XVFB. Nunca he intentado hacer esto y dudo que realmente valga la pena el esfuerzo. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Puede envolver Selenium RC en un servicio de Windows. http://support.microsoft.com/kb/137890 . Excepto que las restricciones de permisos en versiones posteriores de Windows probablemente evitarán que Selenium acceda al escritorio, como solía permitirnos Windows 2000.
Otra opción sería usar algo como WebDriver HTMLUnitDriver, que no inicia un navegador "real". http://code.google.com/p/webdriver/ . También hay una opción PhantomJS, así como un 'Chrome sin cabeza' que puede usar.
Por supuesto, también existe la opción de utilizar un servicio como SauceLabs, donde puede hacer que sus pruebas se ejecuten en la nube. Una vez que se hayan completado las pruebas, puede ver un video de ellas ejecutándose.
En Linux, puede ejecutar WebDriver en una pantalla sin cabeza (virtual) para ocultar el navegador. Esto se puede hacer con Xvfb (X virtual framebuffer).
Puede controlar Xvfb directamente desde el código Python usando xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
El código de Python para ejecutar sin cabeza se vería así:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Instale dependencias en Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Pude ocultar fácilmente la ventana del navegador.
Simplemente instale PhantomJS . Luego, cambia esta línea:
driver = webdriver.Firefox()
a:
driver = webdriver.PhantomJS()
No será necesario cambiar el resto de su código y no se abrirá ningún navegador. Para fines de depuración, utilícelo driver.save_screenshot('screen.png')
en diferentes pasos de su código.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+1 para Selenium RC como servicio de Windows.
Para que las pruebas se ejecuten completamente ocultas, creo que no tiene muchas soluciones si está en Windows.
Lo que haría sería dedicar una computadora en su LAN para estar en línea todo el tiempo y tener un servidor RC de selenio en funcionamiento. Entonces usa la IP de esa computadora en lugar de localhost para ejecutar sus pruebas. Por ejemplo:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(considerando que esa es la ip de la computadora que ejecuta el servidor).
Con esa configuración, ejecutas tus pruebas en tu computadora, los navegadores y la ventana del servidor RC están en otra computadora y vuelves a la tuya una vez hecho.
En Linux, puede ejecutar su navegador de prueba en una pantalla virtual. Necesitará el xvfb
paquete para crear un servidor X virtual. En distribuciones basadas en Debian, simplemente ejecute
sudo apt-get install xvfb
Hay una buena herramienta ephemeral-x.sh
que configurará convenientemente cualquier comando para que se ejecute en la pantalla virtual. Descárgalo y hazlo ejecutable:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Luego, simplemente puede usarlo para iniciar el servidor Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Todas las ventanas del navegador creadas por Selenium ahora usarán la pantalla virtual y serán invisibles para usted.
Si está en Windows, una opción es ejecutar las pruebas con una cuenta de usuario diferente . Esto significa que el navegador y el servidor Java no estarán visibles en su propia cuenta.
Así es como ejecuto mis pruebas con maven en un escritorio Linux (Ubuntu). Me harté de no poder trabajar con el controlador web de Firefox siempre enfocado.
Instalé xvfb
xvfb-run -a mvn clean install
Eso es
En muchos casos, PhantomJS no se adaptará completamente a sus necesidades, me gustaría ampliar la opción de cromo sin cabeza mencionada en la respuesta de Dave Hunt.
Chrome 57 acaba de lanzar esta función. Puede usarlo pasando la bandera --headless a través de ChromeDriver, para obtener más información, consulte la discusión en esta pregunta
Existe un proyecto relacionado con PhantomJS llamado GhostDriver , que está destinado a ejecutar instancias de PhantomJS en un Selenium Grid utilizando el protocolo JSON de cable webdriver. Eso es probablemente lo que estás buscando, aunque esta pregunta ya tiene 4 años.
En MacOSX, no he podido ocultar la ventana del navegador, pero al menos descubrí cómo moverlo a una pantalla diferente para que no interrumpa tanto mi flujo de trabajo. Mientras Firefox está ejecutando pruebas, simplemente haga control y haga clic en su icono en el dock, seleccione Opciones y Asignar a la pantalla 2.
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
Por cierto, esta es una característica que necesita cualquier desarrollador que ejecute e2e y que, lógicamente, generará navegadores. En un entorno de desarrollo es molesto lidiar con la ventana que sigue apareciendo y con la que puede interactuar accidentalmente haciendo que la prueba falle.
Usar Chrome sin cabeza sería su mejor opción, o podría publicar directamente en el sitio para interactuar con él, lo que ahorraría mucho poder de cómputo para otras cosas / procesos. Utilizo esto cuando pruebo bots de automatización web que buscan zapatos en múltiples sitios usando elementos pesados de CPU, cuanto más energía ahorre y cuanto más simple sea su programa, más fácil será ejecutar múltiples procesos a la vez con mucha mayor velocidad y fiabilidad.