角度 E2E 测试:从"element"获取"input"



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

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

然而,由于模型嵌入在中继器中,传递模型并不是直接从测试上下文中传递的。不过,我可以使用

element('my_element_here', 'description')

然而,.enter(<value>)调用显然只能从input()返回的内容中调用,我不知道如何将element的返回转换为input()的返回,所以我可以简单地对其调用enter()!!

我不得不假设我只是忽略了什么。。。

是的,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式方法链接:

val, text, html, height, innerHeight, outerHeight, width, innerWidth, outerWidth,
position, scrollLeft, scrollTop, offset.

Angular的E2E测试线束…很有趣。急需一些TLC。但事实上,一旦你克服了它的尴尬,它就非常擅长它的功能!(假设您在文档中幸存下来)

这对我来说很有效:触发特定元素上的事件输入

var evtInput = document.createEvent('Event');
    evtInput.initEvent('input', true, false);
element('#my-element').query(function(el, done) {          
                el[0].dispatchEvent(evtInput);
                done();
            });

我想补充一下,为了准确模拟输入行为,您需要触发一个"更改"事件(.val()确实会这样做)

element('my_element_here').val('Value I want to enter!");
element('my_element_here').trigger('input'); // Or 'change' if do not support 'input'

相关内容