使用WatiN测试下拉列表

时间:2013-04-11 18:21:07

标签: c# visual-studio-2010 watin

我正在使用WatiN来测试网站并自动化流程。我可以成功打开网站,但是当我尝试从选择列表中选择一个选项时会出现问题:

<select id="form:Dropdown" name="form:Dropdown" size="1" title="Select Option"> <option value="0">Select Code</option>
    <option value="234890/NA/1">23FA4890</option>
    <option value="237014/NA/1">23FA7014</option>
</select>

代码:

            Settings.AttachToBrowserTimeOut = 240;
            Settings.WaitUntilExistsTimeOut = 240;
            Settings.WaitForCompleteTimeOut = 240;    

            browser = new IE();
            browser.GoTo(url);
            browser.WaitForComplete();
            //Thread.Sleep(10000);
            browser.SelectList(Find.ById("form:Dropdown")).WaitUntilExists(); //ERROR OCCURS HERE
            SelectList dList = browser.SelectList(Find.ById("form:Dropdown"));
            dList.Select("23FA4890");

这看起来应该可以工作,但我一直收到错误“等待240秒才能显示元素超时。”

1 个答案:

答案 0 :(得分:0)

我认为您不需要致电WaitUntilExists,因为WaitForComplete已经阻止,直到网页完全加载为止。我知道这并没有完全回答你的问题,但我想向你展示一些代码的例子,我在生产中使用了一年以上从未出现过问题。

注意,我从iframe中抓取一个框架,然后从下拉列表中选择“ID”的值:

Regex regex = new Regex(@"^.*\/globalframeset\.esp.*$");
using (var browser = IE.AttachTo<IE>(Find.ByUrl(regex), 12))
{
    if (browser != null)
    {
        browser.AutoClose = false;

        var iFrame = browser.Frame(Find.ById("GlobalWrapper"));

        if (iFrame != null)
        {
            var frame = iFrame.Frame(Find.ByName("frGlobalNav"));

            if (frame != null)
            {
                frame.TextField(Find.ByName("findtext")).Value = person.MedicalRecordNumber;

                // This code is setting the DDL called "filtertype" to a value of "ID"
                frame.SelectList(Find.ByName("filtertype")).SelectByValue("ID");

                Regex buttonRegex = new Regex(@"^.*\/go_text\.gif.*$");
                frame.Image(Find.BySrc(buttonRegex)).ClickNoWait();
            }
        }

        browser.BringToFront();
    }
}