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