跳至页脚内容
使用IRONPDF

如何在 Selenium WebDriver C# 中使用 IronPDF 阅读 PDF 文件

在自动测试中,测试 PDF 文档是一项独特的挑战。 Selenium WebDriver 擅长与网页元素交互,但无法直接访问 PDF 内容,因为 PDF 文件是以二进制流而非 DOM 元素的形式呈现的。 开发人员往往需要使用多个库、解析下载的文件或管理额外的配置资产(如用于环境设置的 XML 文件)。 IronPDF for Java 提供了一个精简、强大的 PDF 库解决方案,可与 Selenium WebDriver 无缝集成,让您只需几行代码即可提取文本并验证 PDF 数据,这与 Java 项目工作流程形成了鲜明对比--在 Java 项目工作流程中,开发人员经常使用 Apache PDFBox 以及多个 import java 甚至 import org 语句。 这使得它在处理现代网络应用程序生成的新 PDF 文档时特别有用。 文章将介绍如何使用 IronPDF 在 Selenium WebDriver C# 中读取 PDF 文件。

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-1.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 1 - IronPDF

为什么 Selenium 需要 PDF 方面的帮助?

当 PDF 文件在浏览器中打开时,Selenium 可以对其进行导航,甚至可以与浏览器的 PDF 查看器窗口进行交互,但无法访问 PDF 文档中的实际内容。 出现这种情况是因为 PDF 是作为嵌入式对象或插件呈现的,而不是 Selenium 可以通过其 WebDriver 协议查询的 HTML 元素。

传统的方法是将 PDF 文件下载到本地计算机,然后使用单独的库在 Selenium WebDriver C# 中提取 PDF 中的文本。 这种多步骤的过程会带来复杂性,需要管理多个依赖关系,而且往往会导致测试代码脆弱,难以在持续集成环境中进行维护。 与需要 Apache PDFBox JAR 文件和复杂文件管理的 Java 解决方案不同,IronPDF for .NET 提供了一个 .NET 原生解决方案。

IronPdf 巧妙地弥补了这一不足。 作为一个全面的 .NET PDF 库,它可在您的 C# 测试自动化框架内直接处理 PDF 操作。 无论您是需要验证发票总额、验证报告内容还是提取表单数据,IronPDF 都能提供高效完成这些任务的工具,同时保持 PDF 格式的测试代码整洁、可读性强。

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-2.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 2 - 功能

快速设置指南:IronPdf 与 Selenium 的结合。

开始在 Selenium WebDriver C# 中读取 PDF 文件需要最少的设置,就像我们在 Java 中安装 Apache PDFBox JAR 一样。 首先,通过 NuGet 软件包管理器安装必要的软件包:

Install-Package IronPDF
Install-Package Selenium.WebDriver
Install-Package Selenium.WebDriver.ChromeDriver
Install-Package IronPDF
Install-Package Selenium.WebDriver
Install-Package Selenium.WebDriver.ChromeDriver
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-3.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 3 - 安装

安装软件包后,用以下代码中的基本命名空间配置您的测试类:

using IronPdf;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.IO;
using IronPdf;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.IO;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这个简单的设置提供了在 Selenium C# 中自动进行 PDF 测试和读取 PDF 内容所需的一切。 IronPDF 适用于不同的 .NET Framework,支持跨平台部署,因此适用于各种测试环境,包括 Docker 容器和 CI/CD 管道。

ChromeDriver 将处理浏览器自动化,而 IronPDF 则管理从 PDF 文档中提取文本的所有 PDF 相关操作。 当您需要在自动测试中验证 PDF 内容时,这种关注点的分离可以保持代码的有序性和可维护性。 无需像使用 Apache PDFBox 那样配置复杂的构建路径设置或管理外部 JAR 文件。

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-4.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 4 - 如何使用 IronPDF 在 Selenium WebDriver C# 中读取 PDF 文件。

使用 Selenium 简化从 URL 直接读取 PDF 的过程

当您需要在 Selenium WebDriver C# 中从 PDF 中提取文本时,直接从 URL 读取 PDF 内容完全省去了下载步骤。 在许多测试场景中,您会捕获代表 PDF 地址的字符串 URL 并将其直接传递给 IronPDF。 开发人员通常将这些逻辑封装在可重复使用的辅助方法中,例如名为 public string ReadPdfContent 的实用程序函数,以便在自动测试框架中集中提取 PDF。

