Capybara/Selenium Webdriver + DataTables 表现不佳

Capybara/Selenium Webdriver + DataTables not playing nicely

我有一个页面,一旦加载,就会在两个不同的 table 上调用 DataTables。但是,在页面加载时,第二个 table 出错了。这是错误:

DataTables warning: table id=DataTables_Table_1 - Ajax error. For more information about this error, please see http://datatables.net/tn/7

烦人的是,如果我在 Capybara 中加载页面后立即放置 debugger,我可以单击错误将其关闭,然后使用我打开的按钮手动重新加载 DataTable 中的数据页面,它工作正常。同样奇怪的是,页面上的第一个 DataTable 加载正常(并且它在破坏之前调用了 DataTable() )。我认为 returns 用于填充 table 的信息可能是服务器端的问题,但事实证明它永远不会访问服务器(直到我按下重新加载按钮)。如果我加载另一个只有一个 DataTable 的页面,它会显示相同的错误。这很奇怪,因为页面上的第一个 table 有两个 table 加载,但是页面上有一个 table 的 table 会自行中断。

有人见过这样的事吗?我会 post 我的 Capybara 代码,但它实际上只是访问导致问题的页面,一点也不奇怪。

一开始我以为是 JS 调用太快了之类的问题,但是一页有一个 table 坏了,而另一页只有第二个 table 坏了,有点奇怪。同样,它永远不会在页面加载时访问服务器(它应该是),所以它在后端什么也没有。不知道从哪里开始。

经过更多调试后,我意识到发生了一个微妙的(未在日志中显示,因为服务器日志未在我的测试环境中打印)414 错误。 Capybara 显然会阻止长 GET 请求(尽管现在主流浏览器都支持它们),所以我在这里发布了一个问题:https://github.com/jnicklas/capybara/issues/1467

我不想使用 POST 作为索引路由 :)

从 2.7.0 版本开始,水豚原生支持服务器配置。

只需将 gem 'puma' 添加到您的 Gemfile 并将以下行添加到 rails_helper.rb :

Capybara.server = :puma

这将解决 414(请求 URI 太大)错误,Datatables 将与 Capybara 一起正常工作。