2015-09-04 60 views
1

我遇到了一个点击事件没有触发的问题(有时会发生,有时候不会发生),当浏览器处于无头状态时,总会发生这种情况。点击幻像js中的事件并不总是激发

我会用.click方法,像这样

find("#peoplePreview > tbody > tr:first-of-type > td > a").click 

在调试模式下运行phantomjs我得到

"name":"find","args":["css","#peoplePreview > tbody > tr:first-of-type > td > a"]} 
{"response":{"page_id":18,"ids":[10]}} 
{"name":"click","args":[18,10]} 
{"response":{"position":{"x":114,"y":523.5}}} 

所以就我所看到的元素已经被发现和被点击的元素在正确的坐标,但事件不会被解雇

任何人都遇到过这个问题或有一个选择让这个事件发生?

这是我怎么也设置吵闹鬼

Capybara.register_driver :headless do |app| 
    options = { 
    :js_errors => false, 
    :inspector => true, 
    :debug => true, 
    :path => '/usr/bin/', 
    :phantomjs_options => ['--ignore-ssl-errors=yes', '--ssl-protocol=any'] 
} 
Capybara::Poltergeist::Driver.new(app, options) 
end 

感谢

+0

POST完整的代码请,(通常你应该这样调用点击方法'... td> a“)。click();') –

+0

可能是PhantomJS中的一个错误,使用':first-of-type'选择器尝试使用XPath而不是CSS选择器,并且不要专门写” TBODY”。 –

回答

1

我已经看到了发生在我身上好几次......我一直把范围缩小到一些时间问题。我的怀疑是元素存在并且可点击但没有完全加载,所以当点击它时不会触发事件它应该...

解决方案让我的无头测试保持一致是增加睡眠或尝试点击元素直到实现“.click”事件的预期结果。

例如:

10.times do 
    sleep 0.5 
    element.click 
    break if some_other_element[:disabled].nil? #result if the initial click was successful 
end 

这是一个非常时髦的解决方案,但是唯一可靠的一个,我发现...