2012-02-16 5 views
0

Watin을 사용하여 암호 동기화 페이지에서 데이터를 검색하고 있습니다. 나는 값이 반환 될 것으로 기대했다. 값이 & nbsp (HTML 코드에서)이면 null 일 수 있습니다.C# Watin이 null 데이터로 TD를 반환 함

하지만 얻고 다른 많은 예상치 못한

{string[4, 4]} 
[0, 0] = null 
[0, 1] = "MAINFRAME" 
[0, 2] = "DOMAIN" 
[0, 3] = "WebClient" 
[1, 0] = null 
[1, 1] = "INTERNALID" 
[1, 2] = "FIRSTNAME.LASTNAME" 
[1, 3] = "INTERNALID" 
[2, 0] = null 
[2, 1] = "Yes" 
[2, 2] = "Yes" 
[2, 3] = "Yes" 
[3, 0] = null 
[3, 1] = "" 
[3, 2] = "" 
[3, 3] = "" 

HTML 코드가 보이는

<TABLE WIDTH="100%" CELLSPACING=0 CELLPADDING=5 BORDER=0 class="TABLEBORDER"> 
<TR> 

<TH class=HEADTEXT> 
Target 
</TH> 
<TH class=HEADTEXT> 
Trigger<br>enabled? 
</TH> 
<TH class=HEADTEXT> 
Account 
</TH> 
<TH class=HEADTEXT> 
Password<br>changed? 

</TH> 
<TH class=HEADTEXT> 
Error message<br>(if any) 
</TH> 
<!-- S_STATUS_ROW --> 

<TR> 

<TD valign=top class=CELLTEXT> 
MAINFRAME 
</TD> 
<TD valign=top class=CELLTEXT> 
No 
</TD> 
<TD valign=top class=CELLTEXT> 
INTERNALID 
</TD> 
<TD valign=top class=CELLTEXT> 
Yes 
</TD> 
<TD valign=top class=CELLTEXT> 
&nbsp; 

</TD> 
<!-- S_STATUS_ROW --> 

<TR> 

<TD valign=top class=CELLTEXT> 
DOMAIN 
</TD> 
<TD valign=top class=CELLTEXT> 
No 
</TD> 
<TD valign=top class=CELLTEXT> 
FIRSTNAME.LASTNAME 
</TD> 
<TD valign=top class=CELLTEXT> 
Yes 
</TD> 
<TD valign=top class=CELLTEXT> 
&nbsp; 

</TD> 
<!-- S_STATUS_ROW --> 

<TR> 

<TD valign=top class=CELLTEXT> 
WebClient 
</TD> 
<TD valign=top class=CELLTEXT> 
No 
</TD> 
<TD valign=top class=CELLTEXT> 
INTERNALID 
</TD> 
<TD valign=top class=CELLTEXT> 
Yes 
</TD> 
<TD valign=top class=CELLTEXT> 
&nbsp; 

</TD> 
<!-- S_STATUS_CONTENT_BOTTOM --> 
</TABLE> 

