2013-04-11 45 views
1

我正在使用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秒才顯示元素。」

+0

您可以通過值來選擇它(使用'SelectByValue'方法)? – 2013-04-11 18:24:45

+0

@AdamPlocher錯誤來自SelectList,所以我甚至沒有嘗試按值選擇選項。 – EvanGWatkins 2013-04-11 18:26:48

+0

就像另一個筆記 - 你試過做一個'FindByName'來看看你是否有更好的結果嗎?我發佈了一個答案,下面的答案可能會幫助或不會幫助:) – 2013-04-11 18:31:14

回答

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(); 
    } 
} 
相關問題