2013-03-05 77 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

相关问题