2015-07-20 18 views
7

Próbuję zasymulować naciśnięcie klawisza "enter" z javascript dla automatyzacji.Zdarzenie wprowadzania javascript nie działa w google

var script = document.createElement('script'); 
script.src = 'https://code.jquery.com/jquery-1.10.2.min.js'; 
script.type = 'text/javascript'; 
document.body.appendChild(script); 
var e = jQuery.Event("keypress"); 
e.which = 13; //choose the one you want 
e.keyCode = 13; 

To jest kod służący do konfiguracji wydarzenia kluczowego (próbowałem również keydown i keyup).

Wydaje się, że to nie działa podczas wyszukiwania w Google. Jeśli napiszę jakiś tekst i wywołam zdarzenie w polu wejściowym $("[name=q]").trigger(e) nic się nie dzieje.

Używam google do testowania symulacji "właściwego" zdarzenia wejścia. Mam nadzieję, że użyję js do automatyzacji klienta WWW skype.

Czy ktoś wie, czy możliwe jest symulowanie rzeczywistego naciśnięcia klawisza Enter przy użyciu javascript? Widziałem, że Selenide działa pressEnter(), ale używa webdrivera, więc może to nie ma znaczenia.

Próbowałem zostały również natywną js zdarzenie wyzwalające

var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) { 
    var e = document.createEvent("KeyboardEvents"); 
    e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1)); 
    target.dispatchEvent(e); 
}; 

dispatchKeyboardEvent($("[name=q]"), 'keypress', true, true, null, 'h', 13, ''); 

Sidenote Jestem świadomy, że zapytania można składać dzwoniąc .submit() na elemencie, ale nie to, że jestem po.

+1

Nic się nie dzieje? Spodziewam się, że konsola błędów zarzuci, że jQuery nie została zdefiniowana. (O ile nie zostało to już zdefiniowane przed uruchomieniem skryptu, w takim przypadku pierwsze cztery wiersze są bezcelowe). – Quentin

+0

brak błędów, wypluwa element jak większość wywołań jquery – Bobbzorzen

+0

jest elementem, który wybrałeś związany z jquery? –

Odpowiedz

1

Gdy odwołujesz się do kodu document, kod powinien zostać wykonany, gdy dom jest gotowy.

Kod wyzwalający zdarzenia powinien zostać wykonany po załadowaniu jQuery, dlatego należy zapisać kod w wywołaniu zwrotnym script.onload.

Jak wspomniano here przymocować zwrotnego przed dołączenie elementu script do document.body, a także przed przypisaniem src do script element.

Praca demo: jsFiddle

+0

Nie wiem, czy brakuje mi czegoś, ale wysłanie zdarzenia jest wykonywane ręcznie przeze mnie po załadowaniu skryptu jQuery. Testowałem również Twój przykład na google.com i chociaż uruchomiono program do zgłaszania zdarzeń z Twoim kodem, przeglądarka nie zarejestrowała klucza Enter i nie przeszukała go. – Bobbzorzen

+0

Ze względów bezpieczeństwa przeglądarki nie pozwalają elementom na fałszywe zdarzenia. Ale możesz użyć [sendKeys] (http://bililite.com/blog/2015/01/14/rethinking-fn-sendkeys/), jego wtyczki jQuery do wysyłania zdarzeń. –

+0

Próbowałem, nie działa. Działa tak samo, jak domyślna wysyłka klucza opisana w oryginalnym poście. dziękuję za podpowiedź – Bobbzorzen

0
<select id="ss"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select> 

$('#ss').keypress(function(e){ 
    var p = e.keyCode; 
    alert(p); 
    if(p==13){ 
     alert('enter was pressed'); 
    } 
}); 
+0

Jak już wcześniej wspomniałem, nie szukam sposobu na słuchanie wydarzeń, szukam sposobu na symulowanie zdarzeń w realistyczny sposób, jak zdarzenia wywołane przez selenide za pomocą webdrivers. dzięki mimo to jednak – Bobbzorzen

1

Jeśli kod ustawia ciąg kwerendy wyszukiwania w jednym strzale, nasłuchiwać na zmiany razie dziedzinie i wywołać funkcję.

$("#searchBarId").on("change", function(){ 
    var e = jQuery.Event("keydown"); 
    e.which = 13; // # Enter key code value 
    $("input").trigger(e) 
}); 

Odpowiedź z Definitive way to trigger keypress events with jQuery

Czy to rozwiązać Twój problem?

+0

Niestety nie, jak opisano w moim pytaniu Próbowałem już tej metody wysyłania zdarzeń i to nie działa. – Bobbzorzen