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

+0

Да, я планирую выбрать вариант 1, который загрузит новую страницу, но по-прежнему будет включать выпадающий список. Я могу или не могу покинуть страницу в этот момент, но я планирую вернуться к странице с выпадающим списком, чтобы выбрать вариант 2 и т. Д. –

ответ

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'. В противном случае это работает :) –

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