如何使用selenium获取上次下载的文件



我是否可以使用selenium获取最后下载的文件。目前我正在使用selenium下载一个Excel文件,我需要获取该文件并阅读它。阅读部分已经涵盖,但我需要下载的文件路径和文件名才能阅读它。到目前为止,我还没有找到任何有用的东西。我主要在寻找一个谷歌铬解决方案,但firefox也工作。

提前感谢

import os
import glob
home = os.path.expanduser("~")
downloadspath=os.path.join(home, "Downloads")
list_of_files = glob.glob(downloadspath+"*.pptx") # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)

获取下载文件夹中最后一个文件的路径的简化解决方案。上面的代码将获得Downlodas中最新的.pptx文件的路径。根据需要更改扩展名。或者您可以选择不指定扩展

您可以使用配置文件将下载保存到修复位置。查看这些讨论:

使用Selenium和python将文件下载到指定位置
访问Firefox中的文件下载对话框

正如你提到的,你已经涵盖了阅读部分。你可以从固定的位置读取。

以下是可以帮助解决上述查询的代码片段:

**Changes in driver file:**
protected File downloadsDir = new File("");
if (browser.equalsIgnoreCase("firefox")) 
{
    downloadsDir = new File(System.getProperty("user.dir") + File.separatorChar + "downloads");
    if (!downloadsDir.exists()) 
     {
        boolean ddCreated = downloadsDir.mkdir();
        if (!ddCreated) {
            System.exit(1);
        }
    }
}

/*Firefox browser profile*/
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("browser.download.folderList", 2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
firefoxProfile.setPreference("browser.download.dir", downloadsDir.getAbsolutePath());
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain,application/octet-stream");
**Empty the download directory[Can be implemented as @BeforeClass]:**
public void emptyDownloadsDir()
{
    // Verify downloads dir is empty, if not remove all files.
    File[] downloadDirFiles = downloadsDir.listFiles();
    if (downloadDirFiles != null) {
        for (File f : downloadDirFiles) {
            if (f.exists()) {
                boolean deleted = FileUtility.delete(f);
                assertTrue(deleted, "Files are not deleted from system local directory" + downloadsDir + ", skipping the download tests.");
            }
        }
    }
}

**Check the Latest downloaded file:**
/*Test file*/
protected static String EXCEL_FILE_NAME= Test_Excel_File.xls;
protected static int WAIT_IN_SECONDS_DOWNLOAD = 60;
// Wait for File download.
int counter = 0;
while (counter++ < WAIT_IN_SECONDS_DOWNLOAD && (downloadsDir.listFiles().length != 1 || downloadsDir.listFiles()[0].getName().matches(EXCEL_FILE_NAME))) {
    this.wait(2);
}
// Verify the downloaded File by comparing name.
File[] downloadDirFiles = downloadsDir.listFiles();
String actualName = null;
for (File file : downloadDirFiles) {
    actualName = file.getName();
    if (actualName.equals(EXCEL_FILE_NAME)) {
        break;
    }
}
assertEquals(actualName, EXCEL_FILE_NAME, "Last Downloaded File name does not matches.");

注意,共享答案是特定于Chrome浏览器的,并且将返回最新下载的文件。但我们可以对其他浏览器和所有文件进行相应的修改。

比方说,我们如何在浏览器中测试最新下载的文件。

  1. 在现有测试浏览器中打开"新建"选项卡窗口
  2. 转到下载(chrome://downloads/)
  3. 检查是否存在所需的文件是否

现在在硒中使用java也是一样的

driver.get("chrome://downloads/");
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement element = (WebElement) js.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('#mainContainer > iron-list > downloads-item').shadowRoot.querySelector('#content')");
String latestFileName=  element.getText();

相关内容

  • 没有找到相关文章

最新更新