尝试单击按钮/提交表单时Capybara rspec不一致的行为

时间:2013-12-09 04:43:54

标签: button rspec capybara

这导致我浪费时间,我希望我知道为什么。我发现很多例子(并非所有答案)都没有提交表格,它在网页上有效,但在水豚中没有。像find / xpath这样的东西在irb中工作。

网页 带有上传按钮的文件框,附加文件有效(我正在使用poltergeist渲染来查看附加的文件名)

调试/选项已尝试

  • find()有效,例如在irb中它返回一个对象:Capybara Element tag = input
  • 如果我尝试“访问”它返回{“status”=>“失败”,“点击”=> {“x”=> 124,“y”=> 283}} [无在行为调用的日志中。确定在开发环境中工作]
  • click_on'上传'失败:{“status”=>“失败”,“点击”=> {“x”=> 124,“y”=> 283}}
  • find_button('上传')。点击:{“状态”=>“失败”,“点击”=> {“x”=> 124,“y”=> 283}}
  • find(“#upload_bill_button1”)。触发器(“click”):返回“click”
  • 我尝试过javascript checkBill()的exec_script。 page.execute_script('checkBill()'):返回nil
  • find(:css,'#upload_bill_button1')。点击。返回:{“x”=> 124,“y”=> 282}

日志中没有任何内容显示操作正在完成

我有

  • js => true为javascript提交(首先进行测试,代码如下)。
  • 确保所有ID都是唯一的
  • capybara :: DSL已添加

系统设置

  • Mac ox X
  • poltergeist(为我所有其他测试工作)
  • ruby​​ 1.9.3
  • 幻影1.9.2

还有进一步的调试来找出问题吗?其他日志我不见了? 任何指导非常感谢

      <div class="row">
        <div class="large-10 columns" >
          <%=form_tag( "/upload_bill", :method=>:post, :multipart => true, :id => "form_upload1") do -%>
            <fieldset>
              <legend>Select your bill file</legend>
              <%=file_field_tag 'bill', :onclick => "checkBill()" -%>    
              <div class="large-2 columns" >
                <!-- TODO: make the browse button the zurb class type -->
                <%- if params[:action].eql?( 'index')%>
                  <%=submit_tag "Upload", :onclick => "checkBill();return false;", :id => "upload_bill_button1", :class => "button postfix" -%>
                <% end %>
              </div>
            </fieldset>
          <% end %>
        </div>
      </div>
      <%- if params[:action].eql?('import_bill')%>
        <%=link_to (image_tag "/images/btn-uploadbill.png"), "#", :onclick=>"checkBill();return false;", :id => "upload_bill_button2" -%>
        <%=link_to (image_tag "/images/btn-cancel.png"), root_path %>
      <%- end %>
      <script type="text/javascript">
          function checkBill(){
            var bill = $("#bill").val();
            if(bill.split('.').reverse()[0]=="csv"||bill.split('.').reverse()[0]=="pdf"||bill.split('.').reverse()[0]=="pdftranslatedtxt"){
            //success bill supported, data send to app
              jQuery('#form_upload1').submit();
            }
            else if(bill==""){return false; }
            else{// return error wrong format of bill alert('We only currently support PDF or CSV file format.')
            }
          }
      </script>

更新 我有代码在这个页面的某个实例上工作。我还有一种情况,其中find / trigger正在工作(日志显示操作,但是poltergeist:render显示没有页面更新)

所以,rspec函数是

def new_import_bill(billfile)
  path = DATA_TEST+billfile
  attach_file("bill", path)    
  find("#upload_bill_button1").trigger("click")
end

我调试了页面输出,例如

puts page.html

并且有效的页面html和不起作用的页面之间没有区别。但在某些情况下它拒绝单击或者poltergeist.render不会更新。

根据这个poltergeist bug(https://github.com/jonleighton/poltergeist/issues/209)我试过删除full:true。没有区别

还有其他人遇到过这些不一致吗?

0 个答案:

没有答案