2015-08-27 9 views
21

Sto costruendo un'app console che si connetterà a diversi computer nella rete e catturerà schermate del browser di una pagina web.
Utilizzo di Selenium 2.47.1 per configurare i nodi server &. L'app della console viene eseguita nel PC configurato come hub di selenio.
Lo screenshot va bene in firefox, chrome, ovvero dal computer hub.
Lo screenshot va bene anche in Firefox nel pc remoto.
Ma con IE restituisce un'immagine nera.
Sia i computer hub che i nodi funzionano su Windows 7 64-bit, hanno IE11. Sto usando l'IEDriver a 64 bit in entrambi i PC. Il computer del nodo non è bloccato.L'acquisizione di uno screenshot di IE restituisce un'immagine nera

using OpenQA.Selenium; 
using OpenQA.Selenium.IE; 
using OpenQA.Selenium.Remote; 
using OpenQA.Selenium.Support.UI; 

static void Main(string[] args) 
{ 
    IWebDriver NewDriver = null; 
    using (NewDriver = new RemoteWebDriver(new Uri("http://172.165.10.111/wd/hub"), DesiredCapabilities.InternetExplorer())) 
    { 
     if (NewDriver != null) 
     { 
     NewDriver.Navigate().GoToUrl("http://www.google.com"); 
     NewDriver.Manage().Window.Size = new Size(1804, 1096); 
     Screenshot ss = ((ITakesScreenshot)NewDriver).GetScreenshot(); 
     ICapabilities capabilities = ((RemoteWebDriver)NewDriver).Capabilities; 
     ss.SaveAsFile(@"C:\Path\123.png", ImageFormat.Png); 
     NewDriver.Quit(); 
     } 
    } 
} 

risposta

-1

di Windows a volte causare schermi neri perché la macchina/desktop non era in uso.

+0

Il desktop remoto non è bloccato nel mio caso – Qwerty

0

si consiglia di provare a rimuovere sotto la linea

//NewDriver.Manage().Window.Size = new Size(1804, 1096); 

massimizzare il vostro browser.

NewDriver.Manage().Window.Maximize(); 
+0

Nessuno dei due ha funzionato – Qwerty

2

Sembra che questo potrebbe essere un problema noto con la configurazione:

https://code.google.com/p/selenium/issues/detail?id=3536

Da quanto @ShubhasmitGupta detto sopra, lo fa apparire come il driver IE distribuisce le immagini nero-schermo quando il il desktop è bloccato (presumo che questo abbia qualcosa a che fare con DWM/Explorer che non esegue il rendering delle finestre).

C'è a workaround che coinvolge non bloccare il computer di destinazione quando ci si connette tramite RDP. In sostanza, si crea un file didisconnect.bat con il seguente contenuto:

tscon rdp-tcp#0 /dest:console 

non sono sicuro esattamente quando questo dovrebbe essere eseguito, ma il concetto è quello di evitare che il computer di prova rimanere chiusi durante la connessione tramite Desktop remoto. Se ciò aiuta, bene; Non sono stato in grado di testare da solo la soluzione alternativa e capire come impostarlo. Forse qualcun altro può scrivere una risposta più concisa.

+0

Il pc remoto non è bloccato e non trovo la soluzione alternativa completa o usalo nel mio codice C# – Qwerty

0

Ho avuto un sospetto subdolo che IE è stato eseguito il rendering con DirectX per qualche tempo e this article certamente sembra indicare che questo è il caso ... il che spiegherebbe perché si avrebbe problemi come afferra schermo in base GDI ha vinto' t lavorare con superfici DirectX.

sto dicendo questo è un assoluto ... solo un'intuizione

0

Ho avuto lo stesso problema un po 'indietro, e anche se non capisco del tutto il problema era in sostanza che il selenio processo in esecuzione era in esecuzione su un account di sistema e quindi la GUI di IE era visibile solo nella sessione 0, mentre la sessione 1 mostrava solo una schermata nera.

La soluzione che ha funzionato per me è stato quello di creare un account utente locale sul host remoto, tenere l'utente in modo permanente firmato e sbloccato in modo che abbiano un desktop interattivo disponibile, quindi eseguire il selenio app/test come quell'utente. So che non è l'ideale, ma dato che avevamo dozzine di vecchie scatole in giro, non è stato male utilizzarne uno come server di test dedicato. Spero che aiuti un po '!

Spiacente, non abbastanza rappresentante per aggiungere questo come commento.

+0

Puoi usare Jenkins nello scenario descritto? Se è così, come avete fatto? – AudioDroid

10

