单击幻像中的事件并不总是触发

时间:2015-09-04 10:58:20

标签: javascript phantomjs capybara

我遇到的问题是点击事件没有触发(有时它会发生,有时候不会触发),这种情况总是在无头状态下运行浏览器时发生。

我将使用.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}}}

因此,只要我看到元素已被找到并且元素点击了正确的坐标,但事件未被触发

任何人遇到这个或者有其他方法可以解雇这个事件吗?

这就是我设置poltergeist的方式

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

由于

1 个答案:

答案 0 :(得分: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

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