角度E2E测试:从“元素”获取“输入”

时间:2013-06-25 12:54:35

标签: angularjs ui-testing angularjs-e2e

我尝试使用angular的e2e测试框架设置文本字段值。根据他们的文档,我必须使用:

input(<model>).enter(<value>)

但是,由于模型嵌入在转发器中,因此从测试环境中传递模型并不是直截了当的。我可以,通过使用:

来拉它

element('my_element_here', 'description')

但是.enter(<value>)调用 ONLY 可以从input()明显返回的内容中调用,而我无法弄清楚如何转换element的返回值到input()返回的内容,我可以简单地在其上调用enter() !!

我必须假设我只是忽略了一些事情......

3 个答案:

答案 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'