2015-05-01 10 views
8

Voglio usare il goniometro su Java e non su Node.js. È possibile utilizzare Protractor con Java o Python? Non vogliamo aggiungere un'altra tecnologia per testare e vogliamo utilizzare le tecnologie esistenti.Utilizzare il rapportatore con Java

+4

Benvenuti a SO! Dato che sei nuovo di SO, potresti leggere le seguenti pagine di aiuto: ["Come faccio a fare una buona domanda?"] (Http://stackoverflow.com/help/how-to-ask) e ["How per creare un esempio Minimo, Completo e Verificabile "] (http://stackoverflow.com/help/mcve) – Jaap

+3

Ho già letto loro.grazie :) – user3762901

risposta

8

Sfortunatamente non si ha molta scelta in proposito, poiché Protractor è un framework di test JavaScript per AngularJS, è distribuito tramite Node.js.

Non vogliamo aggiungere un'altra tecnologia per testare e utilizzare le tecnologie esistenti.

Il goniometro è personalizzato per applicazioni angolariJS. Quindi, se la tua applicazione è stata creata utilizzando AngularJS, il goniometro sarà d'aiuto poiché ha un supporto integrato per il caricamento e le azioni della pagina di AngularJS.

Se l'applicazione non è costruita su Angular, è possibile utilizzare Selenium WebDriver sopra qualsiasi altra lingua preferita.

Selenium fornisce agli utenti la documentazione sull'uso di Python come test di media scrittura, ulteriori informazioni su questo here.

3

Per aggiungere qualcosa alla risposta di Tom riportata sopra, è anche possibile testare applicazioni/siti Web non angolari con Goniometro. Ma non c'è ancora modo, puoi scrivere i test dei goniometri usando Java o Python dato che il nucleo del Protractor è costruito su Javascript (node.js) ed è puramente Javascript. Spero che sia d'aiuto.

1

Il modo migliore per utilizzare il goniometro è, avere i test dei goniometri scritti separatamente in javascript e chiamare quei test da java/python quando richiesto. Questo è quello che stiamo facendo attualmente!

+1

Puoi dare un esempio di come farlo per favore? – alannichols

3

Il goniometro è una libreria JS, quindi non è possibile eseguirlo in Java e testare le app angolari senza Goniometro è difficile perché il codice del test deve attendere il completamento dei processi angolari prima che si verifichino interazioni come il clic.

Fortunatamente, Angular ha facilitato l'identificazione al termine dell'elaborazione.

C'è una funzione JS che richiede una richiamata e avviserà l'utente quando l'angolare sarà pronto.

angular.getTestability("body").whenStable(callback); 

NOTA: questo funziona con Angular 1.4.8. Alcune altre versioni di Angular hanno un metodo diverso che è simile.

È possibile richiamare il metodo di testabilità dal codice di test Java utilizzando il seguente metodo semplice o qualcosa di simile.

private void waitForAngular() { 

    final String script = "var callback = arguments[arguments.length - 1];\n" + 
      "var rootSelector = \'body\';\n" + 
      "var el = document.querySelector(rootSelector);\n" + 
      "\n" + 
      "try {\n" + 
      " if (angular) {\n" + 
      "  window.angular.getTestability(el).whenStable(callback);\n" + 
      " }\n" + 
      " else {\n" + 
      "  callback();\n" + 
      " }\n" + 
      "} catch (err) {\n" + 
      " callback(err.message);\n" + 
      "}"; 

    ((JavascriptExecutor) driver).executeAsyncScript(script, new Object[0]); 
} 

chiamata waitForAngular() prima di interagire con il conducente con un metodo come clic.

Si potrebbe desiderare un diverso rootSelector da "body" e si potrebbe voler lanciare un errore se l'angolare non esiste ma questo funziona bene per le mie esigenze.

Il goniometro fornisce altri selettori che possono semplificare il collaudo di un'app Angolare, ma personalmente utilizzo i selettori ID e Classe, quindi non ne ho bisogno.

5

Esiste già una libreria in Java per l'automazione degli oggetti Angular.La sua costruito sulla base goniometro chiamato "ngWebDriver"

+0

Eccellente! Iscritto a ngWebDriver in github. Qualche idea quando il lato Angular2 sarà pronto? – bobanahalf

+0

@bobanahalf Non ho avviato alcun colloquio con il proprietario del repository Paul Hammant per quanto riguarda il supporto di Angular2. Ma sembra che l'abbia già iniziato (indovinando) – Manoj

2

A partire dal 2017, ho trovato queste librerie goniometro per Java:

  • jProtractor - Lo sviluppo è un po 'inattivo ma ho provato a lavorare. Fare clic su here per ulteriori dettagli.
  • ngWebDriver - Sviluppato da Paul Hammant (co-creatore di Selenium). Attualmente in sviluppo attivo con una buona documentazione.

Snippet di codice:

<input type="text" ng-model="startBalance" placeholder="Enter your current balance" class="ng-pristine ng-valid">  

// jProtractor 
WebElement startBalanceField = driver.findElement(NgBy.model("startBalance")); 

// ngWebDriver 
WebElement startBalanceField = driver.findElement(ByAngular.model("startBalance")); 
Problemi correlati