4

我正在构建一个 Web 应用程序,该应用程序涉及将文件从用户系统拖放到浏览器窗口中。

我想使用可用的无头浏览器之一(用于测试驱动开发)自动化用户与 UI 的交互,以便虚拟 DOM 获取文件删除事件。

我花了两个小时寻找开箱即用的解决方案,但没有任何成功。唯一可以自动化的是使用 input[type=file] 上传单个文件。那不是我想要的。

是否有适用于 Mac OS X 或 Linux 的现成解决方案?

4

1 回答 1

1

我知道没有好的解决方案,但我有几个解决方法:

您可以在 Linux 上的 VM 或 Xnest 或 VNC 服务器中运行浏览器。这给了你一个用户界面。VNC 等协议还允许您模拟鼠标,因此您可以打开文件浏览器并真正将文件拖过来。

优点:做真实的事情。
缺点:易碎。很多工作要设置。

你到底在测试什么?浏览器中的文件上传组件?或者处理服务器上的文件?

如果您使用现有/盒装组件进行多文件上传,那么您为什么要测试它?给你写的人不测试吗?为什么要复制这种努力?

如果您只关心服务器是否正确处理文件,请使用 HTTP 客户端库手动上传。如有必要,使用像Charles这样的 HTTP 代理来查看真实客户端和服务器之间发生的情况。

如果你想测试你的应用程序和小部件的交互,事情就会变得棘手。要对此进行测试,您需要在浏览器中启用日志记录/调试,以查看在放置期间触发了哪些事件。JavaScript 允许您创建任何事件。对于 phantomjs,请尝试--webdriver-loglevel=DEBUG

当您知道“drop”事件的样子后,创建一个人工事件并将其发送到小部件。

[编辑]如果您编写自己的文件上传小部件,那么我建议将“drop”事件记录到控制台。对于许多现代浏览器,您将在控制台中获得一个可以检查的活动元素。使用它来找出使用了哪些对象以及每个插槽中的值是什么。

这应该为您提供足够的信息来从测试用例创建这样的事件。我建议在测试期间使用 jQuery,因为它有一个很好的框架来从头开始构建事件。

于 2013-08-13T13:15:40.123 回答