Angular2 Karma/Protractor - 等待元素启用
Angular2 Karma/Protractor - wait for element to become enabled
在我的 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);
});
如何在继续测试之前等待此元素启用?
您应该使用 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);
});
我发现我必须使用 .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);
});
});
谢谢 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);
});
});
在我的 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);
});
如何在继续测试之前等待此元素启用?
您应该使用 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);
});
我发现我必须使用 .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);
});
});
谢谢 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);
});
});