等待下载完成 selenium webdriver JAVA

新手上路,请多包涵

单击下载按钮后,将下载文件。在执行下一段代码之前,需要等到下载完成。

我的代码如下所示:

 Thread.sleep(2000);
driver.findElement(By.xpath("//*[@id='perform']")).click();//click for download

Thread.sleep(20000);
//code to be executed after download completes
Readfile fileobj=new Readfile();
String checkfile=fileobj.checkfilename();

如何让 webdriver 等到下载完成?

原文由 qaepk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 783
1 个回答

有点晚了,但这个问题有很多观点,我认为值得花时间回答它,以防你没有继续前进或其他人遇到它。

我也遇到了同样的问题,并认为我会分享。当时我正在用 python 开发,但同样的概念也适用。您不必使用 selenium 进行实际下载。与其单击元素开始下载,不如考虑检索链接并使用内置函数从那里继续。

您通常单击以开始下载的元素应该有一个“href”属性,您应该能够使用 selenium 读取该属性。这是指向实际文件的 url。在 python 中,它看起来像这样:

     element = driver.find_element_by_id('dl_link')
    url = element.get_attribute('href')

从这里您可以使用 http 库来调用 url。这里的重要部分是您将“stream”设置为 true,这样您就可以开始将字节写入文件。确保文件路径包含正确的文件扩展名和另一件事,大多数操作系统不允许您使用某些字符命名文件,例如反斜杠或引号,所以请注意这一点。

 def download_file(url, file_path):
    from requests import get
    reply = get(url, stream=True)
    with open(file_path, 'wb') as file:
        for chunk in reply.iter_content(chunk_size=1024):
            if chunk:
                file.write(chunk)

在下载完成之前程序不应继续,因此在完成之前不再需要轮询。

我很抱歉用不同的语言回答,在 Java 中我相信你可以使用 HttpURLConnection API。希望这可以帮助!

原文由 spatel4140 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题