2015-04-30 48 views
1

我已经为LinkedIn写了一个简单的卡斯帕履带式,我正在尝试输入搜索参数到“高级搜索”字段。CasperJS发送'输入'键盘事件提交表单元素

您可以通过登录领英进入高级搜索,然后按搜索栏右侧的“高级”。

导致与相关的问题的代码向输入字段发送'Enter'键盘命令以'提交'

casper.waitForSelector('#srp_main_', function() { 

    // Click on 'Current Company' 
    this.click('li#adv-facet-CC legend.facet-toggle'); 

    // Click on 'Add' button 
    this.click('#adv-facet-CC button.add-facet-button'); 

    this.then(function() { 

    this.sendKeys('form#peopleSearchForm input[name=f_CC][type=text]', 'Facebook', {keepFocus: true}); 

    this.sendKeys('form#peopleSearchForm input[name=f_CC][type=text]', casper.page.event.key.Enter, {keepFocus: true}); 

    this.capture('screenshots/added-search-parameters.png'); 
    }); 
}); 

理想我想看到的是我寻找被添加为input type=checkbox name=f_CC元素在页面上这样

http://i.imgur.com/hHBP7FT.png

公司我试图做一个超时,检查对于元素上的eventListeners,使用evaluate()来模拟浏览器控制台本身的键盘事件,并使用waitUntilVisible作为自动完成下拉菜单。

因为我本来可以做得不对,所以如果解决方案使用这些方法,请实施它。

那么,如何将一个'Enter'键盘事件发送到这个特定的LinkedIn输入字段。编辑

:输出capture()http://i.imgur.com/BC41qRP.png?1

+0

看起来很好测试,在我的情况。请注册到'resource.error','page.error','remote.message'和'casper.page.onResourceTimeout'事件([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf)) 。也许有错误。 –

+0

@ArtjomB。谢谢你,控制台错误是非常有帮助的。但是,即使Casper'senKeys'看起来不错,它也不起作用。这是填充文本并按Enter后的屏幕截图http://i.imgur.com/BC41qRP.png?1 –

+0

您是否尝试过直接使用PhantomJS的'page.sendEvent()'函数?我不确定我是否理解这些屏幕截图上会发生什么。 –

回答

0

所以,我的问题缩小到linkedin.com

由于Artjom指出的那样,CasperJS代码似乎退房,但我没有得到预期的结果显示在图像中。

这是因为在LinkedIn上正在使用自定义eventListener库。您可以通过Chrome浏览器中的检查元素>右侧菜单窗口中的事件监听器>探索任何事件监听器的源代码(最好是单击)来找到它。

这样做可以看到YAHOO库,这就是为什么我怀疑元素的焦点和按键行为不正常。

您可以通过试图迫使重点使用jQuery像这样在页面上input元素上测试的异常行为:

$('form#peopleSearchForm input[name=f_CC][type=text]').focus()

点击使用控制台命令的元素也应弹出自动完成下拉菜单一旦文字已被填写,这是不。同样,这可以通过使用像进入

$('form#peopleSearchForm input[name=f_CC][type=text]').click()

甚至发送自定义键盘命令使用JavaScript

var e = $.Event('keypress') 
e.which = 13 
e.keyCode = 13 
$('form#peopleSearchForm input[name=f_CC][type=text]').trigger(e)