【发布时间】:2023-03-05 04:34:01
【问题描述】:
我正在使用 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
-
在您的示例中,打开的对话框来自操作系统,这意味着测试对话框涉及超出您当前范围的测试。例如,在stackoverflow.com/questions/9431978/… 中,OP 甚至使用
Robot向对话框发送操作系统级别的键盘命令。 -
我已经进行了确保文件上传工作的测试。我现在只需要一个测试来显示单击我的代理按钮实际上会启动一个文件上传事件。基本上我只需要检查文件对话框是否出现。显然,如果我能证明点击我的代理会完成整个过程会更好,但现在我会满足于看到文件上传对话框出现。
-
对,我的意思是自定义对话框不在浏览器的控制范围内,因此不在 Selenium 的控制范围内。我认为您必须向操作系统询问有关该对话框的信息。
标签: ruby-on-rails selenium selenium-webdriver capybara capybara-webkit