量角器 - 强制getText()解析,因为在测试期间删除了元素

时间:2015-01-07 17:27:14

标签: jasmine promise protractor

我正在为我的角度应用程序编写测试。 我正在使用量角器和茉莉花。

页面中的过程如下: 1)单击按钮| 2)handler用内容创建一个div:bar | 3)元素(by.id('foo'))。getText()。then(function(data){var some-var-i-declared-early = data}); 4)单击一个按钮,从DOM中删除该div 5)期望对该元素值进行断言。|

问题是这个承诺得到解决,元素不存在,因此我得到null。 如果我确实期望(这解决了承诺)在我点击删除div的按钮之前我可以看到我需要的值

问题是流程必须在我预期之前删除div。

如何强制承诺解决以获得它的价值? 当然,任何其他解决方案都非常受欢迎。

提前感谢!

1 个答案:

答案 0 :(得分:1)

1)单击按钮| 2)handler用内容创建一个div:bar | 3)元素(by.id('foo'))。getText()。then(function(data){var some-var-i-declared-early = data}); 4)单击一个按钮,从DOM中删除该div 5)期望对该元素值进行断言。|

element(by...).click(); // step 1
var text = element(by.id('foo')).getText(); // step 3
element(by...).click(); // step 4
expect(text).toEqual('the-right-value'); // step 5

当您将文本数据分配给some-var-i-declared-early之前,原始文件无效的原因是因为此值是在promise中分配的。这意味着当您到达assert语句时,分配尚未完成(阅读https://github.com/angular/protractor/blob/master/docs/control-flow.md)。实际上,在断言运行时,步骤1甚至都没有执行。

或者你可以这样做(这有助于你了解正在发生的事情,但与第一个答案相比不那么简洁):

element(by...).click(); // step 1
var some-var-i-declared-earlier = null;
var text = element(by.id('foo')).getText().then(function(data) {
  some-var-i-declared-earlier = data
}); // step 3
element(by...).click().then(function() { // step 4
  // the fact that this is run inside the 'then' makes sure it executes at the end of step 4
  expect(some-var-i-declared-earlier).toEqual('the-right-value'); // step 5
});