【问题标题】:Capybara button.click works on Console but not on a Script (Ruby; Capybara; Poltergeist)Capybara button.click 适用于控制台但不适用于脚本(Ruby;Capybara;Poltergeist)
【发布时间】:2017-07-10 21:08:28
【问题描述】:

当我在 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​​ 文件、脚本执行相同操作时,它会失败。

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

有人知道为什么吗?

谢谢

大卫

【问题讨论】:

  • 它是如何失败的? (你得到什么错误,等等)
  • @ThomasWalpole,我已经编辑了帖子。
  • 但是你怎么知道它没有提交——你一定是在某个地方出错了?在您显示的代码显示存在错误之后,您正在运行什么代码?另外,在 PRY 控制台中运行它的代码是什么?您确实需要提供足够的信息,以便我们可以看到可能导致错误的原因。
  • @ThomasWalpole 我使用 s.html 来检查 html 是否有变化。我现在进行了一些测试,甚至彻底的 s.html 看起来都一样,当我使用命令 s.find("#id") 时,我得到了预期的结果。无论如何,在“pry”上,s.html 正在显示更新的 html。我是 ESL,对不起。
  • 您不能只在trigger('click') 之后立即使用s.html,因为该页面实际上尚未加载。如果您在触发器后放置sleep(3),然后查看 s.html,它可能是正确的。您的 s.find("#id") 会自动等待 Capybara.default_max_wait_time 秒以使元素出现,因此它给了页面加载时间

标签: ruby console capybara poltergeist


【解决方案1】:

当您调用s.find_button('button').trigger('click') 时,鼠标单击会立即返回到您的代码,而“浏览器”会关闭并开始请求下一页或单击触发的任何操作。因此,如果您立即致电s.html,这将是不正确的,因为此时该页面尚未实际加载。您可以sleep 几秒钟让页面加载,或者使用 Capybara 查找器/匹配器,它会自动等待(最多 Capybara.default_max_wait_time 秒)直到相关元素出现(这意味着它们等待页面加载)。它可以在 pry 控制台中运行,因为您正在等待输入下一个命令的延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多