在我的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 :(得分:2)
我发现当条件成立时我必须使用.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);
});
});
答案 1 :(得分:2)
谢谢Ben Cameron。它为我工作。
使用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);
});
});
答案 2 :(得分: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);
});