2009-09-13 17 views
88

Uso Selenium RC per automatizzare alcune operazioni del browser ma voglio che il browser sia invisibile. È possibile? Come? E riguardo la griglia del selenio? Posso nascondere anche la finestra di Selenium RC?È possibile nascondere il browser in Selenium RC?

+0

Potrebbe non essere accettabile, ma come non potresti semplicemente spostare il browser fuori dallo schermo (usando l'automazione dell'interfaccia utente di Windows?) come posizionare la finestra su (-10000, -10000)? – BrainSlugs83

+2

Poiché questa domanda è vecchia ora, permettimi di reindirizzarti verso una risposta aggiornata corretta [in fondo a questa pagina] (http://stackoverflow.com/a/23898054/1515819). –

risposta

83

Ci sono alcune opzioni:

  • Si potrebbe utilizzare selenio griglia in modo che il browser si apre su una macchina completamente diversa (o macchina virtuale) che si può quindi collegarsi a via VNC o Remote Desktop Connection se volevi vedere il browser. Inoltre, un'altra opzione: se si esegue un processo in primo piano Jenkins su quel server remoto, è possibile eseguire il progetto di test sul desktop.

  • È possibile eseguire Selenium 'headless' su Linux in XVFB. Non ho mai provato a farlo e dubito ne valga davvero la pena. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • È possibile avvolgere Selenium RC in un servizio di Windows. http://support.microsoft.com/kb/137890. Tranne che i vincoli delle autorizzazioni sulle versioni successive di Windows probabilmente impediranno al Selenium di accedere al desktop come Windows 2000 usato per permetterci di farlo.

  • Un'altra opzione sarebbe utilizzare qualcosa come WebDriver HTMLUnitDriver, che non avvia un browser "reale". http://code.google.com/p/webdriver/. Inoltre, è disponibile un'opzione PhantomJS e un 'Chrome senza testa' che è possibile utilizzare.

  • Ovviamente c'è anche la possibilità di utilizzare un servizio come SauceLabs, dove è possibile eseguire i test nel cloud. Una volta completati i test, puoi guardare un video in esecuzione.

+0

Ecco le istruzioni su come creare un file bat per installare il servizio: http://brantleytec.blogspot.com/2012/11/selenium-hub-and-node-as-windows-service.html –

13

+1 per Selenium RC come servizio di Windows.

Per avere i test eseguiti completamente nascosti, penso che non si abbiano molte soluzioni se si è su Windows.

Cosa farei per dedicare un computer nella LAN a essere sempre in linea e a far funzionare un server RC di selenio. Quindi usi l'IP di quel computer invece di localhost per eseguire i tuoi test. Ad esempio:

browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com") 

(considerando che questo è l'IP del computer che esegue il server).

Avendo questa configurazione, si eseguono i test nel proprio computer, i browser e la finestra del server RC si trovano su un altro computer e si torna al proprio una volta terminato.

4

Se si utilizza Windows, un'opzione è eseguire i test con un altro account utente. Ciò significa che il browser e il server java non saranno visibili al tuo account.

54

Su Linux, è possibile eseguire WebDriver in un display (virtuale) senza testa per nascondere il browser. Questo può essere fatto con Xvfb (X framebuffer virtuale).

È possibile controllare Xvfb direttamente dal codice Python utilizzando xvfbwrapper: https://github.com/cgoldberg/xvfbwrapper

codice Python per l'esecuzione senza testa sarebbe simile a questa:

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

installare le dipendenze su Debian/Ubuntu:

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

Ha funzionato come per magia su Ubuntu . Grazie per questo. – iChux

+0

Bella soluzione e grazie per il tuo codice. – SuB

+0

Quando il codice viene eseguito in un browser virtuale, posso continuare a utilizzare normalmente il mio PC mentre viene eseguito lo script di interazione del browser? – Mugen

3

Ecco come eseguo i miei test con Maven su un desktop Linux (Ubuntu). Mi sono stufato di non essere in grado di lavorare con il webdriver firefox sempre focalizzato.

ho installato Xvfb

Xvfb conduzione -a mvn clean install

Ecco fatto

+0

Questo è spesso il modo più semplice per garantire che xvfb sia in esecuzione e utilizzato da Selenium/WebDriver. –

12

Su Linux, è possibile eseguire il browser di test su un display virtuale. È necessario il pacchetto xvfb per la creazione di un server X virtuale. Su distribuzioni basate su Debian, basta eseguire

sudo apt-get install xvfb 

C'è un bel strumento ephemeral-x.sh che comodamente impostare qualsiasi comando da eseguire sul display virtuale. Download it e renderlo eseguibile:

wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh 
chmod +x ephemeral-x.sh 

allora si può semplicemente usare per avviare il server Selenio:

./ephemeral-x.sh java -jar selenium-standalone.jar 

Tutte le finestre del browser creato da Selenio sarà ora utilizzare il display virtuale e sarà invisibile a voi .

+0

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

+0

corretti URL, grazie. – pixelistik

+0

Questo script ha un problema di quotatura. Se dico ./ephemeral-x.sh foo '*' dice "Running: foo" seguito dal contenuto della mia directory. –

0

Esiste un progetto correlato PhantomJS denominato GhostDriver, che è destinato all'esecuzione di istanze PhantomJS in una griglia selenio utilizzando il protocollo JSON del webdriver wire. Questo è probabilmente quello che stai cercando, anche se questa domanda ora ha 4 anni.

17

Sono riuscito facilmente a nascondere la finestra del browser.

Solo install PhantomJS. Quindi, modificare questa riga:

driver = webdriver.Firefox() 

a:

driver = webdriver.PhantomJS() 

Il resto del codice non avrà bisogno di essere cambiato e si aprirà nessun browser. Per scopi di debug, utilizzare driver.save_screenshot('screen.png') in diversi passaggi del codice.

+5

Vale la pena ricordare che è necessario inserire il percorso di PhantomJs.exe affinché funzioni. esempio 'driver = webdriver.PhantomJS (r" C: \\ phantomjs \ phantomjs.exe ")' –

+1

Sì, ma solo su Windows. –

+0

non è necessario specificare la posizione del file binario finché è possibile trovarlo dalla variabile di ambiente $ PATH dell'ambiente. –

0

Su MacOSX, non sono stato in grado di nascondere la finestra del browser, ma almeno ho capito come spostarlo su un display diverso in modo che non interrompa il mio flusso di lavoro così tanto. Mentre Firefox è in esecuzione test, basta controllare clic sulla sua icona nel Dock, selezionare Opzioni e assegnare 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 

Tra l'altro questa è una caratteristica necessaria per qualsiasi e2e eseguendo sviluppatore che logicamente si riproducono i browser .In un ambiente di sviluppo è fastidioso occuparsi della finestra che continua a comparire e di ciò che si può interagire accidentalmente facendo fallire il test.

1

In molti casi PhantomJS non si adatta perfettamente alle vostre esigenze, vorrei approfondire l'opzione senza testa cromata menzionata nella risposta di Dave Hunt.

chrome 57 ha appena lanciato questa funzione. Puoi usarlo passando il flag --headless tramite ChromeDriver, per maggiori informazioni vedi la discussione in this question

Problemi correlati