Валидация поля Selenium RC
#1
Отправлено 01 марта 2011 - 12:26
Необходимо в текстбокс вставить данные, а под текстбоксом находится лейбл, который дублирует строку! Тоесть получается, когда вводишь текст с клавиатуры, лейбл повторяет этот текст!
Но селениум с помощью метода Type() не имитирует ввод с клавиатуры, а просто вставляет строку, таким образом лейбл не реагирует на изменения! видимо, логика написана так, что изменения отлавливаются только при нажатии любой клавиши клавиатуры.
Кто нибудь сталкивался с такой проблемой? какими методами можно с имитировать именно нажатие клавишы?
Методы KeyUp(), KeyDown() или не действуют, или я неправильно их использовал))
Лейбл изменяется, если кликнуть(именно кликнуть, а не чекнуть) на радио баттон, но хотелось бы обойтись без этого способа
#2
Отправлено 01 марта 2011 - 12:28
typeKeys
Simulates keystroke events on the specified element, as though you typed the value key-by-key. This is a convenience method for calling keyDown, keyUp, keyPress for every character in the specified string;this is useful for dynamic UI widgets (like auto-completing combo boxes) that require explicit key events.
Unlike the simple "type" command, which forces the specified value into the page directly, this commandmay or may not have any visible effect, even in cases where typing keys would normally have a visible effect.For example, if you use "typeKeys" on a form element, you may or may not see the results of what you typed inthe field.
In some cases, you may need to use the simple "type" command to set the value of the field and then the "typeKeys" command tosend the keystroke events corresponding to what you just typed.
$locator is an element locator
$value is the value to type
#3
Отправлено 01 марта 2011 - 12:45
Попробовал этот метод, не получилось!(
Исходя из логов селениум сервера, запрос отправлен и результат ОК, но значение в текстбокс так и не ввелось!(
обращаюсь к контролу через джейквери.
TypeKeys(AlertDefaultsPage.Default.GreetingEnglishUK, "Test form");
#4
Отправлено 01 марта 2011 - 12:59
Попробуйте установить сначала фокус в это поле.Спасибо за быстрый ответ!
Попробовал этот метод, не получилось!(
Исходя из логов селениум сервера, запрос отправлен и результат ОК, но значение в текстбокс так и не ввелось!(
обращаюсь к контролу через джейквери.
TypeKeys(AlertDefaultsPage.Default.GreetingEnglishUK, "Test form");
Еще можно попробовать после TypeKeys послать "onchange" event в этот контрол
SQL для тестировщиков
Тренинги по HP QTP и автоматизации тестирования
Если минарет, значит выше всех (с)
#5
Отправлено 01 марта 2011 - 13:25
#6
Отправлено 01 марта 2011 - 13:41
#7
Отправлено 02 марта 2011 - 17:20
#8
Отправлено 03 мая 2011 - 13:06
fireevent(elLocator, Event.KEYPRESS);
Но... сейчас понадобилось добавлять текст после вызова event'а.
Оказалось, что при вводе текста через typekeys стирается предыдущая запись.
при использовании KeyPressNative предыдущая запись не стирается, но не понятно как вводить русские буквы (вводятся только английские или цифры, в остальных случаях выдается Invalid Key Code)? Нужно каким-то образом подгрузить локаль? Как правильно это сделать?
#9
Отправлено 03 мая 2011 - 14:05
Схожая проблема. Сначала отползал используя typeKeys, потом добавлял и стирал пробел с помощью KeyPressNative. После этого нормально можно было ловить event
fireevent(elLocator, Event.KEYPRESS);
Но... сейчас понадобилось добавлять текст после вызова event'а.
Оказалось, что при вводе текста через typekeys стирается предыдущая запись.
при использовании KeyPressNative предыдущая запись не стирается, но не понятно как вводить русские буквы (вводятся только английские или цифры, в остальных случаях выдается Invalid Key Code)? Нужно каким-то образом подгрузить локаль? Как правильно это сделать?
Нагуглил весёлое решение:
public static void pressUnicode(Robot r, int key_code) { r.keyPress(KeyEvent.VK_ALT); for(int i = 3; i >= 0; --i) { // extracts a single decade of the key-code and adds // an offset to get the required VK_NUMPAD key-code int numpad_kc = key_code / (int) (Math.pow(10, i)) % 10 + KeyEvent.VK_NUMPAD0; r.keyPress(numpad_kc); r.keyRelease(numpad_kc); } r.keyRelease(KeyEvent.VK_ALT); }
Просто вводим юникод символы через ALT.
#10
Отправлено 03 мая 2011 - 14:23
В результате выдаются числа 0..9
хотя... осенило - я не на нумпаде цифры нажимал!!
конечно это решение кривовато. где-то находил, что можно awt properties переопределить, только как это делается не нашел :(
#11
Отправлено 04 мая 2011 - 11:57
если берем (int)'Б' то получаем код 1041 (что эквивалентно коду быквы в utf U+0411). При попытке ввести символ с таким кодом в строке приложения получаем: ◄
Заполнять массив с буквами и соответствующим им кодами, вычисленными эмпирически не хочется, есть сомнения, что на другом компьютере уже получим другие коды.
#12
Отправлено 04 мая 2011 - 12:56
public static void press(Robot r, int key_code) { r.keyPress(KeyEvent.VK_ALT); for (int i = 2; i >= 0; --i) { // extracts a single decade of the key-code and adds // an offset to get the required VK_NUMPAD key-code int numpad_kc = key_code / (int) (Math.pow(10, i)) % 10 + KeyEvent.VK_NUMPAD0; r.keyPress(numpad_kc); r.keyRelease(numpad_kc); } r.keyRelease(KeyEvent.VK_ALT); } public void typeKeys(ElementLocator<?> elLocator, String str) { selenium.focus(elLocator); byte[] arr; Robot robot = new Robot(); arr = str.getBytes("866"); for (int i = 0; i < arr.length; i++) { int j = (int) arr[i]; if (j < 0) j += 256; press(robot, j); } }
Критика и правки приветствуются)
#13
Отправлено 16 апреля 2012 - 13:36
type(нужная строка)
typeKeys(пробел)
PS проверяю валидацию на выползающий список соответствий поисковому запросу
#14
Отправлено 16 апреля 2012 - 13:54
selenium.typeKeys(elLocator, text); String str = selenium.getHtmlSource(); int i = 0; if (firstInput) { selenium.fireEvent(elLocator, Event.KEYDOWN); selenium.fireEvent(elLocator, Event.KEYUP); }
по typeKeys к сожалению, нужное событие не отрабатывает
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных