События WatiN KeyPress и keyDown ничего не делают в списке выбора

#watin #keypress #selectlist

#watin #нажатие клавиши #список выбора

Вопрос:

Я начинаю кодировать тесты с использованием WatiN, и у меня возникают проблемы с имитацией нажатия пользователем клавиши, когда список выбора находится в фокусе. Это делается для проверки того, что клиентская функция JavaScript, которая запускается событием OnKeyUp в списке выбора, выполняется правильно.

Как я могу имитировать пользователя, который фокусируется на списке выбора и нажимает клавишу «o» на своей клавиатуре?

Я использую последнюю версию WatiN и выполняю модульный тест C # в VS2008. Я закодировал

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

В моем списке выбора есть опция под названием «One», поэтому нажатие клавиши «o» должно привести к тому, что это будет выбранный элемент. Однако при выполнении вызова keyPress ничего не происходит, за исключением того, что список выбора теряет фокус, и мой тест завершается неудачей.

Комментарии:

1. На самом деле мне требуется, чтобы в моем тесте была нажата клавиша. Тест должен подтвердить, что функция JavaScript, которая запускается, когда пользователь фокусируется на элементе управления SelectList и нажимает клавишу, выполняется правильно. Если это правильно, определенный параметр в списке выбора будет выбранным элементом. Использование SelectByValue этого не достигает. Кстати, я также экспериментировал с System. Windows. Формы. Отправка ключей. Ожидание отправки («o»); вместо mySelect. Вызов нажатия клавиши. Это по-прежнему приводит к отсутствию SelectedItem в элементе управления SelectList.

Ответ №1:

Я предполагаю, что у вас есть, но вы смотрели в

 SelectList.SelectByValue
  

?

Казалось бы, это сделало бы ваши тесты более повторяемыми, поскольку вы могли бы добавить что угодно в свой список, и это все еще работало. Кроме того, ваши тесты все равно должны прерываться, если ваши элементы списка выбора не заполняются (по какой-либо причине). Выбор по значению добавляет больше специфичности вашим тестам, а не просто позволяет им выбирать первый элемент, начинающийся с ‘o’.

Fwiw — это то, что мы используем в производстве на моем текущем месте работы.

Ответ №2:

Спасибо тебе, бабушка. Использование элемента.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");
}
  

}

Комментарии:

1. Если это решение вашей проблемы, не могли бы вы, пожалуйста, отметить это как правильный ответ? Это поможет другим пользователям решить ту же проблему. Большое спасибо

Ответ №3:

Я использую SelectList.Select() для выбора выпадающих элементов.

Но поскольку вы хотите протестировать событие javascript, вы можете попробовать явно вызвать событие javascript с помощью Element.FireEvent() .

Кроме того, у TextField объекта есть TypeText() метод, который имитирует ввод пользователем текста и запускает все задействованные события, но я не видел TypeText for SelectList . Возможно, вы сможете найти решение с помощью этих двух.

Ответ №4:

У меня была аналогичная проблема с элементом управления calendar, и я решил ее, вызвав метод / событие .Blur () в элементе управления.