2011-09-15 60 views
3

我正在使用WatiN來測試自動完成下拉列表。使用WatiN進行自動完成DropDown菜單測試

當用戶在輸入3個字符後輸入字段時,會觸發jquery自動完成,並顯示一個無序列表。用戶從列表中選擇是強制性的。

我無法使用WatiN從列表中選擇/觸發自動完成功能。

下面是一些開發商已使用的HTML:

<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; display: block; width: 275px; top: 301px; left: 262px; "> 
<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all" tabindex="-1">ABC DEFGHIJ </a></li> 
<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all" tabindex="-1">ABC KLMNOPQ </a></li> 
</ul> 

他們正在使用jQuery UI自動完成構件:http://jqueryui.com/demos/autocomplete/

谷歌搜索的jQuery UI自動完成測試,我發現這個堆棧溢出Q & - 答: Testing JQuery autocomplete ui with cucumber

包含什麼似乎是至關重要的信息:「你需要先觸發鼠標懸停,然後點擊」

然後,我用Google搜索華廷鼠標懸停時,發現http://blogs.telerik.com/testing/posts/08-05-29/how_to_select_radcombobox_item_with_watin.aspx 這有一點點的代碼示例包括:

Div divStudent3 = ie.Div(Find.ById("idRadComboBox_c2")); 
    divStudent3.FireEvent("onmouseover"); 
    divStudent3.Click(); 

(要明確我們的發展的代碼不使用Telerik控制這只是一個例子)

在這一點上我覺得我有多麼此驅動器的計劃:

  1. 所需的值類型部分進入該領域(如「ABC」)
  2. 找到與類「UI-自動完成」和顯示形式「塊」一個<ul>元件,等待,直到它是本
  3. 在這一<ul>元件,查找<li>元件其文本爲所希望的值(例如「ABC DEFGHIJ」)
  4. 在該<li>元素上觸發「onmouseover」事件
  5. 單擊<li>元素。

我發現了兩個問題:首先,華廷的打字到輸入字段是在觸發自動完成菜單, 的外觀非常糟糕,其次是點擊菜單項沒有導致發生自動完成。

我發現向輸入字段發送一個向下箭頭鍵事件會鼓勵菜單出現,但並不會導致頂層菜單項突出顯示 (而如果您手動鍵入並按下箭頭則會發生)。正確啓用菜單項 (包括將其ID設置爲ui-active-menuitem)可能是此處缺失的鏈接。

任何人都可以幫助我理解和解決我提到的兩個問題嗎?

回答

2

要鍵入它花了一點,但這裏是一個工作示例值。

要點

  • 呼叫jQuery對象搜索方法。這將顯示下拉列表 。
  • 然後點火onmouseover你想要的物品。
  • 然後點擊你想要的物品。

爲了讓它正確選擇項目,我需要按照特定順序完成以上三項。

代碼

string searchValue = "c"; 
string selectItem = "COBOL"; 

ie.GoTo("http://jqueryui.com/demos/autocomplete/default.html"); 

ie.TextField("tags").TypeText(searchValue); 
ie.Eval(@"$('#tags').autocomplete('search')"); 
ie.List(Find.ByClass("ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all")).ListItem(Find.ByText(selectItem)).Links[0].FireEvent("onmouseover"); 
ie.List(Find.ByClass("ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all")).ListItem(Find.ByText(selectItem)).Links[0].Click(); 

上述作品使用華廷2.1。它不適用於WatiN 2.0 RC。我沒有檢查實際的2.0版本。 2.0 RC沒有List和ListItem對象。僅在IE8上測試過。

+0

這解決了這個問題。謝謝。它不會顯示列表上的項目的亮點,因爲它選擇它(我會進一步看看這個),但它確實選擇了該項目:) – ghb82

+0

除了這個,這裏還有更多的信息:http:///forum.jquery.com/topic/functional-testing-autocomplete-widget-with-watin-watir。還發現,如果你在TextField上通過jquery進行模糊處理,它也可以工作(雖然它不會實際顯示列表,但這可能不是我們所需要的) – Mark

+0

幫助解決了我的問題。謝謝 – AceMark

0

我在測試的應用程序中也遇到類似的問題。當我使用TypeText鍵入文本字段時,字符會輸入兩次。

我們所做的事情如下。

string mySubStr = value.Substring(0, value.Length - 3); 
datavalue.Value = mySubStr; 
datavalue.AppendText(value.Substring(value.Length - 3, 3)); 
Thread.Sleep(500); 
datavalue.KeyDown((char)System.Windows.Forms.Keys.Down); 
datavalue.KeyDown((char)System.Windows.Forms.Keys.Enter); 

其中datavalue是文本字段和值一提的是這是。