2015-02-03 15 views
10

Ich habe eine Richtlinie, die die folgende HTML-Struktur erzeugt:Mouseover Element funktioniert nicht Winkelmesser mit

<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> 

Der Code funktioniert gut und der popover Inhalt richtig, wenn Sie manuell mit einem Browser Mouseover gezeigt.

Ich versuche, die Mouseover-Funktionalität mit der folgenden Winkelmesser Test Test:

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()); 
}); 

Der Test zu laufen scheint, öffnet sich der Browser, aber ich sehe nicht, um das Popup-Inhalt vor dem Browser angezeigt wird dann schließt, so bin ich mir ziemlich sicher, dass das mousemove-Bit aus irgendeinem Grund nicht funktioniert. Im Folgenden wird dann ausgegeben im Terminal:

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$ 

ich die Dokumentation gelesen haben und mit Browser ist definitiv der richtige Weg, um diesen Test zu nähern. Ich bin ratlos, da die Syntax für mich richtig aussieht.

Antwort

23

Ein mögliches Problem ist, dass Sie es warten brauchen, um für Winkel laden:

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(); 
}); 

ich auch den find() Anruf entfernt habe (nicht sicher, ob Sie es wirklich brauchen hier) und fest die abschließende Reihenfolge der Klammer in der letzten Zeile.

+0

Aha, es war der Aufruf find(). Ich denke in diesem Zusammenhang wird waitForAngular bereits aufgerufen? Danke für einen Blick! –

+1

Das ist richtig, keine Notwendigkeit für waitForAngular(), Winkelmesser behandelt es bereits. –

+1

Beachten Sie, dass '.perform' ein Promise zurückgibt: http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_ActionSequence.html#perform – LeeGee

Verwandte Themen