单击下载按钮后,文件将被下载。在执行下一段代码之前,它需要等待下载完成。
我的代码如下所示:
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等待下载完成?
发布于 2016-02-16 06:39:47
有点晚了,但这个问题有很多观点,我认为如果你还没有继续前进或者其他人遇到了这个问题,花点时间来回答它是值得的。
我也遇到了同样的问题,我想我应该分享一下。我当时正在用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。希望这能有所帮助!
发布于 2015-11-16 21:15:50
do {
filesize1 = f.length(); // check file size
Thread.sleep(5000); // wait for 5 seconds
filesize2 = f.length(); // check file size again
} while (filesize1 != filesize2);
其中f为文件,文件大小为长
发布于 2017-01-04 01:19:56
我使用Scala实现自动化,但是到Java的移植应该很简单,因为我在那里使用的是java Selenium类。所以,首先你需要的是:
import com.google.common.base.Function
import java.nio.file.{Files, Paths, Path}
def waitUntilFileDownloaded(timeOutInMillis:Int)={
val wait:FluentWait[Path] = new FluentWait(Paths.get(downloadsDir)).withTimeout(timeOutInMillis, TimeUnit.MILLISECONDS).pollingEvery(200, TimeUnit.MILLISECONDS)
wait.until(
new Function[Path, Boolean] {
override def apply(p:Path):Boolean = Files.list(p).iterator.asScala.size > 0
}
)
}
然后,在我需要下载xls文件的测试套件中,我只有以下内容:
def exportToExcel(implicit driver: WebDriver) = {
click on xpath("//div[contains(@class, 'export_csv')]")
waitUntilFileDownloaded(2000)
}
我希望你已经有了这个想法。FluentWait是一个非常有用的抽象,虽然它是Selenium的一部分,但在满足某些条件之前,您可以在任何需要等待轮询的地方使用它。
https://stackoverflow.com/questions/22714112
复制相似问题