2017-03-06 70 views
0

在我的Angular2应用程序中,我有一个需要等待元素启用的Karma单元测试。Angular2 Karma /量角器 - 等待元素启用

我的问题是,我不知道如何使测试等待这个元素成为启用之前尝试点击它。

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

在继续测试之前,我该如何等待这个元素变为可用?

回答

0

我发现,我不得不使用.then调用来执行条件成为真时的代码。完整答案看起来像这样...

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

您应该使用browser.wait()而不是您目前正在做的事情。这样的东西应该工作:

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

感谢你们,我仔细研究过,发现.wait不是阻塞功能。您需要使用.then来处理承诺。感谢您的提示。 –

0

感谢Ben Cameron.It为我工作。

它总是更好地使用isDisplayed()而不是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); 
    }); 

});