XVFB e Selenium su EC2 - Impossibile visualizzare l'interfaccia utente di Chrome su VNC Viewer

Aug 20 2020

I miei test headless Selenium vengono attivati ​​dal server Jenkins ed eseguiti in EC2-Ubuntu. Voglio vedere il test dal vivo su Chrome, quindi ho installato il plugin Xvfb su Jenkins.

Su EC2 ho installato Xvfb. Quando inizio a eseguire la build, il mio test inizia l'esecuzione e vedo i log seguenti:

Xvfb /usr/bin/Xvfb :1 -fbdir /var/lib/jenkins/xvfb 27-..fbdir13700092919317283985

Parsing POMs
Established TCP socket on 30810

e vedo che il test viene eseguito correttamente.

Ora eseguo SSH su EC2 dal terminale Mac di

ssh -L 5901:localhost:5901 [email protected]

Quindi eseguo:

qa_user@jenkins-it:~$ export DISPLAY=: 30810` (Port number from Jenkins logs above) qa_user@jenkins-it:~$ vncserver "$DISPLAY" -geometry 1280x1024 New 'X' desktop is jenkins-it: 30810 Starting applications specified in /home/qa_user/.vnc/xstartup Log file is /home/qa_user/.vnc/jenkins-it: 30810.log qa_user@jenkins-it:~$ x11vnc --listen 0.0.0.0 -rfbport 5901 -display : 30810

Questo avvia XVFB e vedo:

Ora, quando mi collego da Mac a localhost: 5901 da VNCviewer, vengo portato sul desktop di Ubuntu.

Ma non vedo Chrome aprirsi anche se il test è in esecuzione e vedo i log di test su Jenkins.

Sono anche in grado di utilizzare Chrome tramite VncViewer.

Cosa mi manca qui? Ho provato molte istruzioni di configurazione di Xvfb e ho provato a farlo bene da un mese ormai. Ecco alcune domande che ho posto:

https://askubuntu.com/questions/1262925/run-selenium-tests-on-ec2-with-gui?noredirect=1#comment2139716_1262925

Come visualizzare i test Selenium headless live su EC2-Ubuntu utilizzando vncserver e xvfb

https://sqa.stackexchange.com/questions/45376/looking-for-a-solution-to-run-selenium-tests-on-ec2-with-gui/45380#45380

Tanta strada fino a qui e ora Stackoverflow è la mia ultima risorsa. Per favore aiuto.

Risposte

1 Afsal Sep 21 2020 at 05:52

Ho trovato la soluzione a questo da solo. Per chiunque abbia lo stesso problema:

Quello che ho sbagliato è che ho usato driver = new ChromeDriver(options);nel mio codice invece didriver = new RemoteWebDriver(new URL("http://my.aws.ip:4444/wd/hub"), options);

Dopo aver apportato questa modifica, ho scaricato selenium-server-standalone.jar in EC2.

Quindi, prima di iniziare il test, ho eseguito ssh -X [email protected] su EC2 ed eseguito:

Xvfb :99 -ac -screen 0 1280x1024x24 &
export DISPLAY=:99
java -jar /home/qa_user/Selenium/selenium-server-standalone.jar

Ora, esegui il test, parallelamente ho aperto un nuovo terminale e ho fatto:

ssh -L 5900:localhost:5900 [email protected]

Una volta impostato lo schermo, ho fatto:

x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :99 -auth /var/run/lightdm/root/:0  -rfbport 5900

Quindi, apri il visualizzatore VNC, connettiti a localhost: 5900 e vedrai l'esecuzione di Chrome.

Successivamente puoi spostare tutto questo in Jenkins pre-build eseguire la shell se necessario :)

Maggiori dettagli sulla mia ultima risposta: XVFB su Jenkins che si connette a un display sbagliato. Il display mostra una schermata nera