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

时间:2018-06-25 14:36:16

标签: ruby-on-rails capybara poltergeist

我有一个发送带有多个提交按钮的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

对于开发模式和使用Selenium驱动程序,它返回true,当我使用poltergeist javascript_driver时,它变为无头模式。在这种情况下,该值不存在。

我已经使用click_on“保存”命令对其进行了测试

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

非常感谢您的建议。

2 个答案:

答案 0 :(得分:1)

我猜该提交是使用实际的PATCH请求(而不是通过将隐藏的_method参数设置为'PATCH'的POST请求)进行AJAX驱动的。

由于QtWebkit的版本,PhantomJS(由Poltergeist用作其“浏览器”)是内置的,因此存在一个问题,即实际补丁请求的主体始终为空。基于QtWebkit(已经过EOL),PhantomJS大约相当于6-7年的浏览器,并且越来越无法测试现代JS驱动的应用程序。仅使用带有无头铬的Selenium来进行无头测试可能会更好。

答案 1 :(得分:0)

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

  

您可以将button标记用作常规的提交标记,但是旧版浏览器不支持该标记

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

此外,您正在update方法中混合考虑问题–实际上,它仅应负责更新相关记录,而不是提交记录。您最好使用其他控制器和button_to来实现“提交”功能。 More reading主题。