使用 capybara-mechanize 进行远程测试:表单提交结果不正确 URL (404 => Net::HTTPNotFound)
Remote testing with capybara-mechanize: Form submission results in incorrect URL (404 => Net::HTTPNotFound)
正在测试的应用程序:Vagrant 虚拟机上的 CakePHP 应用程序 运行
进行测试的应用程序:本地(基本空白)Rails 应用程序 capybara-mechanize
10 examples, 1 failure
失败是:
404 => Net::HTTPNotFound
假设我的虚拟机在
上安装了应用 运行
'www.domain.comx'
失败场景转到主页,登录,点击创建新内容,为其填写表格并点击保存。
测试然后查找应该在返回页面上的信息(如果保存正确)。
代码运行到表单提交没有问题,但是保存 URL 变得奇怪。
而不是从
'www.domain.comx/something/new'
至
'www.domain.comx/something/create'
即将
'www.domain.comx/something/something/create'
并抛出错误。
代码中某处有一个地方重复了 URL 中的 'something'。
是什么导致了这个问题?
我一直在尝试研究重定向和其他问题,但似乎找不到解决方案。
该应用程序已上线并已被 25 人左右的团队使用近 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>
这似乎是正确的,因为您的操作路径是相对的。对于您期望的行为,表单操作属性需要是“create”(相对)、“/something/create”(绝对)或“../something/create”(相对),具体取决于您是否在不同的 URL 上使用相同的表单,以及它在这些 URL 上的行为方式。
正在测试的应用程序:Vagrant 虚拟机上的 CakePHP 应用程序 运行
进行测试的应用程序:本地(基本空白)Rails 应用程序 capybara-mechanize
10 examples, 1 failure
失败是:
404 => Net::HTTPNotFound
假设我的虚拟机在
上安装了应用 运行 'www.domain.comx'
失败场景转到主页,登录,点击创建新内容,为其填写表格并点击保存。
测试然后查找应该在返回页面上的信息(如果保存正确)。
代码运行到表单提交没有问题,但是保存 URL 变得奇怪。
而不是从
'www.domain.comx/something/new'
至
'www.domain.comx/something/create'
即将
'www.domain.comx/something/something/create'
并抛出错误。
代码中某处有一个地方重复了 URL 中的 'something'。
是什么导致了这个问题?
我一直在尝试研究重定向和其他问题,但似乎找不到解决方案。
该应用程序已上线并已被 25 人左右的团队使用近 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>
这似乎是正确的,因为您的操作路径是相对的。对于您期望的行为,表单操作属性需要是“create”(相对)、“/something/create”(绝对)或“../something/create”(相对),具体取决于您是否在不同的 URL 上使用相同的表单,以及它在这些 URL 上的行为方式。