2009-09-13 19 views
88

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 la ventana de Selenium RC también?¿Es posible ocultar el navegador en Selenium RC?

+0

Puede que no sea aceptable, pero ¿no podría simplemente sacar el navegador de la pantalla (utilizando la automatización de Windows UI?) como colocar la ventana en (-10000, -10000)? – BrainSlugs83

+2

Dado que esta pregunta ya es antigua, permítame que lo redireccione hacia una respuesta correcta y actualizada [en la parte inferior de esta página] (http://stackoverflow.com/a/23898054/1515819). –

Respuesta

83

Hay algunas opciones:

  • Usted podría utilizar selenio cuadrícula de modo que se abra el navegador en un equipo completamente diferente (o máquina virtual), que luego se puede conectar a través de VNC o Remote Desktop Connection si quieres ver el navegador. Además, otra opción: si ejecuta un proceso en primer plano de Jenkins en ese servidor remoto, puede ejecutar su proyecto de prueba en el escritorio.

  • Puede ejecutar Selenium 'headless' 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 las versiones posteriores de Windows probablemente evitarán que Selenium acceda al escritorio como lo hizo Windows 2000 para permitirnos.

  • Otra opción sería usar algo como WebDriver HTMLUnitDriver, que no ejecuta un navegador "real". http://code.google.com/p/webdriver/. También hay una opción PhantomJS, así como un "Chrome sin cabeza" que podrías 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. Después de que tus pruebas se hayan completado, puedes ver un video de ellas corriendo.

+0

Aquí hay instrucciones para crear un archivo bat para instalar el servicio: http://brantleytec.blogspot.com/2012/11/selenium-hub-and-node-as-windows-service.html –

13

+1 for Selenium RC as a windows service.

Para que las pruebas se ejecuten completamente ocultas, creo que no tienes muchas soluciones si estás 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 de selenio RC en ejecución. 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") 

(teniendo en cuenta que esa es la IP del equipo que ejecuta el servidor).

Con esa configuración, ejecuta las pruebas en su computadora, los navegadores y la ventana del servidor RC están en otra computadora y la vuelve a la suya una vez que lo haya hecho.

4

Si está en Windows, una opción es ejecutar las pruebas en una cuenta de usuario diferente. Esto significa que el navegador y el servidor de Java no serán visibles para su propia cuenta.

54

En Linux, puede ejecutar WebDriver en una pantalla sin cabeza (virtual) para ocultar el navegador. Esto se puede hacer con Xvfb (X framebuffer virtual).

Puede controlar Xvfb directamente desde el código Python usando xvfbwrapper: https://github.com/cgoldberg/xvfbwrapper

código Python para ejecutar sin cabeza sería el siguiente:

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() 

instalar las dependencias en Debian/Ubuntu:

$ sudo apt-get install xvfb 
$ pip install xvfbwrapper 
+2

Funcionó como magia en Ubuntu . Gracias por esto. – iChux

+0

Buena solución y gracias por su código. – SuB

+0

Cuando el código se ejecuta en un navegador virtual, ¿puedo continuar usando mi PC normalmente mientras se ejecuta el script de interacción del navegador? – Mugen

3

Así es como corro mis pruebas con maven en un escritorio Linux (Ubuntu). Me cansé de no poder trabajar con el controlador de web de firefox, siempre enfocándome.

He instalado XVFB

XVFB plazo -a MVN instalación limpia

Eso es todo

+0

Esta es, con frecuencia, la forma más fácil de asegurarse de que xvfb se esté ejecutando y sea utilizado por Selenium/WebDriver. –

12

En Linux, puede ejecutar el navegador de prueba en una pantalla virtual. Necesitará el paquete xvfb para crear un servidor X virtual. En distribuciones basadas en Debian, basta con ejecutar

sudo apt-get install xvfb 

Hay una buena herramienta ephemeral-x.sh que configurar de modo conveniente para ejecutar cualquier comando en la pantalla virtual. .

+0

'wget https: // raw.github.com/jordansissel/xdotool/master/t/efhemeral-x.sh' – pic

+0

URL corregida, gracias. – pixelistik

+0

Este script tiene un problema de cotización. Si digo ./ephemeral-x.sh foo '*' dice "Running: foo" seguido de los contenidos de mi directorio. –

0

Hay un proyecto relacionado con PhantomJS llamado GhostDriver, que está destinado a ejecutar instancias de PhantomJS en una cuadrícula de selenio utilizando el protocolo JSON de cable de webdriver. Eso es probablemente lo que está buscando, aunque esta pregunta ya tiene 4 años.

17

Logré ocultar fácilmente la ventana del navegador.

Just install PhantomJS. A continuación, cambie esta línea:

driver = webdriver.Firefox() 

a:

driver = webdriver.PhantomJS() 

El resto de su código no tendrá que ser cambiado y no hay ningún navegador se abrirá. Para fines de depuración, use driver.save_screenshot('screen.png') en diferentes pasos de su código.

+5

Vale la pena mencionar que debes poner la ruta del PhantomJs.exe para que funcione. ejemplo 'driver = webdriver.PhantomJS (r" C: \\ phantomjs \ phantomjs.exe ")' –

+1

Sí, pero solo en Windows. –

+0

no necesita especificar la ubicación del binario, siempre que se pueda encontrar desde la variable de entorno $ PATH de su entorno. –

0

En MacOSX, no he podido ocultar la ventana del navegador, pero al menos he descubierto cómo moverlo a una pantalla diferente para que no interrumpa tanto mi flujo de trabajo. Mientras que Firefox se está ejecutando pruebas, simplemente controlar clic en su icono en el Dock, seleccione Opciones, y asignar a Display 2.

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 E2E corriendo desarrollador que lógicamente va a desovar navegadores .En un entorno de desarrollo, resulta molesto ocuparse de la ventana que sigue apareciendo y de la que puede interactuar accidentalmente haciendo que falle la prueba.

1

En muchos casos, PhantomJS no se ajustará completamente a sus necesidades, me gustaría detallar la opción de cromo sin cabeza que se menciona en la respuesta de Dave Hunt.

cromo 57 acaba de lanzar esta función. Puede usarlo pasando el indicador sin cabeza a través de ChromeDriver, para obtener más información, consulte la discusión en this question

Cuestiones relacionadas