#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 () в элементе управления.