2011-05-10 82 views
1

我開始使用watiN編碼測試,並且在SelectList焦點時模擬用戶按下按鍵時遇到了問題。這是爲了測試由SelectList上的OnKeyUp事件觸發的客戶端JavaScript函數是否正確運行。WatiN KeyPress和keyDown事件在SelectList上沒有做任何事

如何模擬用戶將焦點放在SelectList上並按下鍵盤上的'o'鍵?

我正在使用最新的WatiN版本,並在VS2008中進行C#單元測試。我已編碼

ie = new IE(myTestPageURL); 
SelectList mySelect = ie.SelectLists[0]; 
mySelect.Focus(); 
mySelect.KeyPress('o'); 
Assert.IsTrue(mySelect.SelectedItem != null); 

我的選擇列表中有一個選項,名爲「One」,所以按'o'鍵應該會導致它成爲選定的項目。但是,除了SelectList失去焦點並且我的測試失敗之外,在進行keyPress調用時沒有任何事情發生。

+0

我實際上需要在我的測試中按下一個鍵。該測試旨在確認在用戶將焦點移至SelectList控件並按下某個鍵時正常運行的JavaScript函數。如果它是正確的,SelectList中的某個選項將成爲選定的項目。使用SelectByValue不能實現這一點。順便說一下,我也嘗試過使用System.Windows.Forms.SendKeys.SendWait(「o」);而不是mySelect.KeyPress調用。它仍然導致SelectList控件上沒有SelectedItem。 – 2011-05-10 04:48:38

回答

0

我猜你有,但你看着

SelectList.SelectByValue 

看起來,它會讓您的測試更具可重複性,因爲您可以向列表中添加任何內容並使其仍然有效。此外,如果您的選擇列表項無法填充(無論出於何種原因),您的測試仍應該中斷。按值選擇爲您的測試增加了更多的特異性,而不僅僅是讓他們選擇以'o'開頭的第一項。

Fwiw是我在當前就業地點用於生產的產品。

0

我使用SelectList.Select()來選擇我的下拉項目。

但是既然你想測試javascript事件,你可能想嘗試用Element.FireEvent()顯式地調用javascript事件。

而且,TextField對象有一個TypeText()方法,模擬一個用戶鍵入並觸發所有參與的事件,但我沒有看到一個SelectListTypeText。也許你可以找到兩個解決方案。

0

謝謝,克。使用Element.FireEvent適用於我。對於任何感興趣的人來說,代碼最終都會看起來像這樣。

[TestMethod] 
public void KeyboardSelection_OptionMatches() 
{ 
    ie = new IE("http://localhost:7561/WebSite2/Default.aspx"); 
    SelectList mySelect = ie.SelectLists[0]; 
    mySelect.Focus(); 
    NameValueCollection nvc = new NameValueCollection(); 
    nvc.Add("charCode", ACharCode); //Constant for test - equals '65' 
    nvc.Add("keyCode", ACharCode); 
    // this should select the "A" option 
    mySelect.FireEvent("onkeydown", nvc); 
    // this should move the selected option to "aardvark" 
    mySelect.FireEvent("onkeydown", nvc); 
    string selectedValue = mySelect.SelectedItem.ToLower(); 
    ie.Close(); 
    Assert.AreEqual(selectedValue, "aardvark"); 
} 

}

+0

如果這是解決您的問題的方法,請您將此標記爲正確答案?這將幫助其他用戶解決相同的問題。非常感謝 – Gabber 2012-04-04 09:20:28

0

我同一個日曆控制一個類似的問題,並通過該控制調用.Blur()方法/事件解決它。