Ich öffne eine Reihe von URLs mit einem WebDriver in Ruby - eine Art Diashow mit 3 Sekunden Intervallen zwischen "Folien" (Seiten). Die Person, die auf dieses Ereignis schaut, könnte auf Space klicken und ich brauche diese Seiten-URL in einer anderen Datei gespeichert. Wie könnte ich mit diesen Unterbrechungen umgehen - fangen Sie das Ereignis von Space gedrückt?Ruby-Webdriver: Wie wird die Taste gedrückt, während das Skript ausgeführt wird?
Antwort
Ihr Problem könnte mit STDIN.getch lösbar sein.
Wenn Sie eine Datei mit dem folgenden Skript erstellen und sie dann in einer Eingabeaufforderung (zB „Rubin script.rb“), wird das Skript:
- Navigieren Sie zu der URL.
- Fragen Sie, ob die URL erfasst werden soll.
- Wenn der Benutzer innerhalb von 10 Sekunden nichts eingibt, wird mit der nächsten URL fortgefahren. Ich habe es von 3 geändert, da es zu schnell war. Sie können die Zeit in der Zeile
Timeout::timeout(10)
auf 3 Sekunden zurücksetzen. - Wenn der Benutzer etwas eingegeben hat, wird die URL gespeichert, wenn es sich bei der Eingabe um ein Leerzeichen handelt. Sonst ignoriert es es und geht weiter.
Script:
require "watir-webdriver"
require 'io/console'
require 'timeout'
urls = ['www.google.ca', 'www.yahoo.ca', 'www.gmail.com']
saved = []
b = Watir::Browser.new
urls.each do |url|
b.goto url
# Give user 10 seconds to provide input
puts "Capture url '#{url}'?"
$stdout.flush
input = Timeout::timeout(10) {
input = STDIN.getch
} rescue ''
# If the user's input is a space, save the url
if input == ' '
saved << b.url
end
end
p saved
Ein paar Anmerkungen:
- Beachten Sie, dass die Eingaben an der Eingabeaufforderung sein müssen, anstatt den Browser.
- Wenn der Benutzer vor dem zugewiesenen Zeitlimit eine Taste drückt, fährt das Skript sofort mit der nächsten URL fort.
Justin, könntest du dir irgendeinen Weg vorstellen, wie wir sagen können, dass wir einen Abwärtspfeil anstelle von Enter drücken, um zur nächsten URL zu gelangen? Und - ja, ein einzelner Schlüssel ("s" zum Beispiel als Abkürzung für "save") anstelle von s-Enter hätte so viel schöner sein können. Ich werde wahrscheinlich einen Weg finden müssen, damit $ stdin nur einen Schlüssel erwartet und nicht (some_entry) + Enter. – earlyadopter
Okay, nach etwas mehr Graben habe ich einige Kernbibliotheken gefunden, die kombiniert werden können, um das zu tun, was wir brauchen (dh nicht mehr Enter-Schlüssel). Versuchen Sie diese aktualisierte Antwort. –
- 1. App geschlossen, während Zurück-Taste gedrückt wird
- 2. ViewDidLoad wird langsam ausgeführt, während Viewcontroller gedrückt wird
- 3. Inkrement um 10, während die Taste gedrückt wird Love2D
- 4. Welche Methode ausgeführt wird auf Up-Taste gedrückt
- 5. Laufender Code, bis die Taste gedrückt wird
- 6. Wie wird der Befehl angezeigt, der in einem Skript ausgeführt wird, während es ausgeführt wird?
- 7. Wie wird das Skript erneut ausgeführt?
- 8. Autohotkey Wie man eine Maustaste gedrückt hält, während eine Taste gedrückt wird?
- 9. textFieldShouldBeginEditing wird mehrfach aufgerufen, wenn die "Tab" -Taste gedrückt wird
- 10. JavaScript-Datei wird zwischengespeichert, wenn die Zurück-Taste gedrückt wird
- 11. JLabel wird nicht aktualisiert, wenn die Taste gedrückt wird
- 12. Datenbankspalte wird nicht aktualisiert, wenn die Taste gedrückt wird
- 13. Wie lösche ich das Textfeld, wenn eine Taste gedrückt wird?
- 14. Wie wird eine Taste hervorgehoben, wenn gedrückt wird?
- 15. Wie UAC-Eingabeaufforderung zu vermeiden, während Powershell-Skript ausgeführt wird
- 16. Animation erscheint nur, wenn Taste gedrückt wird, Bild verschwindet, wenn keine Taste gedrückt wird
- 17. Wie erkennt man die Mausbewegung über den Knoten, während die Taste gedrückt wird?
- 18. Haben mehrere Befehle, wenn die Taste gedrückt wird
- 19. PHP-Skript wird nicht ausgeführt
- 20. Unerwünschter Signalton, wenn eine Taste gedrückt wird
- 21. Lesen, wenn eine Taste gedrückt wird Java
- 22. Seite nicht umgeleitet, wenn Taste gedrückt wird
- 23. Android-Webansicht wird geschlossen, wenn Taste "Zurück" gedrückt wird
- 24. Verhindern, dass das Tablet schläft, während die App ausgeführt wird
- 25. Echo-Nachrichten, während PHP-Skript noch ausgeführt wird
- 26. Codeblock verhindert, dass Skript ausgeführt wird, aber interaktiv ausgeführt wird
- 27. Eine Aktion wiederholen, solange die Taste gedrückt wird
- 28. LED bleibt nur eingeschaltet, wenn die Taste gedrückt wird?
- 29. Body-Onload-Skript wird vor PHP das PHP-Skript ausgeführt
- 30. Java tun Methode während JToggleButton gedrückt wird
Wo würden Sie erwarten, dass der Raum gepresst wird? Meinst du in dem Browser oder vielleicht der Eingabeaufforderung, das Skript auszuführen? –
@ Justin-Ko: entweder wird für mich arbeiten. Ich versuchte die hier angebotene Lösung http://stackoverflow.com/questions/946738/detect-key-press-non-blocking-wo-getc-gets-in-ruby, konnte aber keine im Browser gedrückten Tasten fangen (nichts passiert) oder Befehlszeile (es zeigt gedrückte Tasten, aber ohne Auswirkung auf das Skript läuft). – earlyadopter