¿Es posible ocultar el navegador en Selenium RC?

92

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?

Yatendra Goel
fuente
Puede que no sea aceptable, pero ¿no podría simplemente mover el navegador fuera de la pantalla (¿utilizando la automatización normal de la interfaz de usuario de Windows?) Como colocar la ventana en (-10000, -10000).
BrainSlugs83
2
Dado que esta pregunta es antigua ahora, permítame redirigirlo hacia una respuesta adecuada y actualizada en la parte inferior de esta página .
Stéphane Bruckert

Respuestas:

87

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.

Dave Hunt
fuente
Aquí hay instrucciones sobre cómo
Brantley Blanchard
58

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
Corey Goldberg
fuente
Cuando el código se ejecuta en un navegador virtual, ¿puedo seguir usando mi PC normalmente mientras se ejecuta el script de interacción del navegador?
Mugen
Se toman los recursos, ¡su máquina se volverá más lenta!
Tim Long
22

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.

Stéphane Bruckert
fuente
5
Vale la pena mencionar que debes poner la ruta del PhantomJs.exe para que esto funcione. ejemplodriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Sí, pero solo en Windows.
Stéphane Bruckert
1
no es necesario especificar la ubicación del binario siempre que se pueda encontrar en la variable de entorno $ PATH de su entorno.
Corey Goldberg
13

+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.

Santi
fuente
12

En Linux, puede ejecutar su navegador de prueba en una pantalla virtual. Necesitará el xvfbpaquete para crear un servidor X virtual. En distribuciones basadas en Debian, simplemente ejecute

sudo apt-get install xvfb

Hay una buena herramienta ephemeral-x.shque 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.

pixelistik
fuente
Este script tiene un problema de citas. Si digo ./ephemeral-x.sh foo '*', dice "Running: foo" seguido del contenido de mi directorio.
Nick Retallack
4

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.

Igor Brejc
fuente
3

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

Paul Whelan
fuente
Con frecuencia, esta es la forma más sencilla de garantizar que xvfb se esté ejecutando y utilizado por Selenium / WebDriver.
Samuli Pahaoja
1

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

Marlies
fuente
0

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.

djangofan
fuente
0

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.

chetstone
fuente
0
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.

Néstor Urquiza
fuente
0

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.

LiamººT
fuente