Testing 如何触发<;输入>;在角度场景测试中的输入?

Testing 如何触发<;输入>;在角度场景测试中的输入?,testing,angularjs,Testing,Angularjs,我正在用Angular Scenario test runner编写测试。在传统表单中,我可以在输入中输入文本,但我需要按enter键执行查询,并且没有可单击的按钮。当然有一些简单的方法可以做到这一点,但我不知道它是什么 input('query').enter('foo bar'); // ... now what? 我试图用JQuery模拟按键,但正如所示,JQuery没有加载到e2e场景范围中。因此,我按照他的建议(以及的建议)模拟按键: element('#search_input')

我正在用Angular Scenario test runner编写测试。在传统表单中,我可以在输入中输入文本,但我需要按enter键执行查询,并且没有可单击的按钮。当然有一些简单的方法可以做到这一点,但我不知道它是什么

input('query').enter('foo bar');
// ... now what?
我试图用JQuery模拟按键,但正如所示,JQuery没有加载到e2e场景范围中。因此,我按照他的建议(以及的建议)模拟按键:

element('#search_input').query(function(el, done){
    var press = document.createEvent('keypress');
    press.which = 13;
    press.trigger(evt);
    done();
});
但对此,我的回答是:

NotSupportedError: DOM Exception 9
Error: The implementation did not support the requested type of object or operation.
更新

我意识到一个非常简单的解决方法是在我的表单中包含一个隐藏的提交输入:

<input id="search-submit" type="submit" style="display:none;">
可以在那里使用,也可以传递给回调。但是,即使在触发enter键时使用此访问权限,我也无法以以下方式提交表格:

$(selector).trigger($.Event('keypress', { which: 13 }));
这肯定是另一个问题。但我确实找到了jQuery的submit函数来实现这一点:

$(#the_form).submit();
您可以访问jQuery的应用程序(iframe中的运行程序)实例:

angular.scenario.dsl('appElement', function() {
  return function(selector, fn) {
    return this.addFutureAction('element ' + selector, function($window, $document, done) {
      fn.call(this, $window.angular.element(selector));
      done();
    });
  };
});
然后可以在测试中调用jQuery的触发器方法:

appElement('yourSelector', function(elm) {
  elm.trigger('enter');//or keypress
});

还有另一种可能触发关键事件。当你第一次接近时

element('#search_input').query(function(el, done){
    var press = document.createEvent('keypress');
    press.which = 13;
    press.trigger(evt);
    done();
});
将被角度,这一个阻挡

element(<selector>).query(function($el, done) {
    var event = new CustomEvent('keyup');

    event.keyCode = 13;
    $el.val(2);
    $el.get(0).dispatchEvent(event);

    done();
});
element().query(函数($el,done){
var事件=新的CustomEvent('keyup');
event.keyCode=13;
$el.val(2);
$el.get(0).dispatchEvent(事件);
完成();
});

将在选择器指定的元素上传递并触发keyup事件(keyCode=13=Enter Key)。有关更多信息,请参阅。

当您说需要按enter键执行查询时,您的意思是说输入框在表单中,并且使用
ng submit
执行查询?问得好。我可以看出,如果我是,测试会变得多么容易,但目前我使用的是传统的形式。
element(<selector>).query(function($el, done) {
    var event = new CustomEvent('keyup');

    event.keyCode = 13;
    $el.val(2);
    $el.get(0).dispatchEvent(event);

    done();
});