Вот какая проблема обнаружилась:
был скрипт который заполнял поля через $keyboard->input и работал прелестно.
при попытке запуститься в многопоточном режиме начинаются проблемы.. вводится информация только в том окне которое активно в данный момент...
причины понятны, эмулируются нажатия клавиатуры..
Как быть? Нужна многопоточность.
Попробовал заменить печатанье строки на $keyboard->send_input
не прошло, защита сайта начала ругаться. А дело в том что при вводе символов "типа с клавы" срабатывает хендлер onkeydown="handler(event)" onkeypress="handler(event)"
а вот с $keyboard->send_input получается не до конца эмулируется нажатия кнопок.
Очень хочется чтоб этот баг пофиксили.
Спасибо.
$keyboard->send_input($string,$timeout=0)
Re: $keyboard->send_input($string,$timeout=0)
Это обязательного пофиксим, а пока что можно попробовать передавать эти события отдельно перед использованием 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".
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".
Re: $keyboard->send_input($string,$timeout=0)
пробовал, но это не совсем то. хотя может неправильно готовлю.
в моем случае функция при onkeydown срабатывает с параметром event, в котором передается какую кнопку нажали. ниже пример HTML.
а при вызовах send_event не получается передать нужный параметр.
можно конечно попробовать через вызов $browser->call_java_script
но совсем не понятно, как передать такой кусок кода:
Пример HTML
в моем случае функция при 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>