1

我正在使用 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 秒以显示元素时超时”。

4

1 回答 1

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();
    }
}
于 2013-04-11T18:28:44.207 回答