같은 마지막으로 여기에 잘못된 C# 코드입니다.

 String path = "http://localhost/cgi.exe?ID=" + userName; 
     Int32 startingRow = 1; 

     using (var browser = new IE(path)) 
     { 
      try 
      { 
       browser.Image(Find.ByAlt("Use a password")).Click(); 
       browser.TextField(Find.ByName("_MYPW")).TypeText(privateCurrentPassword); 
       browser.Image(Find.ByAlt("Verify password")).Click(); 
       browser.Link(Find.ByTitle("Change passwords")).Click(); 
       browser.TextField(Find.ByName("_NEWP1")).TypeText(privateNewPassword); 
       browser.TextField(Find.ByName("_NEWP2")).TypeText(privateNewPassword); 
       browser.Image(Find.ByName("SUBMIT-CHANGE")).Click(); 
       Table table = browser.Table(Find.ByClass("TABLEBORDER")); 
       Int32 numberOfColumn = table.TableRows[startingRow].TableCells.Count; 
       Int32 currentRow = startingRow; 
       td1stcolumn = new String[table.OwnTableRows.Count]; 
       td2ndcolumn = new String[table.OwnTableRows.Count]; 
       td3rdcolumn = new String[table.OwnTableRows.Count]; 
       td4thcolumn = new String[table.OwnTableRows.Count]; 

       for (int i = 1; i < table.OwnTableRows.Count; i++) 
       { 
        td1stcolumn[i] = table.OwnTableRows[i].TableCells[0].Text.Trim(); 
        td2ndcolumn[i] = table.OwnTableRows[i].TableCells[2].Text.Trim(); 
        td3rdcolumn[i] = table.OwnTableRows[i].TableCells[3].Text.Trim(); 
        td4thcolumn[i] = table.OwnTableRows[i].TableCells[4].Text.Trim(); 
       } 
       String[,] arrayOfStrings = new String[4,td1stcolumn.Length]; 

       for(int j = 0; j < td1stcolumn.Length; j++) 
       { 
        arrayOfStrings[0,j] = td1stcolumn[j]; 
        arrayOfStrings[1,j] = td2ndcolumn[j]; 
        arrayOfStrings[2,j] = td3rdcolumn[j]; 
        arrayOfStrings[3,j] = td4thcolumn[j]; 
       } 

       string resultDialogString = ResultDialog.ShowBox(arrayOfStrings, "Result Page", passwordTextBox.Text.ToString().Trim()); 
      } 
      catch (ElementNotFoundException enfe) 
      { 
       String error = enfe.Message.ToString(); 
       browser.TextField(Find.ByName("_MYPW")).TypeText(privateCurrentPassword); 
       browser.Image(Find.ByAlt("Verify password")).Click(); 
       browser.Link(Find.ByTitle("Change passwords")).Click(); 
       browser.TextField(Find.ByName("_NEWP1")).TypeText(privateNewPassword); 
       browser.TextField(Find.ByName("_NEWP2")).TypeText(privateNewPassword); 
       browser.Image(Find.ByName("SUBMIT-CHANGE")).Click(); 
       Table table = browser.Table(Find.ByClass("TABLEBORDER")); 
       Int32 numberOfColumn = table.TableRows[startingRow].TableCells.Count; 
       Int32 currentRow = startingRow; 
       td1stcolumn = new String[table.OwnTableRows.Count]; 
       td2ndcolumn = new String[table.OwnTableRows.Count]; 
       td3rdcolumn = new String[table.OwnTableRows.Count]; 
       td4thcolumn = new String[table.OwnTableRows.Count]; 

       for (int i = 1; i < table.OwnTableRows.Count; i++) 
       { 
        td1stcolumn[i] = table.OwnTableRows[i].TableCells[0].Text.Trim(); 
        td2ndcolumn[i] = table.OwnTableRows[i].TableCells[2].Text.Trim(); 
        td3rdcolumn[i] = table.OwnTableRows[i].TableCells[3].Text.Trim(); 
        td4thcolumn[i] = table.OwnTableRows[i].TableCells[4].Text.Trim(); 
       } 
       String[,] arrayOfStrings = new String[4, td1stcolumn.Length]; 

       for (int j = 0; j < td1stcolumn.Length; j++) 
       { 
        arrayOfStrings[0, j] = td1stcolumn[j]; 
        arrayOfStrings[1, j] = td2ndcolumn[j]; 
        arrayOfStrings[2, j] = td3rdcolumn[j]; 
        arrayOfStrings[3, j] = td4thcolumn[j]; 
       } 
       string resultDialogString = ResultDialog.ShowBox(arrayOfStrings, "Result Page", passwordTextBox.Text.ToString().Trim()); 
      } 
     } 

답변

2

여기서 질문은 무엇입니까? 당신은 무엇을 얻을 것으로 예상합니까? 당신이 가진 모든 것을 매우 간단하게 설명 할 수 있습니다. 나는 분명히 드러나는 몇 가지 문제를 해결하려고 노력할 것입니다. 모든

먼저, 당신이 얻을 널 값은 tdNstcolumn가 작성되지 않습니다의

tdNstcolumn = new String[table.OwnTableRows.Count]; 

와 루프 firsth을 의미 i = 1

for (int i = 1; i < table.OwnTableRows.Count; i++) 

시작하기 때문에 (인덱스 0)입니다 따라서 null (arrayOfStrings에 복사 할 때 루프는 j = 0으로 시작합니다). 트림 기능은 트림 "Trim() 에 대한 귀하의 호출에 의해 트리밍 -

은" "예 (빈 문자열) 당신이

<TD valign=top class=CELLTEXT> 
&nbsp; 

</TD> 

NBSP에서 정의되어 얻을 비 부서지기 쉬운 공간을 값" 그냥 ""다음 더 많은, 그것은 공백으로 간주되는 모든 문자를 트림 -> 새로운 라인은 공백도 (참조 : http://msdn.microsoft.com/en-us/library/t809ektx.aspx)을

을 나는 그것이

모든 것을 명확하게 희망