0

Watinを使用してドロップダウンリストを繰り返し処理したいと思います。HTMLは次のようになります。

<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>

ドロップダウンのオプションの1つをクリックすると、別のページが読み込まれます。それぞれを連続して読み込みたいと思います。基本的に、私はこのようなことをしようとしています:

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

しかし、私のコードは間違っていると確信しています。

4

1 に答える 1

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();
}
于 2013-03-06T14:50:42.647 に答える