CasperJS:吞下像Enter这样的特殊键吗?

时间:2014-02-18 03:48:57

标签: javascript casperjs

我正在尝试使用CasperJS编写一个测试,其中在输入中按Enter键是页面触发输入文本的其他内容。

CasperJS测试的缩写/简化版本:

casper.start('http://localhost:3000/input-demo', function() {
  this.sendKeys('#demo-input', 'demo text');
  this.sendKeys('#demo-input', '\uE007');
  this.test.assertEquals(this.getHTML('#stage'), 'input demo');
});

casper.run();

(我们将其作为casperjs test this-test.js运行)

我已经确认sendKeys正在将文本输入到输入中,但该文本从未显示在#stage元素中。按键的“vanilla”PhantomJS实现工作正常,webpage.sendEvent('keypress', '\uE007')导致页面上的事件处理程序触发。查看casper.sendKeys的来源,我看到它委托给Casper实例的PhantomJS实例上的sendEvent(即line 1613 in the current version of casper.js)。

有什么想法吗?有人用这些钥匙在CasperJS测试中工作吗?

1 个答案:

答案 0 :(得分:12)

您可能希望将{keepFocus:true}添加到第一个sendKeys调用中。如果您看到源代码,但没有添加keepFocus,则会模糊文本区域,这意味着您的第二个sendKeys调用将不接受按键。

这似乎有效。

casper.start('http://localhost:3000/input-demo', function() {
  this.sendKeys('#demo-input', 'demo text', {keepFocus: true});
  this.sendKeys('#demo-input', casper.page.event.key.Enter , {keepFocus: true});
  this.test.assertEquals(this.getHTML('#stage'), 'input demo');
});

casper.run();