加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

测试 – 如何在Angular场景测试中触发输入?

发布时间:2020-12-17 17:12:42 所属栏目:安全 来源:网络整理
导读:我正在用Angular Scenario测试运行器编写测试.在传统形式中,我可以将文本输入到输入中,但是我需要按Enter键来执行查询,并且没有按钮可以单击.当然有一些简单的方法可以做到这一点,但我不知道它是什么. input('query').enter('foo bar');// ... now what? 我
我正在用Angular Scenario测试运行器编写测试.在传统形式中,我可以将文本输入到输入中,但是我需要按Enter键来执行查询,并且没有按钮可以单击.当然有一些简单的方法可以做到这一点,但我不知道它是什么.

input('query').enter('foo bar');
// ... now what?

我试图用JQuery模拟一个按键,但是因为this answer表示在e2e场景范围内没有加载JQuery.所以我按照他的建议(以及this answer的建议)来模拟按键:

element('#search_input').query(function(el,done){
    var press = document.createEvent('keypress');
    press.which = 13;
    press.trigger(evt);
    done();
});

但是对于这个Angular回复:

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;">

然后在场景中:element(‘#search-submit’).click();做了什么是必要的.

对于不需要为了测试而修改HTML的更纯粹的解决方案,@ florian-f的答案(以及this one)通过以下方式提供对DSL内jQuery的访问:

var $= $window.$;

可以在那里使用或传递给回调.但是,即使在触发按下输入时有此访问权限,我也无法以下列方式提交表单:

$(selector).trigger($.Event('keypress',{ which: 13 }));

这必须是另一个问题.但我确实找到了jQuery的提交功能来完成这个诀窍:

$(#the_form).submit();

解决方法

您可以访问jQuery的app(iframe中的runner)实例:

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
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读