以下是示例:

// Initialize Chrome driver
var driver = new ChromeDriver();
// Navigate to a webpage containing a PDF link
driver.Navigate().GoToUrl("https://ironpdf.com/");
// Find and get the PDF URL
IWebElement pdfLink = driver.FindElement(By.CssSelector("a[href$='.pdf']"));
string pdfUrl = pdfLink.GetAttribute("href");
// Use IronPDF to read the PDF directly from URL
var pdf = PdfDocument.FromUrl(new Uri(pdfUrl));
string extractedText = pdf.ExtractAllText();
// Validate the content
if (extractedText.Contains("IronPDF"))
{
    Console.WriteLine("PDF validation passed!");
}
// Clean up
driver.Quit();
// Initialize Chrome driver
var driver = new ChromeDriver();
// Navigate to a webpage containing a PDF link
driver.Navigate().GoToUrl("https://ironpdf.com/");
// Find and get the PDF URL
IWebElement pdfLink = driver.FindElement(By.CssSelector("a[href$='.pdf']"));
string pdfUrl = pdfLink.GetAttribute("href");
// Use IronPDF to read the PDF directly from URL
var pdf = PdfDocument.FromUrl(new Uri(pdfUrl));
string extractedText = pdf.ExtractAllText();
// Validate the content
if (extractedText.Contains("IronPDF"))
{
    Console.WriteLine("PDF validation passed!");
}
// Clean up
driver.Quit();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码首先使用 Selenium 浏览网页并定位 PDF 链接。 GetAttribute("href") 方法以字符串形式捕获 PDF 的 URL。 IronPDF 的 PdfDocument.FromUrl() 方法会直接从该 URL 加载 PDF - 在 Selenium 中读取 PDF 文件无需下载。 ExtractAllText() 方法可检索每个页面中的所有文本内容,然后您可以根据预期值对其进行验证。

这种方法尤其适用于托管在公共 URL 或应用程序中的 PDF。 对于受密码保护的文档,IronPDF 可接受凭证作为附加参数,在保持安全性的同时实现 PDF 数据的自动测试。 解决方案无需复杂的 XML 配置文件即可正常工作。

输出

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-5.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 5 - 控制台输出。

自动下载和处理 PDF 文件

在使用 Selenium WebDriver C# 阅读 PDF 文件时,有时需要先下载 PDF,尤其是在处理动态生成的文档或验证后内容时。 配置 Chrome 浏览器,将 PDF 文件自动下载到特定目录:

// Configure Chrome options for automatic PDF download
var chromeOptions = new ChromeOptions();
chromeOptions.AddUserProfilePreference("download.default_directory", @"C:\PDFTests");
chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
// Initialize driver with options
var driver = new ChromeDriver(chromeOptions);
string appUrl = "https://example.com/reports";
// Navigate and trigger PDF download
driver.Navigate().GoToUrl(appUrl);
driver.FindElement(By.Id("downloadReport")).Click();
// Wait for download to complete (implement appropriate wait strategy)
System.Threading.Thread.Sleep(3000);
// Read the downloaded PDF with IronPDF
string pdfPath = @"C:\PDFTests\report.pdf";
var pdf = PdfDocument.FromFile(pdfPath);
string content = pdf.ExtractAllText();
// Perform validations
bool hasExpectedData = content.Contains("Quarterly Revenue: $1.2M");
Console.WriteLine($"Revenue data found: {hasExpectedData}");
// Extract content from specific page
string page2Content = pdf.ExtractTextFromPage(1); // Zero-indexed
// Clean up
File.Delete(pdfPath);
driver.Quit();
// Configure Chrome options for automatic PDF download
var chromeOptions = new ChromeOptions();
chromeOptions.AddUserProfilePreference("download.default_directory", @"C:\PDFTests");
chromeOptions.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
// Initialize driver with options
var driver = new ChromeDriver(chromeOptions);
string appUrl = "https://example.com/reports";
// Navigate and trigger PDF download
driver.Navigate().GoToUrl(appUrl);
driver.FindElement(By.Id("downloadReport")).Click();
// Wait for download to complete (implement appropriate wait strategy)
System.Threading.Thread.Sleep(3000);
// Read the downloaded PDF with IronPDF
string pdfPath = @"C:\PDFTests\report.pdf";
var pdf = PdfDocument.FromFile(pdfPath);
string content = pdf.ExtractAllText();
// Perform validations
bool hasExpectedData = content.Contains("Quarterly Revenue: $1.2M");
Console.WriteLine($"Revenue data found: {hasExpectedData}");
// Extract content from specific page
string page2Content = pdf.ExtractTextFromPage(1); // Zero-indexed
// Clean up
File.Delete(pdfPath);
driver.Quit();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Chrome 浏览器首选项可确保 PDF 自动下载到本地计算机,而无需在浏览器中打开。 当您需要从 PDF 文件中提取文本时,plugins.always_open_pdf_externally 设置可绕过 Chrome 浏览器的内置 PDF 查看器。 通过 Selenium 触发下载后,IronPDF 会高效读取本地文件,提供您可以解析验证的返回输出。

