2009-07-28 5 views
4

J'utilise la bibliothèque WatiN pour faire un test de fumée rapide sur un site Web après le déploiement. Entre autres choses, je veux m'assurer que lorsque je clique sur un lien spécifique sur ma page, un PDF est ouvert dans le navigateur. Cliquer sur le lien est facile, mais comment puis-je savoir si Acrobat Reader a été ouvert avec succès dans la fenêtre du navigateur? Je voudrais saisir des situations telles que 404, les erreurs de serveur, ou temporisations ...Comment vérifier si PDF a été ouvert avec succès dans le navigateur en utilisant WatiN?

Répondre

6

Rub,

J'ai trouvé un rapport de bogue et une demande de fonctionnalité sur cette question. La demande de bogue et de fonctionnalité est fermée, mais je ne suis toujours pas en mesure de joindre une fenêtre IE hébergeant un document PDF.

En fait, la fenêtre qui héberge le fichier PDF n'est même pas un élément des collections IE.InternetExplorers() ou InternetExplorersNoWait(). J'utilise WatiN 2.0.10.928 et IE7 sur Windows Xp.

Ma solution était d'utiliser ajouter une référence COM à Interop.SHDocVw.dll et vérifier moi-même fenêtre, car les fenêtres IE que les téléspectateurs PDF hôte ne sont pas des éléments dans la collection WatiN.IE.InternetExplorers() pour une raison .

N'ajoutez PAS de référence à Interop.ShDocVw.dll en utilisant Ajouter une référence -> COM -> Microsoft Internet Controls v1.1. Si vous ne Theres une bonne chance que vous recevez cette exception:

System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly « Interop.SHDocVw, Version = 1.1.0.0, Culture = neutral ... ou une de ses dépendances. La définition manifeste de l'assembly situé ne correspond pas à la référence d'assemblage (Exception de HRESULT: 0x80131040)

Au lieu de cela, vous devez référencer le ShDocVw.dll distribué avec des thats Watin. Consultez le 'Erreur Watin Impossible de charger l'Assemblée' question StackOverflow pour plus d'informations: 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."); 
} 
0

Merci, MoMo, pour cette réponse. C'était très utile pour moi aussi.

Je voudrais juste donner une solution supplémentaire à cette réponse juste au cas où quelqu'un d'autre se heurte au même problème que moi.

J'ai d'abord reçu une erreur mise en œuvre de cette ligne:

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

"SHDocVw.ShellWindowsClass ne peut pas être intégré, utilisez l'interface applicable au lieu"

La solution peut être trouvée ici: http://www.debugging.com/bug/24258

Vous devez faire un clic droit sur la référence Interop.ShDocVW.dll et définir les types d'interopérabilité à false.

Questions connexes