2015-07-28 5 views
0

Я пишу программу для очистки веб-страниц, используя WatiN на машине под управлением Windows 7, на которой запущен Internet Explorer 11. Мой просмотрщик PDF - это Foxit Reader, и в настоящее время он работает в Internet Explorer.Присоединение браузера к PDF-файлу в Internet Explorer

Моя цель: Я пытаюсь найти способ щелкнуть ссылку, которая загружает всплывающее окно, которое отображает файл .pdf; однако обычные методы, используемые в Watin для идентификации всплывающего окна, похоже, не работают. Другими словами, Ватин не может найти всплывающее окно ... и я не понимаю, что делать.

Для начала, я, перейдя по следующей ссылке в целевой веб-страницы:

<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> 

Я могу нажать на эту ссылку, используя следующий фрагмент WatiN кода:

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

Эта часть работает и приводит к новому окну Internet Explorer, который открывается с открытым файлом .pdf.

Я затем попытаться создать новый объект браузера для этого окна, используя следующий фрагмент кода:

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

Однако это не удается идентифицировать окно, хотя новое всплывающее окно имеет URL, который включает в себя имя файла «DocumentLoader.aspx» (см. исходную ссылку для этого).

Что странно, когда я запросил объект InternetExplorer, чтобы получить все его окна, тот, у которого есть .pdf-файл, вообще не отображается. Я не знаю, почему это так, хотя я подозреваю, что это связано с тем, что в окне отображается файл .pdf, а не обычный HTML-файл.

Я также попытался открыть новый объект браузера с помощью URL-адреса DocumentLoader.aspx, но WatiN, похоже, не может этого сделать (он не дает времени на выход).

Может ли кто-нибудь предложить, как я могу получить WatiN для распознавания нового всплывающего окна?

Спасибо!

ОБНОВЛЕНИЕ: После того, как появится всплывающее окно, я проверил, чтобы увидеть, если Watin обнаружено новое окно, используя следующий код:

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

Это показывает счетчик 1, хотя, как показано ниже показывает, есть два окна Internet Explorer открыто:

enter image description here

ответ

1

Я могу предложить другой подход. Я делал то же самое, что делал, но, в конце концов, я слишком сильно попал в WatIn, и я не мог понять, что решение было намного проще, чем что-либо еще.Если у вас есть ссылка на файл, вы можете просто загрузить PDF-файл и полностью обходить предварительный просмотр (если нет взаимодействия с пользователем, этот шаг бесполезен, и если пользователь смотрит на экран, вы можете просто делать то, что делаете, отображение PDF, а также делать то, что перечисленные здесь:

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

в вашем конкретном случае, вы будете получать dwonloadURL от HREF ссылки (которые у вас уже есть)

Надежда это помогает вам или кто-то приходит после того, как вы разместили это.

+0

Спасибо, это приятный ответ «вне коробки». Также, невероятно просто! – ChicagoMike

 Смежные вопросы

  • Нет связанных вопросов^_^