2011-09-15 3 views
3

Я использую WatiN для опроса раскрытия автозаполнения.Autocomplete DropDown Menu Тестирование с использованием 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, я нашел этот переполнением стека Q & A: Testing JQuery autocomplete ui with cucumber

содержащий информацию, которая, по-видимому, является важной информацией: «Сначала необходимо вызвать курсор мыши, затем щелчок»

Тогда я Googled для WatiN при наведении курсора мыши, и нашел 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. Найти <ul> элемент с классом «UI-автозаполнения» и стиль «блок» дисплей, ожидая, пока он присутствует
  3. Внутри этого <ul> элемента, найти <li> элемент, текст нужное значение (например, «ABC DEFGHIJ»)
  4. Пожарные «OnMouseOver» событие на этом <li> элемента
  5. Нажмите <li> элемент.

Я нашел две проблемы: во-первых, набрав WatiN в в поле ввода было очень плохо вызывая появление меню автозаполнения, и во-вторых, что при нажатии на пункт меню не вызывает происходить автозаполнения.

Я обнаружил, что отправка события с пустым знаком в поле ввода поощряла отображение меню, но не вызывало высвечивание пункта верхнего уровня (тогда как при вводе вручную и нажатии на стрелку вниз оно появляется). Правильное включение элемента меню (включая получение его идентификатора, установленного в 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(); 

Вышеуказанные работы с использованием Watin 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. Также было обнаружено, что если вы выполняете размытие через jquery на TextField, это также работает (на самом деле он не отображает список, хотя, возможно, это не так, как нужно). – 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 является ссылка на текстовое поле и значение является значением, которое должно быть ключом в.