1

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

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

但是,由于模型嵌入在转发器中,因此从测试上下文传递模型并不是直接的。不过,我可以通过以下方式拉动它:

element('my_element_here', 'description')

但是,只能从显然返回的内容中调用该调用.enter(<value>)并且我不知道如何将返回的内容转换为返回的内容,因此我可以简单地调用它!input()elementinput()enter()

我不得不假设我只是忽略了一些东西......

4

3 回答 3

3

是的,E2E input() 方法有点麻烦,因为它会根据特定输入的 ng-model 进行查找。所以对于像 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。但它实际上很擅长它的作用,一旦你克服了它的尴尬!(假设您在文档中幸存下来)

于 2013-06-26T00:32:56.493 回答
2

这对我有用:触发特定元素上的事件输入

var evtInput = document.createEvent('Event');
    evtInput.initEvent('input', true, false);

element('#my-element').query(function(el, done) {          
                el[0].dispatchEvent(evtInput);
                done();
            });
于 2013-10-04T10:29:54.737 回答
-1

我要补充一点,以准确模拟您需要触发“更改”事件的输入行为( .val() 确实如此)

element('my_element_here').val('Value I want to enter!");
element('my_element_here').trigger('input'); // Or 'change' if do not support 'input'
于 2013-07-10T12:31:28.980 回答