我正在开始使用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”键会导致它成为所选项目。但是,除了SelectList失去焦点,并且我的测试失败之外,在进行keyPress调用时没有发生任何事情。
答案 0 :(得分:0)
我猜你有,但你有没看过
SelectList.SelectByValue
它似乎会使您的测试更具可重复性,因为您可以向列表中添加任何内容并使其仍然有效。此外,如果您的选择列表项无法填充(无论出于何种原因),您的测试仍应中断。按值选择会增加测试的特异性,而不是让他们选择以“o”开头的第一个项目。
Fwiw是我们目前在工作场所使用的产品。
答案 1 :(得分:0)
我使用SelectList.Select()
选择我的下拉项目。
但是既然你想测试javascript事件,你可能想尝试用Element.FireEvent()
显式调用javascript事件。
此外,TextField
对象有TypeText()
方法模拟用户输入并触发所有相关事件,但我没有看到TypeText
SelectList
。也许你可以找到两者的解决方案。
答案 2 :(得分:0)
谢谢你,Gram。使用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");
}
}
答案 3 :(得分:0)
我遇到了与日历控件类似的问题,并通过在控件上调用.Blur()方法/事件来解决它。