2015-02-03 10 views
10

Ho una direttiva che produce la seguente struttura html:elemento passaggio del mouse che non funziona utilizzando il goniometro

<div class="popover ng-isolate-scope" ng-mouseover="toggle(true)" ng-mouseleave="toggle(false)" popover="" label="hover time!" trigger-class="button" content-class="specialContentClass"> 
    <span id="thing" class="popover-trigger button">hover time!</span> 
    <div ng-transclude="" ng-show="show" class="popover-content ng-hide"> 
    <div class="ng-scope">Popover content </div> 
    </div> 
</div> 

Il codice funziona bene e il contenuto popover è correttamente visualizzato quando si mouseover manualmente utilizzando un browser.

Sto cercando di verificare la funzionalità passaggio del mouse con la seguente prova di goniometro:

it('should display the popover-content on mouseover', function() { 
    browser.get('http://localhost:9000/'); 
    browser.actions() 
    .mouseMove(element(by.css('.popover')).find()).perform(); 
    expect(element(by.css('.popover-content')) 
    .isDisplayed().toBeTruthy()); 
}); 

Il test sembra funzionare, il browser si apre, ma non vedo il popup di contenuti che visualizza prima che il browser poi si chiude quindi sono abbastanza sicuro che il bit del mouse non funzioni per qualche motivo. Di seguito è poi uscita nel terminale:

launcher] 0 instance(s) of WebDriver still running 
[launcher] chrome #1 failed 1 test(s) 
[launcher] overall: 1 failed spec(s) 
[launcher] Process exited with error code 1 
ycompu:angular ycompu$ 

Ho letto la documentazione e l'utilizzo del browser è sicuramente il modo giusto per avvicinarsi a questo test. Sono in perdita perché la sintassi mi sembra corretta.

risposta

23

Un possibile problema è che è necessario per rendere più attendere angolare per caricare:

it('should display the popover-content on mouseover', function() { 
    browser.get('http://localhost:9000/'); 
    browser.waitForAngular(); 

    browser.actions().mouseMove(element(by.css('.popover'))).perform(); 
    expect(element(by.css('.popover-content')).isDisplayed()).toBeTruthy(); 
}); 

Ho anche tolto la find() chiamata (non so se si ha realmente bisogno qui) e fissa la parentesi è l'ordine di chiusura nell'ultima riga.

+0

Aha, si è rivelata la chiamata find(). Penso che in questo contesto waitForAngular sia già stato chiamato? Grazie per aver dato un'occhiata! –

+1

Questo è corretto, non c'è bisogno di waitForAngular(), il goniometro lo gestisce già. –

+1

Si noti che '.perform' restituisce una promessa: http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_ActionSequence.html#perform – LeeGee

Problemi correlati