2013-03-05 25 views
17

Chcę przejść z Selenium do Poltergeist, ale muszę symulować skaner kodów kreskowych, który wygląda jak wpis na klawiaturze do znacznika <body>. Używam tego kodu z Selen:wsparcie send_keys dla Poltergeist?

native.send_keys(send_key) 

Czy istnieje sposób z Poltergeist wysłać ciąg klucze do dowolnego elementu (czyli nie jest wejściowego)?

+0

Proszę wybrać odpowiedź przez @Matt Sanders jako najlepszą odpowiedź, jak to najdokładniej rozwiązuje swoje pytanie na dzień dzisiejszy. –

+1

Wiele lat później ... dzięki @Matt Sanders –

Odpowiedz

18

Poltergeist teraz has send_keys support:

element = find('input#id') 

# send a simple string 
element.native.send_key('String') 

# send a series of keystrokes 
element.native.send_keys('H', 'elo', :Left, 'l') # => 'Hello' 

# symbol for special keys 
element.native.send_key(:Enter) # triggers Enter key 
2

Nie, obecnie nie ma sposobu, aby to zrobić. PhantomJS dostarcza do tego API, więc może być dodany w przyszłości, ale obecnie nie jest obsługiwany.

Proponuję spróbować wygenerować zdarzenia klawiatury DOM w JavaScript. Lub po prostu zachowaj te specyfikacje używając Selenium i użyj Poltergeist do końca.

+0

To nie jest prawda; phantomjs obsługuje wysyłanie klawiatury, myszy i różnych innych zdarzeń do przeglądarki (nie tylko bardziej ograniczone wyzwalanie dostępne z poziomu sandbox przeglądarki): https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#wiki -webpage-sendEvent –

+1

Tak, * PhantomJS * obsługuje (jak już wspomniałem), ale pytanie dotyczyło * Poltergeist *. Poltergeist nie ma haka do tej części API PhantomJS. – jonleighton

+0

Rzeczywiście - przepraszam! Czy może być możliwe włamanie po stronie klienta (ab) przy użyciu '__poltergeist'? –

3

Od wersji PhantomJS 1.7 (wydany 2012-09-22) można wysyłać zdarzenia klawiatury do przeglądarki bezgłowej przy użyciu adresu page.sendEvent.

Dokumentacja zawiera przykładowe symulowanie shift-A:

page.sendEvent('keypress', page.event.key.A, 
       null, null, 0x02000000 | 0x08000000); 

Jak dokładnie, że wejście jest obsługiwane przez strony (czyli co celowe) będzie zależeć od stanu strony, takie jak, gdzie koncentruje się .

+1

Czy mógłbyś zamieścić link do strony w dokumentacji, gdzie to znalazłeś? Jeśli chcesz tylko nacisnąć jeden klawisz, jaka byłaby składnia? –

+0

https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage#wiki-webpage-sendEvent - pamiętaj jednak, że samo to nie rozwiązuje problemu, ponieważ zdarza się, że poltergeist nie przekazuje tego interfejsu API. Prawdopodobnie możesz się do niego włamać w samym grze poltergeist lub przez nadużycie innych odsłoniętych obiektów, ale nie jest to rozwiązanie typu plug-n-play. –

+0

to rozwiązanie wydaje się idealne do testowania https://github.com/jeresig/jquery.hotkeys. czy możesz wyjaśnić, jak przekazać 'sendEvent' przez rspec i poltergeist do phantomjs? –

2

Począwszy od wersji 1.5.0, poltergeist obsługuje podstawowe funkcje send_keys.

https://github.com/jonleighton/poltergeist/blob/master/CHANGELOG.md#150

+0

Otrzymuję ten błąd, gdy próbuję 'send_keys':' NoMethodError: undefined method 'send_keys' for "1": String' Moja konfiguracja to 'Capybara.driver =: webkit' i' Capybara.javascript_driver =: poltergeist' with Poltergeist v1 .7. Co ja robię źle? – sameers

+0

@Sameers, myślę, że powinieneś przesłać problem na stronę github z poltergeist. 1.7 został właśnie zwolniony, więc nie próbowałem go jeszcze, – Valentin

+0

zrobi, założyłem, że to moja wina, ale może shd wykopałem się w samym poltergeist ... – sameers