ExtractTextFromPage()方法允许从特定页面有针对性地提取内容,这在验证多页面文档(不同页面显示不同信息)时非常有用。 当您在 Selenium WebDriver C# 中验证 PDF 内容时,这种细粒度控制有助于创建更精确的测试。 对于处理大型 PDF 文件,IronPDF 提供了保持性能的优化方法。

如何在测试中验证 PDF 内容?

在 Selenium WebDriver C# 中读取 PDF 数据时,有效的 PDF 验证不仅仅是简单的文本提取。 以下是如何使用 IronPDF 的文本提取方法实现强大的内容验证:

public bool ValidatePdfContent(string pdfPath, string[] expectedTerms)
{
    var pdf = PdfDocument.FromFile(pdfPath);
    string fullText = pdf.ExtractAllText();
    // Check for multiple expected terms
    foreach (string term in expectedTerms)
    {
        if (!fullText.Contains(term, StringComparison.OrdinalIgnoreCase))
        {
            Console.WriteLine($"Missing expected term: {term}");
            return false;
        }
    }
    // Extract and validate specific sections
    if (pdf.PageCount > 0)
    {
        string firstPageText = pdf.ExtractTextFromPage(0);
        // Validate header information typically on first page
        if (!firstPageText.Contains("Invoice #") && !firstPageText.Contains("Date:"))
        {
            Console.WriteLine("Header validation failed");
            return false;
        }
    }
    return true;
}
public bool ValidatePdfContent(string pdfPath, string[] expectedTerms)
{
    var pdf = PdfDocument.FromFile(pdfPath);
    string fullText = pdf.ExtractAllText();
    // Check for multiple expected terms
    foreach (string term in expectedTerms)
    {
        if (!fullText.Contains(term, StringComparison.OrdinalIgnoreCase))
        {
            Console.WriteLine($"Missing expected term: {term}");
            return false;
        }
    }
    // Extract and validate specific sections
    if (pdf.PageCount > 0)
    {
        string firstPageText = pdf.ExtractTextFromPage(0);
        // Validate header information typically on first page
        if (!firstPageText.Contains("Invoice #") && !firstPageText.Contains("Date:"))
        {
            Console.WriteLine("Header validation failed");
            return false;
        }
    }
    return true;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

当您在 Selenium 测试中从 PDF 中提取文本时,这种验证方法会检查多个预期术语,同时保持不区分大小写的匹配,以确保可靠性。 StringComparison.OrdinalIgnoreCase参数可确保测试不会因大小写差异而变得脆弱,这是在验证不同环境下打开的 PDF 文件时常见的问题。

输入

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-6.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 6 - PDF 输入示例。

输出

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-7.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 7 - PDF 验证输出。

IronPDF 在提取过程中保留了文本布局和格式,因此在验证结构化文档时非常可靠。 该库还支持 提取表格、提取图像以及在需要时处理 PDF 表单。 这种全面的方法可为任何文件格式验证场景提供详细信息。 如需了解更多相关问题和高级场景,请查看 IronPDF 文档

最佳实践是什么?

在 Selenium WebDriver C# 中下载文件读取 PDF 时,始终实施适当的等待策略,而不是固定延迟。 使用显式等待或文件系统监视器可靠地检测下载完成。 IronPdf 的跨平台支持意味着您的测试无需修改即可在 Windows、Linux 或 macOS 上运行,非常适合需要从 PDF 中持续提取文本的多样化 CI/CD 环境。

切记在测试后清理下载的文件,以防止出现磁盘空间问题。 考虑实现一个处理常见 PDF 操作的测试基类,使您的单个测试在验证 PDF 内容时更简洁、更有针对性。 本文提供了一个完整的解决方案--除了 IronPDF 和 Selenium 之外,不依赖任何外部库。

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-8.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图像 8 - 跨平台兼容性

结论

IronPDF 将 Selenium WebDriver 中的 PDF 测试从复杂的多库挑战转变为简单明了的过程。 通过将 Selenium 的 Web 自动化功能与 IronPDF 强大的 PDF 操作功能相结合,您可以创建强大、可维护的测试,有效验证 PDF 内容。

该库具有简单的 API、全面的文本提取功能以及与 .NET 测试框架的无缝集成,是需要在 Selenium WebDriver C# 中读取 PDF 文件的团队的理想选择。 无论您是验证发票、报告还是任何其他 PDF 文档,IronPDF 都能提供相应的工具,确保您的内容以最少的代码和最高的可靠性达到预期要求。 立即免费试用!

准备好简化您的 PDF 测试并在 Selenium WebDriver 中从 PDF 中提取文本了吗? 从 IronPDF 的免费试用版开始,体验 PDF 验证可以变得多么简单。 对于生产使用,请探索适合您团队需求的许可选项,并根据您的测试要求进行扩展。

!a href="/static-assets/pdf/blog/read-pdf-file-selemium/read-pdf-file-selemium-9.webp">How to Read PDF File in Selenium WebDriver C# Using IronPDF:图片 9 - 许可

常见问题解答

为什么 Selenium WebDriver 不能直接读取 PDF 文件?

Selenium WebDriver 设计用于与作为 DOM 一部分的网页元素进行交互。然而,PDF 文件是以二进制流的形式呈现的,而不是 DOM 元素,因此 Selenium 无法与其内容直接交互。

IronPDF 如何帮助在 Selenium WebDriver 中读取 PDF 文件?

IronPdf 与 Selenium WebDriver 无缝集成,让您无需复杂设置或多个库即可提取文本并验证 PDF 数据。这大大简化了流程,提高了测试效率。

使用 IronPDF 和 Selenium 进行 PDF 测试有什么好处?

将 IronPDF 与 Selenium 结合使用可简化 PDF 处理,使开发人员只需使用最少的代码就能从 PDF 中提取和验证文本。这减少了对额外配置或外部库的需求,使处理过程更快、更高效。

使用 IronPDF 进行 C# PDF 测试是否需要使用其他库?

不,IronPDF 提供了一个全面的解决方案,可处理 PDF 提取和验证,无需在 C# 项目中使用多个库或进行复杂的配置。

IronPDF 能否处理现代网络应用程序生成的 PDF 文件?

是的,IronPDF 对现代网络应用程序生成的新 PDF 文档特别有效,可以实现高效的文本提取和数据验证。

是什么让 IronPDF 成为 Selenium PDF 自动化的强大工具?

IronPdf 的强大功能使其能够与 Selenium WebDriver 集成,提供了一种管理 PDF 文件的有效方式。它简化了在自动测试中直接读取和验证 PDF 内容的过程。

IronPDF 与 Apache PDFBox 等 Java 解决方案相比有何优势?

IronPDF for Java 解决方案可能需要多个导入语句和库,与之不同的是,IronPDF 提供了一种精简的方法,可直接与 C# 项目集成,简化 Selenium 中的 PDF 测试过程。

IronPdf 是否与 Selenium WebDriver in C# 兼容?

是的,IronPDF 可与 C# 中的 Selenium WebDriver 无缝协作,为在自动化测试中读取和验证 PDF 文件提供了强大的解决方案。

IronPDF 可帮助解决 PDF 自动测试中的哪些难题?

IronPDF 解决了在自动测试中访问和验证 PDF 内容的难题,无需使用多个库和复杂的设置,并提供了与 Selenium WebDriver 兼容的直接解决方案。

IronPdf 如何提高自动化测试工作流程的效率?

通过与 Selenium WebDriver 集成,IronPDF 简化了提取文本和验证 PDF 数据的过程,降低了自动化测试工作流程的复杂性并缩短了所需时间。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。