如何使用CasperJS发送转义键(关闭模态)?

时间:2014-04-24 18:16:07

标签: javascript angularjs functional-testing casperjs

使用casper测试模态对话框:

.then(function() {
   this.click(variables.configButton);
}).then(function() {
  this.capture('./test/screencaps/edit-afterClickFlyout1.png');
   test.assertVisible('#addDataDialog');
}).then(function() {
   // send ESC key, how? 
}).then(function() {
  this.capture('./test/screencaps/edit-afterClickFlyout2.png');
   test.assertNotVisible('#addDataDialog');
}).run(function() {
   test.done();
});

这是一个角度模态,因此按下ESC将关闭它。 Casper有sendKeys但是:

  

目前支持的可以接收键盘事件的HTMLElements   来自sendKeys,和,以及任何HTMLElement   属性contenteditable =" true"。

如果我在页面上没有任何文字输入,那就有点问题了。我可以在其他控件中添加一个或设置contenteditable,但这意味着我修改页面以使测试通过,这不是很好。

(我通过给予取消链接ID并在其上使用this.click来解决问题,但我真的不应该修改我的标记以进行测试通过)

如何使用casper发送简单的按键?

2 个答案:

答案 0 :(得分:3)

要走的路是发送phantomjs特殊键。

casper.then(function() {    
    test.comment('Send Esc key');
    this.sendKeys('#contact-us-modal', casper.page.event.key.Escape);
});

以下是casper.page.event.key

中可用的list特殊键

以下是sendKeys文档链接。

答案 1 :(得分:2)

如果您的页面中有jQuery,则可以使用此代码来触发密钥,但由于安全考虑,它可能无法正常工作。请参阅此post

casper.thenEvaluate(function(){
    var esc = $.Event("keydown", { keyCode: 27 });
    $("body").trigger(esc);​
});

我确信还有非jQuery版本。