我正在使用WatiN测试自动完成功能下拉。
当用户输入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自动完成测试,我发现这个Stack Overflow Q&amp; A: 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控件,这只是一个例子)
此时我觉得我有一个计划如何推动这个:
<ul>
元素并显示样式“block”,等待它出现<ul>
元素中,找到其文本为所需值的<li>
元素(例如“ABC DEFGHIJ”)<li>
元素<li>
元素。我发现了两个问题:首先,WatiN在输入字段中的输入在触发自动完成菜单的外观时非常糟糕, 其次,单击菜单项不会导致自动完成。
我发现向输入字段发送一个向下箭头键事件鼓励显示菜单,但不会导致顶部菜单项突出显示 (如果您手动输入并按下向下箭头,则确实如此)。正确激活菜单项 (包括将其ID设置为ui-active-menuitem)可能是此处缺少的链接。
有谁能帮我理解和解决我提到的两个问题?
答案 0 :(得分:3)
花了一点时间,但这是一个有效的例子。
关键点
为了让它正确选择项目,我需要按照特定顺序完成上述所有三项。
<强>代码强>
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();
以上作品使用Watin 2.1。它不适用于WatiN 2.0 RC。我没有检查实际的2.0版本。 2.0 RC没有List和ListItem对象。仅在IE8上测试。
答案 1 :(得分: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是对textfield的引用,value是要键入的值。