【发布时间】:2015-04-17 19:29:43
【问题描述】:
我刚刚更新到 protractor 2.0,我发现我的项目中存在一些问题。
expect() 失败,因为给定文本是 '',它似乎期望在 sendKeys() 完成之前完成。
elem.clear().sendKeys('Message');
expect(elem.getAttribute('value')).toBe('Message');
我得到的错误是:
应为“消息”。
这在更新到量角器 2.0 之前有效,我知道 beaking changes is related with then() and promises 之一:
要启用更新并消除混乱,这会删除 element().then 函数,除非有操作结果。这个 函数是完全没有必要的,因为它总是会解析为 本身,但删除可能会导致重大更改。换句话说,一个 ElementFinder 现在不再是承诺,直到采取行动 调用。
但是在我的项目的其他测试中,它可以工作,我认为问题可能与我在循环中执行该操作有关。这里是完整的代码
describe('message', function() {
it('Should fill out visible message fields', function(){
getDisplayedElements(element.all(by.model('message')))
.then(function(displayedMessageInputs){
_.each(displayedMessageInputs, function(elem){
elem.clear().sendKeys('Message');
expect(elem.getAttribute('value')).toBe('Message');
});
});
});
});
如果我使用 then() 函数,它可以工作,但是......我不喜欢它!
elem.clear().sendKeys('Message')
.then(function(){
return elem.getAttribute('value');
})
.then(function(inputValue){
expect(inputValue).toBe('Message');
});
【问题讨论】:
-
您有没有机会在这里看到 Chrome 和 Firefox 之间的行为差异? (它在 Chrome 中失败但在 Firefox 中按预期工作?)
标签: javascript angularjs jasmine protractor angularjs-e2e