Перейти к содержимому

Фотография

Валидация поля Selenium RC


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 eRil

eRil

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 01 марта 2011 - 12:26

У меня возник трабл при обработке обычного текст бокса!
Необходимо в текстбокс вставить данные, а под текстбоксом находится лейбл, который дублирует строку! Тоесть получается, когда вводишь текст с клавиатуры, лейбл повторяет этот текст!
Но селениум с помощью метода Type() не имитирует ввод с клавиатуры, а просто вставляет строку, таким образом лейбл не реагирует на изменения! видимо, логика написана так, что изменения отлавливаются только при нажатии любой клавиши клавиатуры.
Кто нибудь сталкивался с такой проблемой? какими методами можно с имитировать именно нажатие клавишы?
Методы KeyUp(), KeyDown() или не действуют, или я неправильно их использовал))
Лейбл изменяется, если кликнуть(именно кликнуть, а не чекнуть) на радио баттон, но хотелось бы обойтись без этого способа
  • 0

#2 SMakc

SMakc

    Новый участник

  • Members
  • Pip
  • 56 сообщений
  • ФИО:Максим
  • Город:Москва

Отправлено 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


  • 0

#3 eRil

eRil

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 01 марта 2011 - 12:45

Спасибо за быстрый ответ!
Попробовал этот метод, не получилось!(
Исходя из логов селениум сервера, запрос отправлен и результат ОК, но значение в текстбокс так и не ввелось!(
обращаюсь к контролу через джейквери.
TypeKeys(AlertDefaultsPage.Default.GreetingEnglishUK, "Test form");
  • 0

#4 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 01 марта 2011 - 12:59

Спасибо за быстрый ответ!
Попробовал этот метод, не получилось!(
Исходя из логов селениум сервера, запрос отправлен и результат ОК, но значение в текстбокс так и не ввелось!(
обращаюсь к контролу через джейквери.
TypeKeys(AlertDefaultsPage.Default.GreetingEnglishUK, "Test form");

Попробуйте установить сначала фокус в это поле.
Еще можно попробовать после TypeKeys послать "onchange" event в этот контрол
  • 0

#5 eRil

eRil

    Новый участник

  • Members
  • Pip
  • 11 сообщений

Отправлено 01 марта 2011 - 13:25

TypeKeys() срабатывает в ФФ, в ИЕ не хочет вводить ниодного символа!!с чем это может быть связано?
  • 0

#6 panterka

panterka

    Активный участник

  • Members
  • PipPip
  • 102 сообщений
  • ФИО:Panterochka
  • Город:Saint John


Отправлено 01 марта 2011 - 13:41

Это бага селениума, которую все еще не пофиксили (http://jira.openqa.org/browse/SEL-573)
  • 0

#7 horhe

horhe

    Активный участник

  • Members
  • PipPip
  • 100 сообщений
  • ФИО:Юрко
  • Город:Kraków

Отправлено 02 марта 2011 - 17:20

если текста немного, в пределах пары слов можно попробовать, keyPressNative, но это корявенькое решение
  • 0
Piobaireachd isn't mysterious, difficult or hard - it's just music...

#8 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 03 мая 2011 - 13:06

Схожая проблема. Сначала отползал используя typeKeys, потом добавлял и стирал пробел с помощью KeyPressNative. После этого нормально можно было ловить event
fireevent(elLocator, Event.KEYPRESS);
Но... сейчас понадобилось добавлять текст после вызова event'а.
Оказалось, что при вводе текста через typekeys стирается предыдущая запись.

при использовании KeyPressNative предыдущая запись не стирается, но не понятно как вводить русские буквы (вводятся только английские или цифры, в остальных случаях выдается Invalid Key Code)? Нужно каким-то образом подгрузить локаль? Как правильно это сделать?
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#9 stmark

stmark

    Опытный участник

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


Отправлено 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.
  • 0

#10 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 03 мая 2011 - 14:23

Через Alt - эт первое что попробовал)) Но хоть убейте, не "зажимается" alt
В результате выдаются числа 0..9

хотя... осенило - я не на нумпаде цифры нажимал!!

конечно это решение кривовато. где-то находил, что можно awt properties переопределить, только как это делается не нашел :(
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#11 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 04 мая 2011 - 11:57

Как все-таки узнать коды русских букв? Полдня сегодня промучался ничего не получилось %)
если берем (int)'Б' то получаем код 1041 (что эквивалентно коду быквы в utf U+0411). При попытке ввести символ с таким кодом в строке приложения получаем: ◄
Заполнять массив с буквами и соответствующим им кодами, вычисленными эмпирически не хочется, есть сомнения, что на другом компьютере уже получим другие коды.
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#12 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 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);
		}
	}

Критика и правки приветствуются)
  • 0
Если ничего не помогает, прочтите наконец инструкцию!

#13 aceton

aceton

    Новый участник

  • Members
  • Pip
  • 29 сообщений
  • ФИО:Павел

Отправлено 16 апреля 2012 - 13:36

такая же проблема, решаю так:
type(нужная строка)
typeKeys(пробел)

PS проверяю валидацию на выползающий список соответствий поисковому запросу
  • 0

#14 DrBlast

DrBlast

    Активный участник

  • Members
  • PipPip
  • 139 сообщений
  • ФИО:Евгений
  • Город:Москва

Отправлено 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 к сожалению, нужное событие не отрабатывает
  • 0
Если ничего не помогает, прочтите наконец инструкцию!


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных