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

fou*_*ama 6 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();
Run Code Online (Sandbox Code Playgroud)

(我们在哪里运行casperjs test this-test.js)

我已经验证sendKeys了将文本输入到输入中,但该文本从未显示在#stage元素中.按键的"vanilla"PhantomJS实现工作正常,webpage.sendEvent('keypress', '\uE007')导致页面上的事件处理程序触发.查看源代码casper.sendKeys,我看到它委托给sendEventCasper实例的PhantomJS实例(即当前版本的casper.js中的第1613行).

有任何想法吗?谁有这些钥匙才能在CasperJS测试中工作?

小智 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();
Run Code Online (Sandbox Code Playgroud)

  • 有关casper.page.event.key中可用的特殊键列表,请参阅:https://github.com/ariya/phantomjs/commit/cab2635e66d74b7e665c44400b8b20a8f225153a (5认同)