2014-10-14 2 views
0

Я пишу программу очистки.Не удалось щелкнуть метки привязки во второй раз

В самый первый раз, когда я могу щелкнуть метки привязки, но как только я снова петлю в том же не происходит. Я сделал это в экземпляре Watin IE. Я сомневаюсь, что это из-за задней части экземпляра IE, который я сделал.

Пожалуйста, найдите две части кода.

Загрузка метод ФПВ в

private void DownloadFiles(IE ieInstance, HTMLDocument document_sub) 
{ 
    // int chktest = 2; 
    try 
    { 
    foreach (HTMLAnchorElement anchorTagPg1 in document_sub.getElementsByTagName("a")) 
    { 
     if (anchorTagPg1.innerText.Contains("Monthly Statement")) 
     { 
     string urltemp = anchorTagPg1.outerHTML.ToString(); 
     int startTextpos = urltemp.IndexOf("window.open"); 
     string spltstr1 = urltemp.Substring(startTextpos); 
     int endpos = spltstr1.IndexOf(')'); 
     string spltstr2 = spltstr1.Substring(0, endpos); 
     spltstr2 = spltstr2.Replace("window.open(", ""); 
     string[] manipulatestrsplt = spltstr2.Split(','); 
     string finalmanipstr = manipulatestrsplt[0].Replace("'", ""); 
     finalmanipstr = finalmanipstr.Replace("amp;", ""); 
     finalurl = "https://myaccount.pseg.com/psegbdisu/" + finalmanipstr; 
     //anchorTagPg1.click(); 
     //ieInstance.WaitForComplete(); 
     ieInstance.GoToNoWait(finalurl); 
     Thread.Sleep(5000); 
     SendKeys.SendWait("^%S"); // to get the Save As window... 
     Thread.Sleep(5000); 
     SendKeys.SendWait("abc123"); 
     Thread.Sleep(5000); 
     SendKeys.Send("^S"); 
     Thread.Sleep(5000); 
     SendKeys.SendWait("DownloadedFile" + iFileCnt + ".pdf"); // Enters File Name 
     Thread.Sleep(5000); 
     SendKeys.Send("{ENTER}"); 
     iFileCnt++; 
     //chktest++; 
     Thread.Sleep(5000); 
     ieInstance.Back(); 
     // bool rtnBack = ieInstance.Back(); 
     Thread.Sleep(10000); 
     // } 
     } 
    } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 
} 

Другой метод, где, в котором я не могу ударить якорный тег, не в состоянии поднять OnClick событие.

private void ClickSelectAccount(IE ieInstance) 
{ 
    FrameCollection hframesSelAcct = ieInstance.Frames; 
    HTMLDocument document_sub_SelAcct = ((mshtml.HTMLDocument)(((WatiN.Core.Native.InternetExplorer.IEDocument)(((WatiN.Core.FrameCollection)(hframesSelAcct))[1].NativeDocument)).HtmlDocument)); 

    foreach (HTMLAnchorElement anchorTagSelectAcct in document_sub_SelAcct.getElementsByTagName("a")) 
    { 
    if (anchorTagSelectAcct.innerText.Contains("Select Account")) 
    { 
     Thread.Sleep(2000); 
     //anchorTagSelectAcct.click(); 
     anchorTagSelectAcct.FireEvent("onclick"); 
     Thread.Sleep(10000); 
     ieInstance.WaitForComplete(); 
     anchorTagSelectAcct.click(); 
     Thread.Sleep(10000); 

     break; 
    } 
    } 
} 

Может кому-то помочь, первый раз, когда второй метод работает нормально, но не второй раз. У меня есть сомнение с экземпляром IE, поскольку я пробовал с большим временем сна, а также его способность идти в цикле, но просто не могу нажать ссылки.

Заранее спасибо

ответ

0

Попробуйте следующие внутри метода DownloadFiles:

var link = ieInstance.Links.FirstOrDefault(p => p.Text.Equals("Select Account")); 
if (link != null && link.Exists) 
{ 
    link.Click(); 
} 

или

var link = ieInstance.Links.FirstOrDefault(p => p.Text.Equals("Monthly Statement")); 
if (link != null && link.Exists) 
{ 
    link.Click(); 
} 

Debug этот код, чтобы убедиться, что вы на самом деле получаете внутри link.Exists, если это заявление. Если вы этого не сделаете, вы должны попробовать:

var links = browser.Links; 
foreach (var link in links.Where(l => l != null && (l.Text.Contains("Select Account")| l.Text.Contains("Monthly Statement")))) 
{ 
    link.Click(); 
} 

Сообщите мне, если это сработало для вас или нет.

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