量角器:无法获取中继器元素
Protractor: can't get repeater element
我正在测试 https://angularjs.org/ 中名为 "Add new control" 的基本示例。
问题是在向中继器添加新值后我无法获得任何元素。只有第一个。
...
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,我知道新值已正确添加。而且我可以清楚地得到第一个元素的 "checked" 属性 (默认情况下禁用)。但是当我试图获取(2)元素时,我有关于空对象的错误。与 get(1) 相同。只有 get(0) 工作正常。但是2行中继器默认是毫无疑问的。
这可能是一个 promise/synchronization/refreshing 问题。看看这是否有效,如果有效,您需要开始使用 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);
});
问题是第二个和第三个元素未选中并且没有 checked
属性 - 这就是您得到 null
.
的原因
相反,检查复选框是否被选中的正确方法是使用 isSelected()
:
expect(list.get(0).element(by.model("todo.done")).isSelected()).toEqual(true);
expect(list.get(2).element(by.model("todo.done")).isSelected()).toEqual(false);
对我有用。
我正在测试 https://angularjs.org/ 中名为 "Add new control" 的基本示例。 问题是在向中继器添加新值后我无法获得任何元素。只有第一个。
...
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,我知道新值已正确添加。而且我可以清楚地得到第一个元素的 "checked" 属性 (默认情况下禁用)。但是当我试图获取(2)元素时,我有关于空对象的错误。与 get(1) 相同。只有 get(0) 工作正常。但是2行中继器默认是毫无疑问的。
这可能是一个 promise/synchronization/refreshing 问题。看看这是否有效,如果有效,您需要开始使用 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);
});
问题是第二个和第三个元素未选中并且没有 checked
属性 - 这就是您得到 null
.
相反,检查复选框是否被选中的正确方法是使用 isSelected()
:
expect(list.get(0).element(by.model("todo.done")).isSelected()).toEqual(true);
expect(list.get(2).element(by.model("todo.done")).isSelected()).toEqual(false);
对我有用。