如何使用WatiN检查PDF是否在浏览器中成功打开?

时间:2009-07-28 04:09:27

标签: pdf watin

我正在使用WatiN库在部署后在网站上进行快速烟雾测试。除此之外,我想确保当我点击页面上的特定链接时,在浏览器中打开PDF。单击该链接很简单,但如何检测是否在浏览器窗口中成功打开了Acrobat Reader?我想抓住404,服务器错误或超时等情况......

2 个答案:

答案 0 :(得分:6)

擦,

我在这个问题上找到了一个错误报告和一个功能请求。错误和功能请求都已关闭,但我仍然无法附加到托管PDF文档的IE窗口。

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

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

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

请勿使用“添加参考”添加对Interop.ShDocVw.dll的引用 - > COM - > Microsoft Internet Controls v1.1。如果你这样做,你很有可能会收到这个例外:

  

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

相反,您需要引用随WatiN分发的ShDocVw.dll。查看'WatiN Error无法加载程序集'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." ); 
}

答案 1 :(得分:0)

谢谢,MoMo,这个答案。这对我也很有帮助。

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

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

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

“SHDocVw.ShellWindowsClass无法嵌入,请使用适用的界面”

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

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