发送补丁请求时无头模式缺少按钮名称选项

Button name option is missing for headless mode when send patch request

我有一个发送带有多个提交按钮的 PATCH 请求的表单

button_tag "Save", type: "submit", class: "btn btn-secondary", name:  "commit", value: "save"
button_tag "Submit", type: "submit", class: "btn btn-secondary", name:  "button", value: "submit"

有检查点击按钮值的控制器动作。

def update
  params[:commit].to_s.downcase == "save"
  ....
end

它 returns 对于开发模式和使用 selenium 驱动程序是正确的,当我使用 poltergeist javascript_driver 时它会中断无头模式。在这种情况下,该值不存在。

我已经使用 click_on "Save" 命令进行了测试

无头浏览器有什么问题,我最终无法获得价值来比较点击了哪个按钮?

非常感谢您的建议。

我认为这是一个浏览器支持问题。查看 button_tag 的文档,它指出:

You can use the button tag as a regular submit tag but it isn't supported in legacy browsers

您最好使用复选框来指示此处的状态差异。

此外,您在 update 方法中混合了关注点——它实际上应该只负责更新相关记录,而不是提交记录。您最好使用额外的控制器和 button_to 来实现 "submit" 功能。 More reading 个主题。

我猜提交是 AJAX 使用实际 PATCH 请求驱动的(与传递隐藏 _method 参数设置为 [=16= 的 POST 请求相反) ]).

由于 QtWebkit PhantomJS 的版本(Poltergeist 将其用作 "browser")是用它构建的,因此存在实际补丁请求的主体始终为空的问题。基于 QtWebkit(已停产)使 PhantomJS 大约相当于一个 6-7 岁的浏览器,并且越来越不能测试现代 JS 驱动的应用程序。你可能会更好地使用 Selenium with headless chrome 来进行无头测试。