【问题标题】:How to check if PDF was successfully opened in the browser using WatiN?如何使用 WatiN 检查 PDF 是否在浏览器中成功打开?
【发布时间】:2009-07-28 04:09:27
【问题描述】:

我正在使用 WatiN 库在部署后对网站进行快速冒烟测试。除其他外,我想确保当我单击页面上的特定链接时,会在浏览器中打开 PDF。单击链接很容易,但是如何检测 Acrobat Reader 是否在浏览器窗口中成功打开?我想捕捉 404、服务器错误或超时等情况...

【问题讨论】:

    标签: pdf watin


    【解决方案1】:

    擦,

    我发现了一份关于此问题的错误报告和一项功能请求。错误和功能请求都已关闭,但我仍然无法附加到托管 PDF 文档的 IE 窗口。

    事实上,托管 PDF 文件的窗口甚至不是 IE.InternetExplorers() 或 InternetExplorersNoWait() 集合中的项目。

    我在 Windows XP 上使用 WatiN 2.0.10.928 和 IE7。

    我的解决方案是使用添加对 Interop.ShDocVw.dll 的 COM 引用并自己检查窗口,因为托管 PDF 查看器的 IE 窗口不是 WatiN.IE.InternetExplorers() 中的项目出于某种原因收集。

    不要使用添加引用 -> COM -> Microsoft Internet Controls v1.1 添加对 Interop.ShDocVw.dll 的引用。如果您这样做,您很有可能会收到此异常:

    System.IO.FileLoadException: 无法加载文件或程序集 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral ... 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配(HRESULT 异常:0x80131040)

    相反,您需要引用随 WatiN 分发的 ShDocVw.dll。查看“WatiN 错误无法加载程序集”StackOverflow 问题以获取更多信息: WatiN Error Could not Load Assembly

    using System.IO;
    using SHDocVw; 
    
    namespace PDF_SPIKE
    {
        class Program
        [STAThread]
        static void Main(string[] args)
        {
            SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass(); 
    
            string pdfViewerURL = "http://YourURL/document.pdf";
            bool pdfOpened = false;
            string filename; 
    
            foreach ( SHDocVw.InternetExplorer ie in shellWindows ) 
            {
                filename = Path.GetFileNameWithoutExtension( ie.FullName ).ToLower(); 
    
                if ( filename.Equals("iexplore") && ie.LocationURL.Equals(pdfViewerURL)) 
                   pdfOpened = true;
            }
    
            if ( pdfOpened )
               Console.WriteLine( "Your PDF file is OPENED" ); 
            else
               Console.WriteLine( "Your PDF file was NOT found." ); 
    }
    

    【讨论】:

      【解决方案2】:

      感谢 MoMo 的回答。这对我也很有帮助。

      我只想为这个答案提供一个额外的解决方案,以防万一其他人遇到与我相同的问题。

      我最初收到执行此行的错误:

      SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
      

      "SHDocVw.ShellWindowsClass 不能嵌入,请改用适用的接口"

      可以在这里找到解决方案: http://www.debugging.com/bug/24258

      您需要右键单击引用 Interop.ShDocVW.dll 并将嵌入互操作类型设置为 false。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2018-08-31
        • 2020-08-10
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多