如何在不添加browser.sleep的情况下验证元素是否已更改其值?

时间:2014-11-24 09:27:03

标签: angularjs protractor

在量角器测试中,我们必须验证元素是否已更改其值。

例如:

<div>aaa</div> has changed to <div>bbb</div>

<div>元素始终存在,只会更改值。

由于它的异步,量角器函数element(locatorOfTheDiv).getText()返回一个承诺,在aaa变为bbb之前总是满足(然后我们得到一个错误的结果)

如何验证元素是否已更改其值?

是否有其他方法可以添加browser.sleep(5000)

1 个答案:

答案 0 :(得分:1)

如果你的页面没有在Angular世界之外做任何异步,Protractor会自动为你处理这个问题。你可以写:

var myDiv = element(by.css('div.foo'));
expect(myDiv.getText()).toEqual('aaa');
otherButton.click(); // Do whatever causes it to change here.
expect(myDiv.getText()).toEqual('bbb');

如果异步代码在Angular之外,那么Protractor无法知道它。在这种情况下,你需要使用睡眠或等待 - 通常等待更好,因为他们会一直检查,直到值发生变化。

browser.wait(function() {
  return myDiv.getText().then(function(text) {
    return text == 'bbb';
  });
}, 'waiting for div to have text bbb');