11

Possiedo un'app Web di Azure che desidero utilizzare per eseguire lo screening di un sito Web quando chiamo un'azione su un controller, ad esempio.Esecuzione del selenio nell'app Web di Azure

var driver = new PhantomJSDriver(); 
driver.Url = "http://url.com"; 
driver.Navigate(); 
var source = driver.PageSource; 
var pathElement = driver.FindElementByXPath("//table[@class='someclassname']"); 

string innerHtml = ""; 
IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
if (js != null) 
{ 
    innerHtml = (string)js.ExecuteScript("return arguments[0].innerHTML;", pathElement); 
} 
return innerHtml; 

Questo funziona bene a livello locale, ma quando ho caricato al mio Azure Web App, ottengo questo errore

Impossibile avviare il servizio di driver su http://localhost:51169/

Presumo che ciò deve fare con i firewall poiché devo approvare PhantomJS nelle mie impostazioni del firewall la prima volta che viene eseguita l'app. La mia domanda è: come faccio a far funzionare questo in Azure? È persino possibile, o devo configurarlo come alcuni Unit Test ed eseguirlo da Visual Studio?

+2

Hai mai trovato una soluzione al tuo problema? Perché sono nella stessa barca. – Martin

+0

Sei mai riuscito a farlo funzionare? Che ne dici di te @Martin – paqogomez

risposta

6

PhantomJS non funziona oggi nella sandbox in cui vengono eseguite le app Web di Azure. Vedere lo wiki per un elenco di cose che notoriamente non funzionano al momento, oltre a molte altre informazioni sulla sandbox.

+0

Vedo, sai qualcosa di simile a ChomeDriver funziona in Azure? –

+1

Mi spiace, non lo so, ma potrebbe valere la pena provarci. Sfortunatamente, le restrizioni GDI bloccano molti scenari in questo spazio. –

+0

Bene, grazie per le informazioni, lo proverò. –

0

Inserirò qui questo snippet che funziona su Azure. E 'comunque lontano da utilizzabile in produzione come continuo a ricevere errori di connessione casuali come:

Impossibile connettersi al server messaggio interno remoto: Impossibile connettersi al messaggio interno server remoto: Un tentativo è stato fatto per l'accesso un socket vietato dalle sue autorizzazioni di accesso

Lo stesso codice funziona perfettamente su un ambiente di applicazione di console o Windows.

PhantomJSDriver driver = null; 
     PhantomJSDriverService service; 

     ServicePointManager.ServerCertificateValidationCallback = new 
      RemoteCertificateValidationCallback 
      (
       delegate { return true; } 
      ); 

     int retry = 0; 

     while (driver == null && retry < 3) 
     { 
      try 
      { 
       service = PhantomJSDriverService.CreateDefaultService(); 
       var uri = service.ServiceUrl; 
       var port = service.Port; 
       service.LocalToRemoteUrlAccess = true; 
       var ghostDriverPath = service.GhostDriverPath; 
       service.HideCommandPromptWindow = true; 
       service.Start(); 

       var options = new PhantomJSOptions(); 
       driver = new PhantomJSDriver(service, options); 
      } 
      catch (Exception ex) 
      { 
       if (driver != null) 
       { 
        driver.Close(); 
        driver.Quit(); 
        driver = null; 
       } 
       Thread.Sleep(retry * 1500); 

       ServiceAudit.Default.TraceDebug($"Starting web driver failed on {retry} try"); 
      } 
      retry++; 
     } 

     if (driver == null) 
     { 
      ServiceAudit.Default.TraceError($"Web driver could not be started"); 
     } 

     return driver; 
Problemi correlati