Capybara button.click适用于Console,但不适用于脚本(Ruby; Capybara; Poltergeist)

时间:2017-07-10 21:08:28

标签: ruby console capybara poltergeist

当我在PRY控制台上执行此操作时:

require 'phantomjs'
require 'capybara/poltergeist'

Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, :phantomjs => Phantomjs.path)
end

s = Capybara::Session.new(:poltergeist)
s.visit('site')
s.fill_in('field', with: data)
s.find_button('button').trigger('click')

它按预期工作。

但是当我尝试在ruby文件脚本上执行相同操作时,它会失败。

编辑:为什么我说失败,我的意思是表单未提交,因此页面不会重定向。

有人知道为什么吗?

由于

大卫

1 个答案:

答案 0 :(得分:1)

当您致电s.find_button('button').trigger('click')时,会发生鼠标点击并立即返回您的代码,而#34;浏览器"停止并开始请求下一页或点击触发的任何操作。因此,如果您立即致电s.html,那么由于该网页在该时间点尚未实际加载,因此它不会正确。你可以sleep几秒钟让页面加载,或者使用Capybara finders / matchers,它会自动等待(最多到Capybara.default_max_wait_time秒),直到相关元素出现(这意味着他们等待页面)载入)。它在pry控制台中工作,因为您只是等待输入下一个命令的延迟。