【问题标题】:Remote testing with capybara-mechanize: Form submission results in incorrect URL (404 => Net::HTTPNotFound)使用 capybara-mechanize 进行远程测试:表单提交导致 URL 不正确 (404 => Net::HTTPNotFound)
【发布时间】:2018-06-08 14:42:47
【问题描述】:

正在测试的应用程序:在 Vagrant vm 上运行的 CakePHP 应用程序

进行测试的应用程序:带有capybara-mechanize 的本地(基本上是空白)Rails 应用程序

 10 examples, 1 failure

失败是:

 404 => Net::HTTPNotFound

假设我的虚拟机正在运行应用程序

 'www.domain.comx'

失败场景进入首页,登录,点击create new things,填写表单,点击save。

然后,测试会查找返回页面上应包含的信息(如果保存正确)。

代码运行到表单提交没有问题,但是保存的URL变得奇怪。

而不是从

 'www.domain.comx/something/new'

 'www.domain.comx/something/create'

会的

 'www.domain.comx/something/something/create'

并抛出错误。

在代码中的某个地方,它复制了 URL 中的“某物”。

什么可能导致这个问题?

我一直在尝试研究重定向和事情,但似乎找不到解决方案。

该应用已上线,并且已被 25 人(ish)人组成的团队使用了近 5 年。测试应该通过了。

这是跟踪,以防有帮助:

 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:125:in `rescue in process_remote_request'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:103:in `process_remote_request'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:43:in `block (2 levels) in <class:Browser>'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:69:in `process'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:41:in `process_and_follow_redirects'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:32:in `submit'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/form.rb:80:in `submit'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/node.rb:8:in `click'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/element.rb:143:in `block in click'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/base.rb:85:in `synchronize'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/element.rb:143:in `click'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/actions.rb:25:in `click_link_or_button'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/session.rb:810:in `block (2 levels) in <class:Session>'
 # /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/dsl.rb:50:in `block (2 levels) in <module:DSL>'

这是表单 html 的简化版本:

 <form id="create" method="post" action="something/create">

  <div class="form-group col-md-4">
   <div class="form-group">
    <label for="usuario_email">E-mail *</label>
    <input type="email" name="data[usuario][email]" id="usuario_email" class="form-control">
   </div>
  </div>

  <div class="form-group col-md-4">
   <label for="usuario_nome">Nome *</label>
   <input type="text" name="data[usuario][nome]" id="usuario_nome" class="form-control">
  </div>

  <div class="form-group col-md-4">
   <label for="usuario_telefone">Telefone *</label>
    <input type="text" name="data[usuario][telefone]" id="usuario_telefone" class="form-control" alt="phone">
  </div>

  <div class="form-group col-md-6">
   <div class="pull-right">
    <button type="submit" class="btn btn-success btn-lg" id="salvar">
     <span class="glyphicon glyphicon-ok"></span>
    </button>
   </div>
  </div>

 </form>

【问题讨论】:

  • 表单的 HTML 是什么?
  • 我刚刚将表单的 html 添加到问题中。

标签: forms capybara http-status-code-404 mechanize


【解决方案1】:

这似乎是正确的,因为您的操作路径是相对的。对于您期望的行为,表单操作属性需要是“create”(相对)、“/something/create”(绝对)或“../something/create”(相对),具体取决于您是否是在不同的 URL 上使用相同的表单,以及它在这些 URL 上的行为方式。

【讨论】:

  • 完美。谢谢!将表单的操作更改为“/something/create”有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2019-06-20
  • 2012-12-19
  • 2017-06-06
相关资源
最近更新 更多