2015-01-19 3 views
7

Ho un problema con i miei test end2end. A volte passano senza problemi ma per due terzi del tempo non riescono. Io uso goniometro con seguente codice:Il goniometro attende isElementPresent e fa clic sull'elemento atteso non riesce

describe('Admin dashboard delete Exports', function() { 
     it('create export', function() { 
      browser.get(e2GUrl + '/admin/studies'); 
      ptor.wait(function() { 
       return ptor.isElementPresent(by.id('export')); 
      }, 5000, 'wait for study list page to be loaded.'); 
      element(by.id('export')).click(); 
     }); 

HTML (nota che questo elemento è visibile e non nascosto da NG-IF o ng-spettacolo):

<ul> 
    <li data-ng-repeat="study in studies"> 
     <div data-ng-controller="ExportController" class="btn-group"> 
      <a id="export" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"> 
      <i class="fw-icon fw-icon-cloud-download"></i>Export 
       <span class="caret"></span> 
      </a> 
      <ul class="dropdown-menu export-list"> 
       <li class="excel"><a data-ng-click="excel(study.Code)">Export to Excel</a> 
       </li> 
      </ul> 
     </div> 
    </li> 
</ul> 

errore ricevo:

E2E: Admin dashboard delete Exports create export Message: NoSuchElementError: No element found using locator: By.id("export")

+0

Se commento l'azione click funziona benissimo ogni volta –

+0

Che cosa succede se si aggiunge 'del browser .waitForAngular(); 'dopo la chiamata' get() '? – alecxe

+0

Doens't sembra funzionare ancora non riesce a volte –

risposta

20

ho trovato là fuori il problema è nella differenza tra: elementisPresent() e isDisplayed()

quindi se si aspetta solo isPresent() potrebbe essere trovato in html ma non ancora visualizzato.

ingannevole se si desidera utilizzare solo elm.isDisplayed(), si bloccherà se l'elemento non esiste ancora. Così si controlla prima è isPresent() prima isDisplayed()

ho fatto una funzione che attende il blocco per le 2 proprietà:

this.waitUntilReady = function (elm) { 
     browser.wait(function() { 
      return elm.isPresent(); 
     },10000); 
     browser.wait(function() { 
      return elm.isDisplayed(); 
     },10000); 
    }; 

describe('Admin dashboard delete Exports', function() { 
     it('create export', function() { 
      browser.get(e2GUrl + '/admin/studies'); 
      waitUntilReady(element(by.id('export'))); 
      element(by.id('export')).click(); 
     });