我正在测试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行中继器毫无疑问。
答案 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);
});