2017-03-06 4 views
0

In meiner Angular2-Anwendung habe ich einen Karma-Unit-Test, der auf ein Element warten muss aktiviert werden.Angular2 Karma/Winkelmesser - warten auf Element aktiviert werden

Mein Problem ist, dass ich nicht sicher bin, wie man den Test wartet, bis dieses Element aktiviert wird, bevor man versucht, darauf zu klicken.

it('should check the fundDropdown exists', function() { 

     browser.get(url); 

     var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a')); 

     // Need to wait for this element to become enabled before I try to click it... 
     expect(menuStratItem.isEnabled()).toBe(true); 

     menuStratItem.click(); 

     expect(element(by.id('fundDropdown')).isPresent()).toBe(true); 
    }); 

Wie kann ich warten, bis dieses Element aktiviert wird, bevor Sie mit dem Test fortfahren?

Antwort

0

Ich fand, dass ich einen Anruf .then verwenden musste Code in auszuführen, wenn die Bedingung wahr geworden. Die vollständige Antwort sieht so aus ...

var url = 'http://uat.viewer3.web.algebris.lan'; 
    var ec = protractor.ExpectedConditions 
    var timeout = 60000; 

    it('should check the fundDropdown exists', function() { 

     browser.get(url); 

     var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a')); 

     browser.wait(ec.elementToBeClickable(menuStratItem), timeout).then(function() { 
       expect(menuStratItem.isEnabled()).toBe(true); 
       menuStratItem.click(); 
       expect(element(by.id('fundDropdown')).isPresent()).toBe(true); 
     }); 
    }); 
0

Sie sollten browser.wait() anstelle von dem verwenden, was Sie gerade tun. So etwas sollte funktionieren:

var ec = protractor.ExpectedConditions 
var timeout = 60000; 

it('should check the fundDropdown exists', function() { 
    browser.get(url); 

    var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a')); 

    //use browser.wait to wait for element to be clickable 
    browser.wait(ec.elementToBeClickable(menuStratItem), timeout); 
    menuStratItem.click(); 

    expect(element(by.id('fundDropdown')).isPresent()).toBe(true); 
}); 
+0

Danke dafür, ich habe es untersucht und festgestellt, dass das .wait keine Sperrfunktion ist. Sie müssen das Versprechen mit einem .hen dann behandeln. Danke für den Hinweis. –

0

Danke Ben Cameron.It arbeitete für mich.

Es ist immer besser zu verwenden isDisplayed() statt isPresent().

it('should check the fundDropdown exists', function() { 

    browser.get(url); 

    var menuStratItem = element(by.xpath('/html/body/alg-app/mainviewer/p-tabview/div/ul/li[2]/a')); 

    browser.wait(ec.elementToBeClickable(menuStratItem), 10000).then(function() { 
      expect(menuStratItem.isEnabled()).toBe(true); 
      menuStratItem.click(); 

     expect(element(by.id('fundDropdown')).isDisplayed()).toBe(true); 
    }); 

});

Verwandte Themen