量角器:无法获得中继器元素

时间:2015-09-06 07:09:07

标签: javascript angularjs protractor repeater

我正在测试https://angularjs.org/中名为“添加新控件”的基本示例。 问题是在向转发器添加新值后,我无法获得任何元素。只有第一个。

...
var listRepeater = by.repeater('todo in todoList.todos');
var list = element.all(listRepeater);
expect(list.count()).toEqual(2);

addNewElement();

expect(list.count()).toEqual(3);
expect(list.get(0).element(by.model("todo.done")).getAttribute("checked")).toEqual("true");
expect(list.get(2).element(by.model("todo.done")).getAttribute("checked")).toEqual("true");

添加新元素后检查元素的计数是好的:它等于ti 3,我知道正确添加了新值。我可以清楚地得到第一个元素的“已检查”属性(默认情况下禁用)。但是当我试图得到(2)元素时,我有关于null对象的错误。与get(1)相同。只有get(0)工作正常。但是默认情况下,2行中继器毫无疑问。

2 个答案:

答案 0 :(得分:2)

问题在于第二个和第三个元素未经检查且没有null属性 - 这就是您获得expect(list.get(0).element(by.model("todo.done")).isSelected()).toEqual(true); expect(list.get(2).element(by.model("todo.done")).isSelected()).toEqual(false); 的原因。

相反,检查是否选中复选框的正确方法是使用isSelected()

http://localhost:3000/login/&status=ok&access_token=f1f2fd9&name=usernameHere

为我工作。

答案 1 :(得分:0)

这可能是承诺/同步/刷新问题。看看这是否有效,如果是,你需要开始使用promises。

it("your test", function(done){
  var listRepeater = by.repeater('todo in todoList.todos');
  var list = element.all(listRepeater);
  expect(list.count()).toEqual(2);

  addNewElement();
  browser.sleep(2000);

  setTimeout(function(){
      var listRepeater = by.repeater('todo in todoList.todos');
      var list = element.all(listRepeater);
      expect(list.get(2)
        .element(by.model("todo.done"))
        .getAttribute("checked")).toEqual("true");

      done();
  }, 2000);
});