$keyboard->send_input($string,$timeout=0)

Если вы обнаружили какие либо ошибки, недочеты и неудобства или другие незачеты в программе напишите нам об этом на этом форуме - мы бум исправлять
Ответить
momentus
Сообщения: 4
Зарегистрирован: 10 фев 2011, 08:21

$keyboard->send_input($string,$timeout=0)

Сообщение momentus » 11 фев 2011, 06:45

Вот какая проблема обнаружилась:
был скрипт который заполнял поля через $keyboard->input и работал прелестно.
при попытке запуститься в многопоточном режиме начинаются проблемы.. вводится информация только в том окне которое активно в данный момент...
причины понятны, эмулируются нажатия клавиатуры..
Как быть? Нужна многопоточность.

Попробовал заменить печатанье строки на $keyboard->send_input
не прошло, защита сайта начала ругаться. А дело в том что при вводе символов "типа с клавы" срабатывает хендлер onkeydown="handler(event)" onkeypress="handler(event)"
а вот с $keyboard->send_input получается не до конца эмулируется нажатия кнопок.

Очень хочется чтоб этот баг пофиксили.

Спасибо.

Аватара пользователя
igvard
Site Admin
Сообщения: 241
Зарегистрирован: 31 июл 2008, 22:53

Re: $keyboard->send_input($string,$timeout=0)

Сообщение igvard » 11 фев 2011, 16:07

Это обязательного пофиксим, а пока что можно попробовать передавать эти события отдельно перед использованием send_input с помощью функций:

send_event_by_atribute($atr_name,$atr_value,$exactly,$event);
send_event_by_inner_text($text,$exactly,$event);
send_event_by_inner_text_in_frame($text,$exactly,$event,$frame);
send_event_by_name($name,$event);
send_event_by_number($number,$event);


где $event = "onkeydown" и event = "onkeypress".

momentus
Сообщения: 4
Зарегистрирован: 10 фев 2011, 08:21

Re: $keyboard->send_input($string,$timeout=0)

Сообщение momentus » 11 фев 2011, 20:17

пробовал, но это не совсем то. хотя может неправильно готовлю.
в моем случае функция при onkeydown срабатывает с параметром event, в котором передается какую кнопку нажали. ниже пример HTML.
а при вызовах send_event не получается передать нужный параметр.

можно конечно попробовать через вызов $browser->call_java_script
но совсем не понятно, как передать такой кусок кода:

Код: Выделить всё

var evt = document.createEvent("KeyboardEvent");
evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 82, 0);
myForm.myText.onkeydown(evt);

Пример HTML

Код: Выделить всё

<body>
<form action="" method="POST" id="myForm" name="myForm">
<input type="text" name="myText" id="myText" onKeyDown="an2(event)">
<br>

<input type="text" name="out">

<script type="text/javascript" language="JavaScript">
function an2(f) {
 myForm.out.value = f.keyCode;
}
</script>

</form>
</body>

Ответить