【发布时间】:2015-09-08 14:47:03
【问题描述】:
在 Protractor 中,我正在尝试编写一个函数来模拟单击响应式导航菜单项(即菜单是顶部的下拉栏或移动设备的汉堡链接)。条形图的结构由 MEANJS 定义,并混入了一些 id="" 属性。
当我一次运行一个规范时,它似乎完全按照我的意愿工作,就像这样:
protractor app/tests/e2e/conf.js --suite mySuite
但是当我运行完整的测试(其中只有 4 个测试)时,就像这样:
protractor app/tests/e2e/conf.js
我开始间歇性地收到此错误(错误来源在以下 2 个地方):
Failed: element not visible
这是我的功能
commonPOs.clickNavBar = function(mainTab, linkUrl) {
var deferred = protractor.promise.defer();
var hamburger = element(by.id('nav-hamburger'));
var linkCssExpression = 'a[href*="' + linkUrl + '"]';
hamburger.isDisplayed().then(function(result) {
if ( result ) {
hamburger.click().then(function() {
var navBar = hamburger
.element(by.xpath('../..'))
.element(by.id('myapp-navbar'));
return clickItNow(mainTab, linkUrl, navBar);
});
} else {
return clickItNow(mainTab, linkUrl, element(by.id('myapp-navbar')));
}
});
return deferred.promise;
function clickItNow(mainTab, linkUrl, navBar) {
var link;
if(mainTab) {
// if mainTab was passed, need to
// click the parent first to expose the link
var parentLink;
if (mainTab == 'ACCTADMIN') {
parentLink = navBar.element(by.id('account-admin-menu'));
}
else {
parentLink = navBar.element(by.linkText(mainTab));
}
expect(parentLink.isPresent()).toBeTruthy();
parentLink.click(); // FIRST PLACE ERROR HAPPENS
link = parentLink.element(by.xpath('..')).element(by.css(linkCssExpression));
}
else {
link = navBar.element(by.css(linkCssExpression));
}
expect(link.isPresent()).toBeTruthy();
link.click(); // SECOND PLACE ERROR HAPPENS
return deferred.fulfill();
}
};
我尝试过使用这两种方法,但都不起作用:
browser.sleep(500);
browser.driver.wait(protractor.until.elementIsVisible(parentLink));
我犯了什么 NOOB 异步错误?
【问题讨论】:
标签: angularjs protractor meanjs