首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Watir-Webdriver等待下载完成

Watir-Webdriver等待下载完成
EN

Stack Overflow用户
提问于 2012-01-11 08:44:46
回答 6查看 3.8K关注 0票数 11

我使用的是Watir-Webdriver和火狐,以及watirwebdriver.com网站上推荐的方法来自动下载文件。这涉及到在FireFox中为特定文件类型设置FireFox about:config参数以禁用下载对话框。这很好用,但现在我正在尝试弄清楚如何最好地确定文件下载何时完成(有些需要几秒钟,有些需要几分钟),这样我就可以注销网站并进入下一个测试。似乎由于浏览器中没有留下任何视觉线索,我可能不得不监视下载目录中的文件。任何选择都将不胜感激。

EN

回答 6

Stack Overflow用户

发布于 2013-09-02 02:53:08

Chrome存储未完成的下载,并添加了.crdownload文件扩展名。检查下载目录是否有以.crdownload结尾的文件,这应该会告诉您下载是否仍在进行中

票数 4
EN

Stack Overflow用户

发布于 2012-01-12 01:14:07

也许您可以跟踪文件大小,以查看它何时停止更改几秒钟。

票数 2
EN

Stack Overflow用户

发布于 2012-11-17 06:48:56

我不喜欢仅仅看文件大小,它感觉很脆弱,所以我最终使用lsof命令来检测何时没有进程保持文件打开,然后读取文件。更好的是,由于网络问题导致的下载暂停不会导致间歇性错误,但更糟糕的是(?)因为它不是可移植的,并且由lsof命令外壳。

代码看起来像这样:

代码语言:javascript
复制
# Watch the download dir for new files, and read the first new file that
# appears.
def read_newest_download
  existing_files = list_files_in_download_dir
  new_files = []

  Timeout::timeout(DOWNLOAD_TIMEOUT) do
    while (new_files = list_files_in_download_dir - existing_files).empty?
      sleep 0.25
    end
  end

  if 1 == new_files.size
    wait_for_file_to_be_closed(new_files.first)
    File.read(new_files.first)
  else
    fail "Found #{new_files.size} new files."
  end
end

# Ignore files ending in .part, which is common for temp files in Firefox.
def list_files_in_download_dir
  raise ArgumentError, "No download dir specified" unless @opts[:download_dir]
  @_download_glob ||= File.join(@opts[:download_dir], "*")

  # Ignore files ending in .part as they're temporary files from Firefox.
  Dir[@_download_glob].entries.reject {|e| /\.part$/ === e}
end

def wait_for_file_to_be_closed(filename)
  begin
    sleep 0.25
  end until `lsof #{filename}`.blank?
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8812708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档