我尝试使用angular的e2e测试框架设置文本字段值。根据他们的文档,我必须使用:
input(<model>).enter(<value>)
但是,由于模型嵌入在转发器中,因此从测试环境中传递模型并不是直截了当的。我可以,通过使用:
来拉它 element('my_element_here', 'description')
但是.enter(<value>)
调用 ONLY 可以从input()
明显返回的内容中调用,而我无法弄清楚如何转换element
的返回值到input()
返回的内容,我可以简单地在其上调用enter()
!!
我必须假设我只是忽略了一些事情......
答案 0 :(得分:3)
是的,E2E input()方法有点令人讨厌,因为它基于特定输入的ng模型进行查找。所以对于像ng-repeat这样的情况,它不适用于任何实际使用
好消息是,你可以使用element()来获得你想要的功能。
element('my_element_here').val('Value I want to enter!')
expect(element('my_element_here').val()).toEqual("Value I want to enter!")
基本上,element()调用可以与任何这些jQuery-esque方法链接:
val, text, html, height, innerHeight, outerHeight, width, innerWidth, outerWidth,
position, scrollLeft, scrollTop, offset.
Angular的E2E测试工具很有趣。并迫切需要一些TLC。但是,一旦你克服它的尴尬,它实际上非常擅长它的作用! (并假设你在文档中存活下来)
答案 1 :(得分:2)
这对我有用:触发特定元素的事件输入
var evtInput = document.createEvent('Event');
evtInput.initEvent('input', true, false);
element('#my-element').query(function(el, done) {
el[0].dispatchEvent(evtInput);
done();
});
答案 2 :(得分:-1)
我想补充一点,以模仿确切的输入行为,你需要触发一个&#39;更改&#39; event(.val()确实这样做)
element('my_element_here').val('Value I want to enter!");
element('my_element_here').trigger('input'); // Or 'change' if do not support 'input'