1

我开始使用 watiN 进行编码测试,并且在 SelectList 处于焦点时模拟用户按键时遇到问题。这是为了测试由 SelectList 上的 OnKeyUp 事件触发的客户端 JavaScript 函数是否正确运行。

如何模拟用户将焦点放在 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”键应该会导致它成为选定项目。但是,当进行 keyPress 调用时,除了 SelectList 失去焦点并且我的测试失败之外,什么都没有发生。

4

4 回答 4

0

SelectList.Select()用来选择我的下拉项目。

但由于您想测试 javascript 事件,您可能想尝试使用Element.FireEvent().

此外,该TextField对象有一个TypeText()模拟用户输入并触发所有相关事件的方法,但我没有看到TypeTextfor SelectList。也许您可以找到两者的解决方案。

于 2011-05-11T22:13:18.163 回答
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");
}

}

于 2011-05-18T05:35:29.167 回答
0

我猜你有,但你有没有调查过

SelectList.SelectByValue

?

看起来,这会使您的测试更具可重复性,因为您可以将任何内容添加到您的列表中并让它仍然有效。此外,如果您的选择列表项未能填充(无论出于何种原因),您的测试仍应中断。按值选择为您的测试增加了更多的特异性,而不是让他们选择以“o”开头的第一个项目。

Fwiw 是我们在我目前的工作地点在生产中使用的。

于 2011-05-10T01:44:51.197 回答
0

我在日历控件上遇到了类似的问题,并通过调用控件上的 .Blur() 方法/事件来解决它。

于 2012-09-10T08:22:16.380 回答