浏览器下载  

在 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}

最后更新时间:2018 年 8 月 2 日