2015-07-28 1 views
0

J'écris un programme de scrappage Web en utilisant WatiN sur une machine Windows 7 exécutant Internet Explorer 11. Mon PDF Viewer est Foxit Reader, et il fonctionne actuellement dans Internet Explorer.Joindre une variable de navigateur au fichier PDF dans Internet Explorer

Mon but: J'essaie de trouver un moyen de cliquer sur un lien qui charge une fenêtre pop-up qui affiche un fichier .pdf; cependant, les méthodes normales utilisées dans Watin pour identifier la fenêtre pop-up ne semblent pas fonctionner. En d'autres termes, Watin ne peut pas trouver la fenêtre pop-up ... et je ne sais pas quoi faire.

Pour commencer, je suis en cliquant sur le lien suivant dans la page Web cible:

<a onclick="window.open('http://go.website.com/DocumentLoader.aspx?file=3%2f111978%2fatt%2f142245916_OPT.pdf','attachment','width=960px,height=640px,resizable=no')" href="javascript:void(0)">0017384611</a> 

Je suis en mesure de cliquer sur ce lien en utilisant la pièce de code suivante Watin:

browser.Link(lnk => lnk.GetAttributeValue("onclick") != null && lnk.GetAttributeValue("onclick").Contains("_OPT.pdf")).ClickNoWait(); 

Cette partie fonctionne et aboutit à une nouvelle fenêtre Internet Explorer qui s'ouvre avec un fichier .pdf affiché à l'intérieur.

Je tente alors de créer un nouvel objet de navigateur pour cette fenêtre en utilisant le code suivant:

IE popup = IE.AttachTo<IE>(Find.ByUrl(url => url != null && url.Contains("DocumentLoader.aspx"))); 

Toutefois, cela ne parvient pas à identifier la fenêtre, bien que la nouvelle fenêtre pop-up a une URL qui comprend le nom de fichier "DocumentLoader.aspx" (voir le lien d'origine pour cela).

Ce qui est bizarre, c'est que lorsque j'ai interrogé l'objet InternetExplorer pour obtenir toutes ses fenêtres, celle avec le fichier .pdf n'apparaît pas du tout. Je ne sais pas pourquoi, bien que je soupçonne que cela a à voir avec le fait que la fenêtre affiche un fichier .pdf et pas un fichier HTML normal.

J'ai également essayé d'ouvrir un nouvel objet de navigateur avec l'URL DocumentLoader.aspx, mais WatiN ne semble pas être capable de le faire (cela retarde l'expiration du délai).

Quelqu'un peut-il suggérer comment je peux faire en sorte que WatiN reconnaisse la nouvelle fenêtre contextuelle?

Merci!

MISE À JOUR: Après la fenêtre pop-up apparaît, je l'ai testé pour voir si Watin détecté la nouvelle fenêtre en utilisant le code suivant:

var instances = new IECollection(true); 
Console.WriteLine("Instances = " + instances.Count); 

C'est montrant un nombre de 1, bien que, comme l'image ci-dessous démontre, il y a deux fenêtres Internet Explorer ouvertes:

enter image description here

Répondre

1

Je peux offrir une approche différente. Je faisais la même chose que vous, mais à la fin j'ai été trop pris dans WatIn et je ne pouvais pas voir que la solution était beaucoup plus simple que toute autre chose.Si vous avez le lien vers le fichier, vous pouvez simplement télécharger le PDF et ignorer complètement l'aperçu (s'il n'y a pas d'interaction de l'utilisateur, cette étape est inutile et si un utilisateur regarde l'écran, vous pouvez simplement faire ce que vous avez fait, afficher le PDF et également faire ce qui est répertorié ici:

using (WebClient client = new WebClient()) 
{ 
    if (Directory.Exists(@"\\folder")) 
    { 
     string downloadURL = "http://example.com/retrievePDF.jsp?id=XXXXX"; 
     client.DownloadFile(downloadURL, @"\\folder\" + fName + ".pdf"); 
    } 
} 

dans votre cas particulier, vous obtiendrez le dwonloadURL du lien href (que vous avez déjà)

espère que cela vous aide ou quelqu'un qui vient après

+0

Merci, c'est une belle réponse "en dehors de la boîte". – ChicagoMike