Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何测试自定义上传程序是否正常工作?_Ruby On Rails_Selenium_Selenium Webdriver_Capybara_Capybara Webkit - Fatal编程技术网

Ruby on rails 如何测试自定义上传程序是否正常工作?

Ruby on rails 如何测试自定义上传程序是否正常工作?,ruby-on-rails,selenium,selenium-webdriver,capybara,capybara-webkit,Ruby On Rails,Selenium,Selenium Webdriver,Capybara,Capybara Webkit,我正在测试一个RoR应用程序,使用Cucumber和Capybara以及Capybara webkit作为我的javascript驱动程序。我在客户端使用jQuery 我不想使用浏览器生成的默认文件选择器。这是我的javascript代码: $(document).ready( function() {

我正在测试一个RoR应用程序,使用Cucumber和Capybara以及Capybara webkit作为我的javascript驱动程序。我在客户端使用jQuery

我不想使用浏览器生成的默认文件选择器。这是我的javascript代码:

$(document).ready( function() {                                                                                                                                                                            
  $('#upload_button').click( function() {                                                                                                                                                                  
    $('#upload_file').click();                                                                                                                                                                             
  });                                                                                                                                                                                                      

  $('#upload_file').on( 'change', function () {                                                                                                                                                            
    $(this).parents('form:first').submit();                                                                                                                                                                
  });                                                                                                                                                                                                      
});
这是我的标记(编辑以强调我的问题):


上传客人名单。。。
我可以通过水豚来测试我上传的文件是否有效,但我还需要测试我的“假”按钮是否有效。一个想法是使用水豚点击假按钮并检查是否出现文件对话框,但我不知道如何执行后者


有什么好的测试策略?我已经将恶作剧视为驾驶员的一种可能解决方案,但仍不清楚如何进行测试以确定这一方法是否有效。我还将Jasmine视为javascript测试框架,但理想情况下,我希望我当前的系统能够正常工作(即使用Cucumber、Capybara等)。

您可以尝试

  • 点击你的按钮
  • 再做一个截图
  • 比较它们
  • 但我不确定SeleniumWebDriver屏幕截图是否是操作系统级的,是否显示选择器级或浏览器级,是否只显示页面

    否则,类似的东西可以让你用截图编写脚本,这可能是一种选择。Sikuli使用Python,虽然我看到了一个名为Sikuli的gem,但我不知道它处于什么状态


    您确定要像这样测试浏览器操作系统交互吗。或者您只是想确保在文件类型的隐藏输入元素上触发click事件将生成一个filepicker。它不是由任何HTML规范定义的。某些浏览器操作系统组合甚至可能不会启动选择器


    如果您得出结论,测试浏览器操作系统交互超出了应用程序的范围,属于“测试系统”的范畴(类似于测试字符串),那么测试按钮。单击启动Jasmine的输入就足够了。

    当对话框打开时,是否有新的div或显示的内容?您可以通过一个页面声明css在那里。应该有_css('div.fake-popup')

    “我不想使用浏览器生成的默认文件选择器。”
    那么您使用的是什么文件选择器?它是jQueryUI组件吗?你能给出一个你想要验证的工作示例吗?你所说的“假按钮”是什么意思?按钮实际上只是提交表单?这个问题似乎有点模糊。我正在创建一个按钮(参见按钮标签),然后,使用CSS,我将使文件输入消失。请看这个提琴,了解我正在做的一个示例:在您的示例中,打开的对话框来自操作系统,这意味着测试对话框涉及到超出当前范围的测试。例如,OP甚至使用
    Robot
    向对话框发送操作系统级的键盘命令。我已经做了一个测试,确保文件上传工作正常。我现在只需要一个测试来显示单击我的代理按钮实际上会启动文件上载事件。基本上我只需要检查文件对话框是否出现。显然,如果我能显示单击我的代理贯穿整个过程,那会更好,但现在我只会满意地看到文件上传对话框出现。对,我的观点是,自定义对话框不在浏览器的控制范围内,因此也不在Selenium的控制范围内。我想你必须向操作系统询问关于该对话框的信息。看起来你选择了一个与我提议的sikuli解决方案非常相似的解决方案;奥托伊特
    <form action="/guests/upload_list" enctype="multipart/form-data" method="post">
      <input class="invisible" id="upload_file" name="upload_file" type="file">
      <button id="upload_button" name="button" type="button">Upload guest list...</button>
    </form>