Sto usando Selenium RC per automatizzare alcune operazioni del browser ma voglio che il browser sia invisibile. È possibile? Come? Che mi dici di Selenium Grid? Posso nascondere anche la finestra Selenium RC?
Sto usando Selenium RC per automatizzare alcune operazioni del browser ma voglio che il browser sia invisibile. È possibile? Come? Che mi dici di Selenium Grid? Posso nascondere anche la finestra Selenium RC?
Risposte:
Ci sono alcune opzioni:
È possibile utilizzare Selenium Grid in modo che il browser venga aperto su una macchina completamente diversa (o macchina virtuale) a cui è possibile connettersi tramite VNC o Connessione desktop remoto se si desidera vedere il browser. Inoltre, un'altra opzione: se esegui un processo in primo piano Jenkins su quel server remoto, può eseguire il tuo progetto di test sul desktop.
Puoi eseguire Selenium "headless" su Linux in XVFB. Non ho mai provato a farlo e dubito che ne valga davvero la pena. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Puoi avvolgere Selenium RC in un servizio Windows. http://support.microsoft.com/kb/137890 . Tranne che i vincoli delle autorizzazioni sulle versioni successive di Windows probabilmente impediranno a Selenium di accedere al desktop come Windows 2000 ci permetteva di fare.
Un'altra opzione potrebbe essere quella di utilizzare qualcosa come WebDriver HTMLUnitDriver, che non avvia un browser "reale". http://code.google.com/p/webdriver/ . Inoltre c'è un'opzione PhantomJS e un "Chrome headless" che puoi usare.
Ovviamente c'è anche la possibilità di utilizzare un servizio come SauceLabs, dove puoi far eseguire i tuoi test nel cloud. Dopo che i test sono stati completati, puoi guardarne un video in esecuzione.
Su Linux, puoi eseguire WebDriver in un display headless (virtuale) per nascondere il browser. Questo può essere fatto con Xvfb (X virtual framebuffer).
Puoi controllare Xvfb direttamente dal codice Python usando xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Il codice Python per l'esecuzione senza testa sarebbe simile a questo:
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()
Installa le dipendenze su Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Sono riuscito facilmente a nascondere la finestra del browser.
Basta installare PhantomJS . Quindi, modifica questa riga:
driver = webdriver.Firefox()
per:
driver = webdriver.PhantomJS()
Il resto del codice non dovrà essere modificato e non si aprirà alcun browser. A scopo di debug, utilizzare driver.save_screenshot('screen.png')
in diversi passaggi del codice.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+1 per Selenium RC come servizio Windows.
Per aver eseguito i test completamente nascosti, penso che tu non abbia molte soluzioni se sei su Windows.
Cosa farei per dedicare un computer nella tua LAN a essere online tutto il tempo e avere un server RC al selenio in esecuzione. Quindi usi l'IP di quel computer invece di localhost per eseguire i tuoi test. Per esempio:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(considerando che è l'ip del computer che esegue il server).
Avendo quella configurazione, esegui i tuoi test sul tuo computer, i browser e la finestra del server RC sono in un altro computer e torni al tuo una volta fatto.
Su Linux, puoi eseguire il tuo browser di prova su un display virtuale. Avrai bisogno del xvfb
pacchetto per creare un server X virtuale. Su distribuzioni basate su Debian, basta eseguire
sudo apt-get install xvfb
C'è un simpatico strumento ephemeral-x.sh
che imposterà comodamente qualsiasi comando da eseguire sul display virtuale. Scaricalo e rendilo eseguibile:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Quindi puoi semplicemente usarlo per avviare il server Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Tutte le finestre del browser create da Selenium ora utilizzeranno il display virtuale e saranno invisibili all'utente.
Se utilizzi Windows, un'opzione è eseguire i test con un account utente diverso . Ciò significa che il browser e il server Java non saranno visibili al tuo account.
È così che eseguo i miei test con Maven su un desktop Linux (Ubuntu). Mi sono stufato di non poter lavorare con il webdriver di Firefox sempre a fuoco.
Ho installato xvfb
xvfb-run -a mvn clean install
Questo è tutto
In molti casi PhantomJS non soddisferà completamente le tue esigenze, vorrei approfondire l'opzione cromata senza testa 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 questa domanda
Esiste un progetto correlato a PhantomJS chiamato GhostDriver , che ha lo scopo di eseguire istanze di PhantomJS in una griglia di selenio utilizzando il protocollo JSON di filo webdriver. Questo è probabilmente quello che stai cercando, anche se questa domanda ha 4 anni ormai.
Su MacOSX, non sono stato in grado di nascondere la finestra del browser, ma almeno ho capito come spostarla su un display diverso in modo da non interrompere così tanto il mio flusso di lavoro. Mentre Firefox esegue i test, fai clic tenendo premuto il tasto Ctrl sulla sua icona nel dock, seleziona Opzioni e Assegna a Display 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
A proposito, questa è una funzionalità richiesta da qualsiasi sviluppatore che esegue e2e che logicamente genererà i browser. In un ambiente di sviluppo è fastidioso gestire la finestra che continua a comparire e con la quale puoi interagire accidentalmente facendo fallire il test.
L'uso di Chrome headless sarebbe la soluzione migliore, oppure potresti postare direttamente sul sito per interagire con esso, il che risparmierebbe molta potenza di calcolo per altre cose / processi. Lo uso quando collaudo i robot di automazione web che cercano scarpe su più siti utilizzando elementi pesanti della CPU, maggiore è la potenza che risparmi e più semplice è il tuo programma, più facile è eseguire più processi contemporaneamente con muhc maggiore velocità e affidabilità.