È possibile nascondere il browser in Selenium RC?


92

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?


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

2
Poiché questa domanda è vecchia ora, lascia che ti reindirizzi verso una risposta adeguata e aggiornata in fondo a questa pagina .
Stéphane Bruckert

Risposte:


87

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.


Ecco le istruzioni su come creare un file bat per installare il servizio: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard

58

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

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

Le risorse sono prese, la tua macchina diventerà più lenta!
Tim Long

22

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.


5
Vale la pena ricordare che è necessario inserire il percorso di PhantomJs.exe affinché funzioni. esempiodriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG

1
Sì, ma solo su Windows.
Stéphane Bruckert

1
non è necessario specificare la posizione del binario fintanto che può essere trovato dalla variabile di ambiente $ PATH del proprio ambiente.
Corey Goldberg

13

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


12

Su Linux, puoi eseguire il tuo browser di prova su un display virtuale. Avrai bisogno del xvfbpacchetto per creare un server X virtuale. Su distribuzioni basate su Debian, basta eseguire

sudo apt-get install xvfb

C'è un simpatico strumento ephemeral-x.shche 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.


Questo script presenta un problema di citazione. Se dico ./ephemeral-x.sh pippo '*' si dice "In esecuzione: pippo" seguito dal contenuto della mia directory.
Nick Retallack

4

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.


3

È 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


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

1

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


0

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.


0

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.


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

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.


0

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.