È perché lo schermo è bloccato o uno screensaver è in esecuzione.

Sarà necessario disattivare lo screensaver e configurare Windows in modo che non si blocchi mai quando non è in uso. Per disattivare il salvaschermo:

  • Fare clic sul pulsante Start.
  • Fare clic su Pannello di controllo.
  • Nella casella di ricerca, digitare screen saver.
  • Fare clic su Attiva o disattiva screen saver.

Quindi modificare le impostazioni dello screensaver. Assicurati di aver deselezionato "Alla ripresa, visualizza la schermata di accesso".

Mentre ci si trova nel pannello di controllo, probabilmente vale la pena controllare le opzioni di alimentazione e assicurarsi che la macchina non vada in standby o si spenga dopo un periodo di tempo prestabilito.

Si desidera inoltre utilizzare VNC o assistenza remota per accedere alla GUI. Se RDP in esso bloccherà lo schermo per l'utente locale che è attualmente connesso e di nuovo bloccherà lo schermo quando si disconnette.

Infine, non utilizzare il driver IE a 64 bit, si dovrebbe usare il 32 bit. Nessuno esegue la versione 64 bit di IE (anche se hanno una macchina con 64 bit).

****** Modifica L'aggiunta di un po 'più di informazioni da una fonte credibile e rispettabile ******

Qui di seguito è un link ad un post sul forum degli utenti di selenio in cui Jim Evans (lo sviluppatore che ha scritto i binari IEDriver) spiega questo:

http://selenium.10932.n7.nabble.com/IE-Screenshots-are-black-when-not-connected-via-Remote-Desktop-to-the-VM-hosting-an-IE-Node-td37004.html

questa citazione, in particolare, circa la presa le immagini di quando è stato scollegato da un'istanza RDP:

È una limitazione nota. Non c'è alcuna soluzione nota. Protesta con Microsoft. Sono quelli che rendono l'API PrintWindow (che è l'API corretta da utilizzare quando si acquisiscono schermate) si comportano in questo modo. Oppure, o se scopri un modo per farlo funzionare, sei il benvenuto a inviare una patch.

Egli spiega come il codice screenshot funziona in modo più dettagliato sul suo blog qui:

http://jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html

In particolare:

Il driver IE prende screenshot utilizzando la funzione API PrintWindow. PrintWindow può solo prendere uno screenshot della porzione visibile di qualsiasi finestra data , il che significa che per ottenere uno screenshot a pagina intera (come richiesto dall'API WebDriver), la finestra deve essere grande di dimensioni sufficiente per visualizzare il intera pagina senza barre di scorrimento. Tuttavia, Windows non consente di ridimensionare la finestra più grande della risoluzione dello schermo visibile di . Quando chiediamo a IE di ridimensionare se stesso, un messaggio WM_GETMINMAXINFO viene inviato su un evento di ridimensionamento in modo che l'IE possa calcolare la dimensione di una finestra. Intercettando quel messaggio con un hook e modificando i valori massimi, possiamo indurre IE a pensare che una finestra possa essere dimensionata su una dimensione maggiore della risoluzione dello schermo, altrimenti consentire.

1

aprire il Service Control Manager - Si può fare windowskey + R (run) e digitare services.msc e ha colpito <ENTER> e si metterà a start up.

Trova il servizio e fai clic con il pulsante destro del mouse e scegli proprietà dal menu di scelta rapida.

Consenti al servizio di interagire col desktop

Ora, selezionare la scheda Connessione. Si desidera assicurarsi che la casella di controllo sia selezionata per "Consenti al servizio di interagire con il desktop".

Si può vedere nell'immagine qui sotto.

Nota: Non ho quel servizio quindi ne ho scelto un altro nell'immagine di esempio.

enter image description here

0

Forse un indizio interessante ...

... lavorare con selenio 2.47.x e 2.52.0 Jenkins, RDP e IE 11 in modalità IE 7 (impostazione da sito web) sulla server Win 2008. Oltre a questo, devo schermi connessi al mio PC.

Se sono staccato dal Windows Server (non disconnesso) Ho due situazioni:

Il prog JAVA sul server produce scatole nere o screenshoots reali. La differenza è solo un marker nelle opzioni RDP nella parte display sulla configurazione RDP locale del mio client (Win 7).

Non ho un display parlato inglese quindi spero che la traduzione possa andare bene.

Il particolare configurazione è: "con tutti i monitor da sessione remota"

Se questo indicatore è impostato, ottengo schermo vero e germogli. Se questo non è impostato, ho delle scatole nere. Non riesco a spiegarne il motivo, ma funziona in questo modo ...

Problemi correlati