如何测试以查看自定义上传器是不是有效?
Posted
技术标签:
【中文标题】如何测试以查看自定义上传器是不是有效?【英文标题】:How do I test to see that a custom uploader works?如何测试以查看自定义上传器是否有效? 【发布时间】:2014-07-01 22:51:26 【问题描述】:我正在使用 Cucumber 和 Capybara 以及 capybara-webkit 作为我的 javascript 驱动程序来测试一个 RoR 应用程序。我在客户端使用 jQuery。
我不想使用浏览器生成的默认文件选择器。这是我的 JavaScript 代码:
$(document).ready( function()
$('#upload_button').click( function()
$('#upload_file').click();
);
$('#upload_file').on( 'change', function ()
$(this).parents('form:first').submit();
);
);
这是我的标记(经过编辑以强调我的问题):
<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>
我可以通过 Capybara 测试我的文件上传是否有效,但我还需要测试我的“假”按钮是否有效。一个想法是使用Capybara点击假按钮并检查是否出现文件对话框,但我不知道如何做后者。
有什么好的测试策略?我已经将 poltergeist 视为驱动程序的可能解决方案,但仍不清楚如何测试以查看它是否确实有效。我也将 Jasmine 视为一个 javascript 测试框架,但理想情况下,我希望我当前的系统能够正常工作(即使用 Cucumber、Capybara 等)。
【问题讨论】:
"I don't want to use the default file picker generated by my browser."
那你用的是什么文件选择器?它是一些 jQuery UI 组件吗?你能展示一个你想要验证的工作示例吗? "fake button"
是什么意思?该按钮实际上只是提交表单?这个问题似乎有点模糊。
我正在创建一个按钮(参见按钮标签),然后使用 CSS,我将让文件输入消失。请参阅此小提琴以获取我正在做的示例:jsfiddle.net/xg4KT
在您的示例中,打开的对话框来自操作系统,这意味着测试对话框涉及超出您当前范围的测试。例如,在***.com/questions/9431978/… 中,OP 甚至使用Robot
向对话框发送操作系统级别的键盘命令。
我已经进行了确保文件上传工作的测试。我现在只需要一个测试来显示单击我的代理按钮实际上会启动一个文件上传事件。基本上我只需要检查文件对话框是否出现。显然,如果我能证明点击我的代理会完成整个过程会更好,但现在我会满足于看到文件上传对话框出现。
对,我的意思是自定义对话框不在浏览器的控制范围内,因此不在 Selenium 的控制范围内。我认为您必须向操作系统询问有关该对话框的信息。
【参考方案1】:
你可以尝试一些变化
-
Make a screenshot.
点击您的按钮
制作另一个屏幕截图
比较它们
但我不确定 selenium webdriver 屏幕截图是否是操作系统级别并显示选择器或浏览器级别并仅显示页面。
否则,像sikuli 这样可以让您使用屏幕截图编写脚本的选项可能是一种选择。 sikuli用的是Python,虽然我看到了一个叫sikuli的gem,但是不知道是什么状态。
您确定要像这样测试浏览器 操作系统交互。或者你只是想确保在文件类型的隐藏输入元素上触发点击事件将产生一个文件选择器。它绝不是由任何 html 规范定义的。某些浏览器操作系统组合甚至可能不会启动选择器。
如果您得出的结论是测试浏览器操作系统交互超出了您的应用程序的范围并且属于“测试系统”(类似于测试字符串),那么测试 button.click 会触发点击输入 Jasmine 就足够了。
【讨论】:
看起来this near duplicate 选择了一个很像我建议的 sikuli 的解决方案;汽车信息技术【参考方案2】:当对话框打开时,是否出现了新的 div 或其他内容?您可以通过 page.should have_css('div.fake-popup')
断言该 css 存在【讨论】:
以上是关于如何测试以查看自定义上传器是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章