浏览器下载
在 Watir 中,下载存在问题,因为它们需要与操作系统交互,而 Watir 自动化的是浏览器,而不是操作系统。因此,如果出现任何文件对话框,Watir 将无法处理它们。特别是如果您在远程机器上执行测试,请意识到下载将被发送到该机器,而不是执行 Ruby 代码的机器,这使得有效地检索文件变得不可能。此外,实际验证文件内容并非易事,特别是对于像 PDF 这样的文件。
因此,在我们开始讨论处理下载的策略之前,请仔细考虑您是否真的需要下载文件。
- 验证链接是否存在就足够了吗?
- 您可以使用 HTTP 库而不是通过浏览器下载文件吗?
- 您可以在更低级别的单元测试或集成测试中测试您需要测试的内容,而不是在浏览器中测试吗?
有关此方面的更多想法,请阅读 这篇文章。它比较旧,并且侧重于 Selenium,但要点仍然相关。
如果您的经理坚持您必须通过浏览器测试下载,您可以使用参数初始化浏览器对象,告诉浏览器将文件自动下载到特定目录,而不是提示操作系统。
Firefox
download_directory = "#{Dir.pwd}/downloads"
download_directory.tr!('/', '\\') if Selenium::WebDriver::Platform.windows?
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.folderList'] = 2 # custom location
profile['browser.download.dir'] = download_directory
profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv,application/pdf'
b = Watir::Browser.new :firefox, profile: profile
在 Firefox 中,通过在地址栏中输入“about:config”可以找到这些 Firefox 选项的完整列表。
如果您想知道如何确定文件类型(例如 application/pdf),您可以阅读 以下博客文章,以获取分步指南。
Chrome
prefs = {
download: {
prompt_for_download: false,
default_directory: '/path/to/dir'
}
}
b = Watir::Browser.new :chrome, options: {prefs: prefs}