2013-03-05 113 views
0

我想使用Watin遍歷下拉列表。該HTML看起來像這樣:使用Watin選擇下拉列表中的每個項目

<select name="ctl00$Header1$ddlPropertyList" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$Header1$ddlPropertyList\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_Header1_ddlPropertyList" onmouseover="this.title=this.options[this.selectedIndex].title" style="width:325px;"> 
    <option selected="selected" value="0185795046:R:GPC:Eligible:F" title="0185795046 - ">0185795046 - </option> 
    <option value="0325844068:R:GPC:Eligible:F" title="0325844068 - ">0325844068 - </option> 
    <option value="0374795034:R:GPC:Eligible:F" title="0374795034 - ">0374795034 - </option> 
    <option value="0510031035:C:GPC:Eligible:F" title="0510031035 - ">0510031035 - </option> 
    <option value="1424795158:R:GPC:InEligible:F" title="1424795158 - ">1424795158 - </option> 
    <option value="1550795037:R:GPC:Eligible:F" title="1550795037 - ">1550795037 - </option> 

</select> 

當你點擊在下拉列表中選擇一個,它加載不同的頁面,我想加載他們每個人在繼承。基本上,我試圖做這樣的事情:

SelectList ddl = browser.SelectList(Find.ById("ctl00$Header1$ddlPropertyList")); 
      foreach (var item in ddl.AllContents) 
      { 
       ddl.Select(item); 
      } 

但我敢肯定我的代碼是錯的。

+0

這聽起來像你需要,當你選擇在這種情況下,你需要在每個返回回選項在頁面上在每次選擇後選擇使用GoBack命令。 – alonp 2013-03-06 09:33:19

+0

是的,我打算選擇選項1將加載一個新的頁面,但仍將包括下拉菜單。我可能會也可能不會離開頁面,但我打算回到一個頁面,並選擇選項2等。 – 2013-03-06 14:34:13

回答

1

當在項目列表中循環時,有時會遇到對象超出範圍的情況,特別是在使用頁面對象模式時(使用它 - 太棒了!)。所以我傾向於使用循環顯式聲明的計數而不是引用列表來循環。額外的好處:將數量存儲在變量中,並且使用該變量比每次引用瀏覽器對象更快;如果您有大量項目要循環播放,則會有所不同。

一些粗糙的未完成的代碼 - 基本上是alonp說充實多一點:

int numberOfItems = browser.SelectList(Find.ById("ctl00$Header1$ddlPropertyList")).count; 

for(int i = 0; i < numberOfItems; i++) 
{ 
    //this is one the "search" page 
    browser.SelectList(Find.ById("ctl00$Header1$ddlPropertyList")).Options[i].Select; 
    browser.yourGoAction(); <- assumes navigation isn't automatic when an item is selected. EG: button.Click() or something. 

    //this is on the "results" page. 
    do stuff 

    //go back to the "search" page. 
    browser.Back(); 
} 
+0

我必須將()添加到您的'.Select'中。否則,這工作:) – 2013-03-06 18:39:19

相關問題